梦幻的彼岸 发表于 2025-7-30 14:43:48

对一个混淆的Web Shell脚本进行深入剖析


发布地址:https://www.fortinet.com/blog/threat-research/in-depth-analysis-of-an-obfuscated-web-shell-script
发布日期:2025年7月25日
发布标题:In-Depth Analysis of an Obfuscated Web Shell Script


一、背景
    本次分析是针对“中东关键国家基础设施被入侵事件”调查的后续工作(完整报告见此处),该调查由FortiGuard事件响应团队(FGIR)开展,旨在深入调查一起长期针对中东地区关键国家基础设施(CNI)的网络入侵事件。
    报告披露,攻击者在受感染系统上部署了多个Web Shell后门。在此后续分析中,我们对其中一个名为UpdateChecker.aspx的Web Shell进行了深入剖析。该Web Shell被部署在受感染系统的Microsoft IIS(Internet 信息服务)服务器上。
    在本篇博客中,我们将深入探讨用于保护该Web Shell的混淆技术、其控制命令的结构(以JSON格式组织),以及攻击者控制受感染系统时的命令通信流程。我们还将详细分析该Web Shell对受控系统所具备的各项控制能力。
二、经过混淆的ASPX网页文件
    该Web Shell由一个名为“UpdateChecker.aspx”的ASPX网页文件驱动,其中包含大量高度混淆的C#代码,如下图所示。所有可读的代码元素,例如方法名、变量名和类名,均被替换为随机生成的名称,并以Unicode编码形式呈现。此外,所有常量值(包括字符串和数字)也都经过加密或编码处理,进一步增加了代码的隐蔽性和分析难度。



    标签 <%@ Page Language="C#" %> 和 <script runat="server"> 表明该ASPX文件使用C#语言编写,且仅在服务器端执行,例如在Windows的IIS(Internet 信息服务)服务器上运行。

    为了更有效地分析该Web Shell,我们成功对C#代码进行了去混淆处理,结果如下图所示。其中,部分原本随机生成的名称已被替换为更具可读性和实际意义的名称,以便于理解和分析。


如下图所示的Page_Load()函数是C#脚本的入口函数,当攻击者远程向网页发送命令时,该函数会被调用。

三、流量分析

对Web Shell代码的分析表明,控制命令必须通过HTTP POST请求的请求体(body)发送。

以下C#代码片段显示,如果请求方法不是HTTP POST,或请求的内容类型(Content-Type)不是 application/octet-stream,Web Shell 将返回一个错误页面。

