首页
社区
课程
招聘
[分享]对一个混淆的Web Shell脚本进行深入剖析
发表于: 2025-7-28 17:11 421

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

2025-7-28 17:11
421

发布地址:dbfK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2X3L8%4u0@1K9h3&6W2N6q4)9J5k6h3y4G2L8g2)9J5c8X3u0D9L8$3N6Q4x3V1k6@1K9s2u0W2j5i4c8Q4x3X3c8J5k6i4y4W2j5i4u0U0K9q4)9J5c8X3W2F1i4K6u0V1k6r3g2H3N6r3S2Q4x3X3c8S2L8X3q4D9P5i4y4A6M7#2)9J5k6r3!0X3i4K6u0V1j5h3&6Q4x3X3c8G2j5X3k6#2M7$3y4S2N6r3g2V1i4K6u0V1N6$3g2T1i4K6u0V1M7$3S2W2L8r3I4Q4x3X3c8K6j5%4u0A6M7s2b7`.

发布日期: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)







传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2025-7-28 17:17 被梦幻的彼岸编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回