文件上传漏洞笔记(二)——白名单绕过
上面讲过了黑名单绕过,白名单就是只允许规定的文件后缀能上传,所以要比黑名单安全
一、%00绕过
这个%00是什么意思呢?看到有%,那么首先就应该想到的是URL编码。然而%00只针对GET传参,所以POST传参不能识别URL编码
原理就是:一般上传的文件不是直接就送到服务器上的,而是先放到临时目录里,然后再重命名(经常我们看到的网页上的图片都是一串数字,那就是重命名之后的),最后再发往服务器
我们可以看到,最后重命名之后的文件的存储路径是用的GET传参
这个就是上传包
这个时候就用%00截断
来看上传之后的图片地址:虽然最后有数字.jpg但是已经不会执行了
二、0x00截断
其实就是post传参的00截断,因为post传参不走URL栏,所以就不用%00
在这里我们先这样修改,然后再进入hex界面
将a对应的十六进制值修改为00就可以了
三、图片马绕过
利用cmd命令:copy 123.jpg/b + aaa.php 666.jpg 可以将aaa.php中的一句话木马写入123.jpg,生成一张长得一模一样的图片666.jpg,再配合解析漏洞就可以拿到shell
四、二次渲染
二次渲染就是会改变图片的一部分十六进制数值,所以图片马中的马最好写在第三四排,并且最好用.gif
五、条件竞争绕过(针对先上传再检测的web网站)
简述一下理想模型:上传一个1.php的文件,1.php文件里的内容是生成2.php(木马)的语句,在网站删除1.php之前,访问到它,然后就生成了2.php,随后1.php被删除了,但是2.php还存在,因为2.php不是通过上传来的,所以可以绕过检测机制。
梦想照进现实,我们需要抓一个上传包,和一个访问包,然后用BP疯狂的跑就行了
需要用到语句:file_put_contents('2.php','<?php eval($_REQUEST[8])?>');