每日一句:
没有绝对安全的机制
本文内容:
~%00截断和00截断
~实战注意
~条件竞争
一、%00截断和00截断
1,白名单比黑名单机制安全了太多,但是也不是绝对安全
2,%00是干嘛的
在说这的作用之前,先说一下服务器保存机制(其中的一种)
用户上传图片 -> 上传到临时目录 -> php移动重命名
%00就是再移动重命名的时候,动手脚
比如,我们上传木马命名为:1.php%00.jpg,当程序读取到
%00 他就认为到这结束了,于是保存为1.php
注意:这也是由php版本限制的,高版本貌似修复了此bug
%00是url编码后的,实际上是构造ASCII码值的0
二、实战注意
1,上传文件漏洞,不能仅仅靠眼睛去判断,最好是用burp
2,burp修改可以在Hex那修改,改为00
3,图片马 尽量做成gif图片马,而不是jpg
~基本不会被渲染影响,渲染影响只会造成gif的部分影响,看情况插马
~如何防御:二次渲染即可
~上传成功图片马必须配合文件包含使用
三、条件竞争
1,服务器验证上传文件的两种形式:
~先上传后验证
~先验证后上传
2,这个知识点就是讲到,利用并发进程,在未删除之前,抢先一步访问这个文件
简单的说:
服务器删除文件需要时间---> 假设0.01s
100个线程不间断得上传的文件 --->
100个线程不间断得访问的文件 --->
有的访问到文件 <--> 执行 <-> 占用(执行速度也很快)
当比删除速度快,就访问成功了(有概率,还得等几分钟)
代码:
<?php $a = '<?php @eval($_REQUEST[\'a\'])?>';file_put_contents('1.php',$a)?>
适用条件:先上传后验证
解决方法:发现较大线程访问,直接ban掉IP
3,具体操作步骤:
~上传正常图片
~看看图片保存位置
~多线程上传图片马,(burp爆破模块)
~上传图片马的同时,多线程访问,(burp爆破模块)
~等待。。。
原理容易理解,步骤较为繁琐,还有点看脸的感觉。