文件上传漏洞-(下)

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:

<?php $file=$_GET['page']; include($file); ?>![在这里插入图片描述](https://img-blog.csdnimg.cn/20200321202033806.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dvYnVzaGluaQ==,size_16,color_FFFFFF,t_70)

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文件:文件上传漏洞-(下)
但是访问后并不解析:文件上传漏洞-(下)
注意:如果只单纯的进行后缀检查,可以想办法绕过。