- 每日一句:利用服务器的保存机制进行%00截断
服务器端攻击方法:%00截断、条件竞争 - 本篇内容:%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爆破模块)
~等待。。。
原理容易理解,步骤较为繁琐,还有点看脸的感觉。
四、总结
1.php.jpg
名字 后缀
2.上传图片—>上传到临时文件—>php移动重命名(读取到0x00他认为就结束啦)
12345.jpg改为12345%00.jpg
路径修改
3.gif 动图() 只会渲染部分gif,无大碍
4.是否被渲染
假如:第一部分:不会被渲染影响
第二部分:会被影响
5.先验证还是先执行
先上传去然后校验,不符合删除
先校验不符合不允许上传
截断 + 条件竞争 + 图片马