前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于一次渗透引发的一个php木马的分析

关于一次渗透引发的一个php木马的分析

作者头像
lonelyvaf
发布2018-06-07 14:37:06
1.4K0
发布2018-06-07 14:37:06
举报

说实话,回到家复习的效率真的很低很低,周末过了,差不多继续读书了。权当回家看看父母,不过也好,晚上完成了从小到大一直想做的一件事。以前看过一则帮妈妈洗脚的公益广告,也听说过有类似这样的家庭作业,不过乡镇的孩子估计没有这个家庭作业,我觉得现在也不会有。呵呵,育人和教书的概念差很多。言传身教,希望我的弟弟长大做的会比我好,,更希望影响的不止是我弟弟。

昨天在对一个网站进行渗透测试的时候,发现了一个大马,想对一个php大马进行改装收集回来用,发现了这个木马被加密。查看源代码是基于base64加gzinflate加密的。

既然如此,那么我就尝试着echo出;看看他的源码,顺便看看有没有后门。

可是,发现!输出后是

肯定不可能是php的短标签..

于是我后退一层

echo base64_decode

发现是这样的

所以肯定多层加密。这个是浏览器的编码原因所导致。

那么到底是发生在base6_decode这个函数还是还是在gzinflate这个函数?

百度了一下,gzinflate发现它是编码解压函数,于是我就写了一个算法,用base4解密函数对这段加密的字符串进行多次解密。再用gzinflate解压编码。

首先我们将先解密一次(将level设置为1),将它输出到一个文本里面

Code:

  • functiondecodephp($primary)
  • {
  • $max_level = 1; //最大层数
  • for ($i = 0; $i < $max_level; $i++) {
  • ob_start();
  • eval(str_replace('eval', 'echo',$primary));//将变量中的eval换成echo
  • $primary = ob_get_clean();
  • return$primary;
  • }
  • }
  • $b = decodephp($primary);
  • $txt = fopen('code.txt','w');
  • fwrite($txt,$b);

打开文档,发现是这样子地~~~

看到还有加密,就继续解密咯。

我们将level值设置高一点,200试试。

然后加个if语句用strpos函数判断是否还会出现”eval(gzinflate(base64_decode if”这段字符,根据strpos的特性,如果存在就返回查询字符串在目标字符串的位置,没有的话就返回false。

直到没有就return之!!

给出的code如下:

  • function decodephp($primary)
  • {
  • $max_level = 200; //最大层数
  • for ($i = 0; $i < $max_level; $i++) {
  • ob_start();//缓冲区开始
  • eval(str_replace('eval', 'echo', $primary));//没循环一次就加一个eval,然后将变量中的eval换成echo
  • $primary = ob_get_clean();//得到当前缓冲区的内容并删除当前输出缓。字符串变量不会被显示到浏览器,缓存区的东西都在$primary这个变量里面
  • if (strpos($primary, 'eval(gzinflate(base64_decode') === false) {
  • return $primary;
  • }
  • return$primary;
  • }
  • }
  • $b = decodephp($primary);
  • $txt = fopen('code.txt','w');
  • fwrite($txt,$b);

成功解出:

后来朋友告诉我独自等待的博客有:

http://www.waitalone.cn/eval-gzinflate-base64_decode-decryption.html

我就呵呵,欺负人呢。而且人家还有两种思路,第二种code如下:

  • $a = file_get_contents("加密.php"); //含有eval语句的文本文件
  • //将有eval(gzinflate(base64_decode的加密文件只留eval(gzinflate(base64_decode('...');"语句
  • //其他诸如"<?"等信息都去掉并保存文件为"加密.php"
  • while (strstr($a, "eval")) {
  • ob_start();
  • eval(str_replace("eval", "echo", $a));
  • $a= ob_get_contents();
  • }
  • echo $a;

给出的建议是将他代码中的strstr()函数换成strpos。没了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 晨星先生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档