upload-labs 刷题记录
upload-labs 刷题记录
参考:
Pass-01 js检查
前端验证图片格式,禁用js
或者使用burp
抓包修改后缀即可。
访问http://127.0.0.1:8081/upload-labs/upload/phpinfo.php
即可查看信息。
Pass-02 只验证content-type
只验证了content-type
类型,抓包修改即可
Pass-03 黑名单绕过
采用黑名单机制,不允许上传.asp,.aspx,.php,.jsp
后缀的文件,但可以上传.phtml .phps .php5 .pht
,前提是apache
的httpd.conf
中有如下配置代码
AddType application/x-httpd-php .php .phtml .phps .php5 .pht |
上传后注意关注下文件存储位置和文件名
Pass-04 .htaccess绕过
禁止了一系列文件类型,但没有禁止.htaccess
,不过该方法需要mod_rewrite
模块开启且AllowOverride All
。
上传一个.htaccess
文件,内容为
SetHandler application/x-httpd-php |
这样所有文件都会当成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 条件竞争
审计源码,发现后端是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传后但未验证的这一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。
用burp
的intruder
模块不停发送请求,然后不断刷新页面访问直到成功。
Pass-19 后缀判断+二次渲染+条件竞争
上传图片马配合文件包含漏洞即可,其他同Pass-18
。
Pass-20 /.绕过
move_uploaded_file()特性之一:忽略掉文件末尾的 /.