try {
    if (httpRequest.HttpMethod != http_post || httpRequest.ContentType != _str_application_octet_stream) {   
       response_error_page(httpRequest, httpResponse);
      return;
    }

    根据我们的分析,请求体中的数据首先经过加密,然后再进行Base64编码。如上图所示,在Wireshark中捕获的模拟流量展示了命令如何通过HTTP POST请求体进行传输。发送方随后会在响应包的响应体中接收到执行结果。

    在对Base64编码的请求体数据进行解码后,我们得到了加密的二进制数据,如下图所示。这些数据需进一步解密才能还原出原始的控制命令内容。

    前16个字节使用一个硬编码的密钥进行加密,该密钥在 Page_Load() 方法中定义。通过该硬编码密钥解密后,我们可以得到一个15字节的密钥和末尾1字节的填充数据。利用这15字节的解密密钥,便可进一步解密后续的命令数据。

    在加密之前,传输的命令数据及其执行结果均以JSON格式进行组织和序列化。这意味着攻击者发送的控制指令以及Web Shell返回的系统响应,都是先构造成JSON结构,再经过加密和Base64编码后进行传输。

上图展示了一个明文命令数据的示例(模块为 Base,请求为 GetBasicServerApplicationInfo)。该JSON中的键值对被解析后,存储在一个特殊的类中(该类已被我们重命名为 str_obj)。

在任何控制命令的JSON中,以下字段及其对应值是必须包含的:

ProtocolVersion(值为 1.0)
ModuleName
RequestName
此外,还可包含其他可选参数。如果缺少上述任一必填字段,Web Shell 将返回错误信息并拒绝执行命令。这一机制确保了通信格式的规范性,同时也增加了攻击者构造合法请求的隐蔽性。

四、模块与功能
该Web Shell的功能被划分为三个模块:Base(基础信息)、CommandShell(命令执行)和 FileManager(文件管理)。每个模块提供多个功能(通过 RequestName 指定),并支持若干可选参数。
以下是所有功能的详细列表:
模块名称请求名称参数说明
Base
GetBasicServerInfo


Base
GetBasicServerApplicationInfo


CommandShell
ExecuteCommand
WorkingDirectory(工作目录)、Command(执行命令)

FileManager
GetDrives


FileManager
GetDriveInformation
DriveName(驱动器名称)

FileManager
GetWebRoot


FileManager
GetFileSystemsList
Path(路径)

FileManager
CreateDirectory
Path(路径)、DirectoryName(目录名)

FileManager
CopyDirectory
SourcePath(源路径)、DestinationPath(目标路径)、DirectoryName(目录名)、OverwriteAllow(是否允许覆盖)

FileManager
MoveDirectory
SourcePath、DestinationPath、DirectoryName、OverwriteAllow

FileManager
DeleteDirectory
Path(路径)

FileManager
GetDirectoryInformation
Path(路径)

FileManager
SetDirectoryTime
Path(路径)、CreationTimeUtc(创建时间)、LastModifiedTimeUtc(最后修改时间)、LastAccessTimeUtc(最后访问时间)

FileManager
SetDirectoryAttributes
Path(路径)、Attributes(属性)

FileManager
CreateFile
Path(路径)、FileName(文件名)

FileManager
CopyFile
SourcePath、DestinationPath、OverwriteAllow、FileName

FileManager
MoveFile
SourcePath、DestinationPath、OverwriteAllow、FileName

FileManager
DeleteFile
Path(路径)

FileManager
GetFileContent
Path(路径)

FileManager
SetFileContent
Path(路径)、FileContent(文件内容)、FileName(文件名)

FileManager
GetFileInformation
Path(路径)

FileManager
SetFileTime
Path、CreationTimeUtc、LastModifiedTimeUtc、LastAccessTimeUtc

FileManager
SetFileAttributes
Path、Attributes

FileManager
SearchByName
Path、Keyword(关键词)、MatchCase(区分大小写)、MatchWord(全词匹配)

FileManager
SearchByContent
Path、FileTypes(文件类型)、Keyword、MatchCase

FileManager
ReplaceFileContent
Path、FileTypes、FindWhat(查找内容)、ReplaceWith(替换内容)、MatchCase、UseRegularExpression(是否使用正则表达式)

FileManager
GetPathSeparator




(一)功能说明:
1、Base 模块
攻击者可通过 GetBasicServerInfo 请求获取受控服务器的基础信息,返回内容包括:

服务器软件(如 IIS 版本)
服务器名称
服务器IP地址和端口
操作系统名称
主机名(Machine Name)
当前用户名
运行时环境名称(如 .NET)
运行时版本
GetBasicServerApplicationInfo 可进一步获取Web应用程序相关信息。
2、CommandShell 模块
通过 ExecuteCommand 请求,攻击者可在服务器上以IIS进程权限执行任意Windows命令,实现远程命令执行,例如运行 ipconfig、whoami、net user 等系统命令,甚至下载并执行恶意载荷。
3、FileManager 模块
该模块提供完整的文件系统管理能力,功能强大,包括:

获取磁盘驱动器列表和信息
浏览目录结构,读取文件内容
创建、删除、复制、移动文件和目录
修改文件/目录的时间戳和属性(用于隐藏痕迹)
按文件名或内容搜索文件(支持大小写和正则匹配)
替换指定文件中的内容(可用于篡改网页或配置文件)
获取路径分隔符(适配不同系统环境)

这些功能使攻击者能够全面控制受感染服务器的文件系统,进行持久化驻留、横向移动或数据窃取。

综上所述,该Web Shell虽然经过高度混淆,但具备结构清晰、功能全面的特点,是一个高度隐蔽且功能强大的后门工具,对关键基础设施系统构成严重威胁。


五、演示

我们开发了一个Python脚本,用于模拟攻击者向Web Shell发送命令,以便进行测试和分析。在本节中,我们将展示几个控制命令的实际示例。脚本输出包括发送给Web Shell的命令数据以及命令执行后的响应结果。为便于理解其功能,以下仅展示明文格式的命令及其返回结果。

1. 使用 Base 模块的 GetBasicServerApplicationInfo 请求获取服务器应用信息:

发送的命令(明文JSON):


2. 使用 CommandShell 模块的 ExecuteCommand 请求执行 whoami Windows 命令:

3. 使用FileManager模块执行一些文件操作:

在C:\目录下使用CreateDirectory请求创建了一个名为test的文件夹。
在该新文件夹内使用CreateFile请求创建了一个名为test.txt的文件。
Hi Fortinet!(Base64编码),作为FileContent键的值发送,被写入该文件。该请求为SetFileContent。
接下来,它使用GetFileContent请求从文件test.txt中读取内容,以验证所有内容是否创建正确。
最后,它使用相应的DeleteFile和DeleteDirectory请求删除了创建的文件和文件夹。

上图显示了创建的文件夹(C:\test)和文件(test.txt)的详细信息,包括文件内容,其中文件的所有者为DefaultAppPool,这是IIS服务使用的身份。
六、总结
    本次后续分析深入剖析了一个名为 UpdateChecker.aspx 的Web Shell后门。该文件采用了高度复杂的代码混淆技术,旨在逃避安全分析与检测,其C#代码中的类名、方法名、变量名均被随机化并以Unicode编码,关键字符串和常量也被加密或编码,极大增加了人工分析难度。
    我们详细解析了攻击者与该Web Shell之间的通信机制:控制命令通过HTTP POST请求体传输,内容类型必须为 application/octet-stream;命令数据以JSON格式组织,经过加密和Base64编码后发送;服务器响应同样遵循相同格式,返回执行结果。
    通过编写自定义Python脚本模拟攻击行为,我们验证了该Web Shell的强大功能,包括:

获取服务器基础信息(如系统、IIS、.NET版本等)
以IIS进程权限执行任意系统命令(如 whoami)
全面的文件与目录管理能力(浏览、创建、删除、复制、搜索、修改内容等)
文件属性与时间戳篡改(用于隐藏痕迹)

这些功能表明,该Web Shell是一个功能完备、隐蔽性强的远程控制后门,一旦被部署在关键系统上,可能造成数据泄露、服务中断或进一步的横向渗透。
(一)安全建议
我们建议广大用户:
及时更新所有安全设备的病毒库和IPS规则;
定期审查服务器目录,排查未知或可疑的 .aspx、.php 等脚本文件;
限制IIS应用池权限,避免使用高权限账户运行Web服务;
启用日志审计,监控异常HTTP请求(如POST请求中包含加密载荷);


(二)威胁情报标识(IOC)
样本 SHA-256:
A841C8179AC48BDC2EBF1E646D4F552D9CD02FC79207FDC2FC783889049F32BC
(文件名:UpdateChecker.aspx)

yyb1813 发表于 2025-7-30 15:48:02

样本在那呢?
A841C8179AC48BDC2EBF1E646D4F552D9CD02FC79207FDC2FC783889049F32BC

解密失败, 请检查sha256值是否正确!

qinccckencn 发表于 2025-7-30 23:29:06

谢谢提供分享学习一下

qinccckencn 发表于 2025-7-30 23:29:07

谢谢提供分享学习一下

linxiansen 发表于 2025-7-31 14:31:34

PYG有你更精彩!

飞天 发表于 2025-7-31 21:41:30

感谢大佬分享学习
页: [1]
查看完整版本: 对一个混淆的Web Shell脚本进行深入剖析