网络安全从入门到精通 (第七章-2) 文件上传漏洞 — 解析、验证、伪造(二)
本文内容:
- %00和00截断
- 绕过方法介绍
- 条件竞争
1,%00截断和00截断:
了解%00需要线连接一下0x00,0x00实际上是一个十六进制表示方法,实际上就是表示ASCII码值为0。
有些函数在处理这个字符的时候会把这个字符当做结束符,它们读取到这里就认为结束了。
注意:php5.4以下版本存在这个问题
作用:
在文件上传是,如果遇到了白名单机制只允许上传jpg后缀,在没有解析漏洞的情况下我们应该怎么办?
jpg格式并不会被解析,那我们就需要绕过上传过滤,如:
假如写了一个1.php%00.jpg传参之后,有些过滤都是直接匹配字符串,它强行匹配到了结尾是.jpg,然后允许上传,但是php的函数去执行的时候读取到0x00认为结束了,那么这个文件就变成了1.php。
%00实际上是和00截断还有0x00截断原理是一样的,只不过%00是经过URL编码的,只有GET请求时,会用到%00,%00解码后就是0x00截断的那个字符。
上传图片顺序:上传图片--->上传到临时目录--->php移动重命名[读取到0x00认为这里结束了]。
2.绕过方法介绍:
1.%00截断:
上传图片时,有时候会遇到,图片自动命名的情况,这样很明显使用%00截断,就没有效果了。
这时,我们就要看这里是不是GET传参,如果是可以在传参位置使用%00.
这时,如果传参是POST的方式,也可以使用截断的方式,但是就需要抓包,改hex,改为00,一般情况下最后写个a,a的hex是61.方便记忆。
2.图片马绕过:需要配合文件包含使用。
3.二次渲染绕过,得到图片重新渲染一次,可以gif动图去做图片马,二次渲染,有一部分内容是不会影响的,可以将一句话木马放在哪个位置。
4.条件竞争:开始与服务器比手速的时候到了,我们用Burp抓包,然后进行爆破,一个不断上传,一个不断访问。
3,条件竞争:
1条件竞争是什么?
简单理解:就是两个线程同时去抢资源,不知道到底哪个能抢到,此处便形成了竞争。
2.是和谁去竞争?
一般而言我们上传文件,上传了但是最后却因为过滤或者因为其他原因被删除了,那我们可以使用条件竞争,我们实际上是和unlink,是和删除文件的函数进行竞争。
假如不断上传发包,然后同时不断的访问那个我们上传上去的文件地址,我们就可以和服务器的函数比手速了,执行都是要时间的,如果我这边上传上去,且比删除快,那就上传成功。
然后访问到,就可以执行官php了,可以上传一个php后,由这个php去写一个马:
<?php $a='<?php @eval($_REQUEST[\'a\'])?>';file_put_contents('1.php'.$a)>?
3.是先验证还是先执行:
先上传上去然后校验,不符合删除[条件竞争,就是针对的这一条的]。
服务器删除文件需要时间,哪怕是0.01s,也是时间,如果访问的速度比删除的速度快了,那就访问到了,访问到,它就无法删除了,删除时,就会提醒文件已占用,删除就会失败。
先检验,不符合,不允许上传。
-------------------------------------------------------------------------------------------------------------------
盘点:00截断+条件竞争+图片马