文件上传漏洞-(下)
Pass-10:双后缀名绕过
效果如下:
尝试双写后缀名绕过:
Pass-11:%00截断
使用了白名单方式:
先上传php文件试试看看:
url里多了一个“save_path”变量,我们使用%00来绕过:
咦,并没有上传成功呢?原来php.ini文件中有个配置项:
magic_quotes_gpc=On
它的作用是将单引号、双引号、反斜杠与NULL等进行转义。
我们先将On改为Off,重启服务器后,重试,成功:
upload文件夹下有了一个1.php文件。
我们看一下原理:
修改后的拼接路径为:
http://localhost:8081/upload-labs/Pass-11/index.php?save_path=…/upload/1.php%00/ 4820190726135640.jpg
但是%00截断了后面的内容,只剩下了
http://localhost:8081/upload-labs/Pass-11/index.php?save_path=…/upload/1.php
总结一下,本关上传成功需要两个条件:
php版本小于5.3.4
php的magic_quotes_gpc为OFF状态
Pass-12:0x00截断
使用第11关的方式上传,看看效果:
上传失败了,查一下源码:
使用了post请求,我们同样可以使用截断方法上传php文件,但是第11关的get请求可以对%00进行解码,post请求不行,所以我们改用十六进制的0x00,
上传成功:
Pass-13:文件头检查
这一关考察的是如何绕过文件头的检测:
我们制作图片木马2.jpg:
上传图片木马:
这个漏洞需要结合文件包含漏洞访问这个图片木马:
include.php:
Pass-14:
getimagesize()函数用于获取图片的高度、宽度、文件格式,那我们就可以利用这一点绕过了:
同样再结合文件包含漏洞访问图片以执行php命令:
Pass-15:
先看源码:
要开启php.ini中的php_exif.dll配置:
重启服务后,其余操作就跟第13关相同了~
php_exif.dll作用?
Pass-16:
查看源码:
从源码可以看出,检查了文件后缀名、类型(Content-type),使用imagecreatefromjpeg判断是否为jpg格式的图片,最后做了一次二次渲染,绕过方式如下:
虽然提示了“此文件不是gif格式的图片”,但是1.gif还是上传成功了,还是需要结合文件包含漏洞访问1.gif才行:
另外也可以图片木马+文件包含漏洞结合:
Pass-17:条件竞争
查看源码:
限制了文件类型,这个过程中,重命名文件,使用unlink删除文件,然后提示。我们需要做的就是在unlink删除之前访问到文件,那就需要使用抓包工具不停的提交请求了……
Pass-18:
上传图片木马,同样是竞争条件,利用时间差
Pass-19:
本题需要结合CVE-2017-15715
上传一个php文件,失败:
接着上传一个1.php.txt文件:
但是访问后并不解析:
注意:如果只单纯的进行后缀检查,可以想办法绕过。