upload-labs 刷题记录

参考:

HxD

upload-labs之pass 16详细分析

upload-labs通关攻略

Pass-01 js检查

前端验证图片格式,禁用js或者使用burp抓包修改后缀即可。

be4d8b59f055d5ad042387525c54bfa2.png

访问http://127.0.0.1:8081/upload-labs/upload/phpinfo.php即可查看信息。

Pass-02 只验证content-type

只验证了content-type类型,抓包修改即可

3bf4033c5b0d71b5c70903f7e787b8bb.png

Pass-03 黑名单绕过

采用黑名单机制,不允许上传.asp,.aspx,.php,.jsp后缀的文件,但可以上传.phtml .phps .php5 .pht,前提是apachehttpd.conf中有如下配置代码

AddType application/x-httpd-php .php .phtml .phps .php5 .pht

上传后注意关注下文件存储位置和文件名

dc38b78d98fa42a507712c6e224bae50.png

Pass-04 .htaccess绕过

禁止了一系列文件类型,但没有禁止.htaccess,不过该方法需要mod_rewrite模块开启且AllowOverride All

上传一个.htaccess文件,内容为

SetHandler application/x-httpd-php

ba4a58067b6876052721825a87ac6fa2.png

这样所有文件都会当成php文件来解析,所以此时再上传phpinfo.jpg并访问即可。

Pass-05 点空格点绕过

后缀修改为.php. .

Pass-06 大小写绕过

修改文件后缀为.PHP即可

Pass-07 空格绕过

后缀最后加空格即可

Pass-08 点绕过

后缀加点即可.php.

Pass-09 ::$DATA绕过

在后缀加::$DATA即可

Pass-10 点空格点绕过

Pass-05

Pass-11 双写绕过

后缀改为.pphphp

Pass-12 %00截断

抓包修改save_path参数

php版本要小于5.3.4且magic_quotes_gpc为OFF状态

Pass-13 0x00截断

Pass-12,只不过这里路径是POST请求,所以要抓包后修改Hex

Pass-14 文件头检测

可以直接用copy 14.jpg /b + 14.php /a webshell.jpg生成图片马,然后直接上传。

上传后使用自带的include.php读取即可

http://127.0.0.1:8081/upload-labs/include.php?file=./upload/6220220527081735.png

Pass-15 getimagesize检测

Pass-14

getimagesize函数:对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的

Pass-16 exif_imagetype检测

Pass14,但要打开php_exif

exif_imagetype函数:读取一个图像的第一个字节并检查其签名

Pass-17 二次渲染

HxD查看上传前后文件差异,看看哪个部分没有被修改,将php代码放到没有被更改的部分即可。

详细操作可见upload-labs之pass 16详细分析

imagecreatefromjpeg函数:用于从JPEG文件或URL创建新图像,在此过程中可能会有信息丢失(如植入的php代码)

Pass-18 条件竞争

审计源码,发现后端是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传后但未验证的这一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。

burpintruder模块不停发送请求,然后不断刷新页面访问直到成功。

Pass-19 后缀判断+二次渲染+条件竞争

上传图片马配合文件包含漏洞即可,其他同Pass-18

Pass-20 /.绕过

8b13cd552ce4213d4e01abcd454d87cc.png

move_uploaded_file()特性之一:忽略掉文件末尾的 /.

Pass-21 数组绕过

ac64dfb6954cf795497815163ebe8c23.png