网页挂马常见漏洞分析与检测
字数 1561 2025-08-18 11:37:37

网页挂马漏洞CVE-2018-8373分析与检测技术文档

一、漏洞概述

CVE-2018-8373是2018年8月由趋势科技披露的一个IE浏览器漏洞,属于VBScript引擎中的释放后重用(UAF)漏洞。攻击者通过构造特制的网页,可以在受害者访问时实现远程代码执行,常被用于"Drive-By-Download"攻击(网页挂马)。

二、漏洞技术分析

2.1 漏洞触发机制

该漏洞的核心在于VBScript中对动态数组处理不当导致的释放后重用问题,具体流程如下:

  1. 类初始化阶段

    • 通过new创建类实例时,调用vbscript!VBScriptClass::Createvbscript!VBScriptClass::InitializeClass
    • 在类初始化中尝试创建数组,但初始创建失败(维度为空)
  2. 数组重定义阶段

    • 使用Redim重新定义数组为一维数组(长度3)
    • 由于初始创建失败,实际再次调用vbscript!MakeArray创建新数组
  3. 漏洞触发阶段

    • 访问数组元素时调用vbscript!AccessArrayvbscript!AssignVar
    • 在赋值操作中,源操作数获取时触发Public Default Property Get
    • 期间会调用vbscript!RedimPreserveArray重新分配数组内存
    • 导致目标地址被释放但后续仍被使用(UAF)

2.2 关键数据结构

  1. VARIANT类型

    typedef struct tagVARIANT {
        VARTYPE vt;
        WORD wReserved1;
        WORD wReserved2;
        WORD wReserved3;
        union {
            // 各种类型数据
        };
    } VARIANT;
    
  2. tagSafeArray(动态数组结构)

    typedef struct tagSAFEARRAY {
        USHORT cDims;      // 维度数
        USHORT fFeatures;  // 特征标志
        ULONG cbElements;  // 元素大小
        ULONG cLocks;      // 锁计数
        PVOID pvData;      // 数据指针
        SAFEARRAYBOUND rgsabound[1]; // 维度信息
    } SAFEARRAY;
    

2.3 漏洞利用技术

攻击者利用该漏洞的主要步骤:

  1. 通过UAF控制释放的内存区域
  2. 构造大量二维数组占用释放的内存块(大小0x30)
  3. 伪造二维数组的第一维度长度为任意值
  4. 利用堆块头部8字节错位,修改伪造数组的头4字节
  5. 创建伪造的全局可读写数组(长度0x7ffffff)
  6. 实现任意内存读写,进而执行shellcode

三、漏洞检测技术

3.1 静态检测方法

关键检测特征:

  • Public Default Property Get声明
  • RedimRedim Preserve关键字
  • 动态数组的创建和修改操作
  • 类初始化中的数组操作

注意Initialize_Class不是必要检测字段,攻击代码可能省略

3.2 动态检测方法

建议Hook的关键函数:

  • vbscript!MakeArray:数组创建
  • vbscript!RedimPreserveArray:数组重分配
  • vbscript!AssignVar:变量赋值
  • vbscript!AccessArray:数组访问

监控点:

  • 数组创建与释放的时序关系
  • 内存释放后又被使用的行为
  • 异常的数组维度修改操作

3.3 高级检测技术

  1. 行为检测

    • 检测堆喷射(Heap Spray)行为
    • 检测ROP链构造
    • 检测异常的全局读写操作
  2. 机器学习检测

    • 基于VBScript代码特征的分类模型
    • 异常行为模式识别

四、防护建议

  1. 及时更新:安装微软提供的安全补丁
  2. 禁用VBScript:在不需要的场景下禁用IE的VBScript支持
  3. 深度防御
    • 启用DEP(数据执行保护)
    • 启用ASLR(地址空间布局随机化)
    • 启用CFG(控制流防护)
  4. 监控措施
    • 部署网络流量检测系统
    • 监控异常的脚本解释行为

五、技术验证POC分析

简化版漏洞触发代码结构:

Class MyClass
    Public Default Property Get P
        Redim array(2)
    End Property
    
    Private Sub Class_Initialize()
        Dim array()
    End Sub
End Class

Sub Trigger()
    Dim cls
    Set cls = New MyClass
    cls.array(2) = cls
End Sub

关键点说明:

  • 通过Class_Initialize初始化空数组
  • 使用Redim在属性获取时重定义数组
  • 通过数组赋值操作触发UAF条件

六、参考资料

  1. 微软官方VARIANT类型定义
  2. Windows Kits头文件
  3. 趋势科技原始漏洞报告
  4. 看雪论坛相关技术分析文章

注:本文仅限技术研究与防御用途,严禁用于非法活动

网页挂马漏洞CVE-2018-8373分析与检测技术文档 一、漏洞概述 CVE-2018-8373是2018年8月由趋势科技披露的一个IE浏览器漏洞,属于VBScript引擎中的释放后重用(UAF)漏洞。攻击者通过构造特制的网页,可以在受害者访问时实现远程代码执行,常被用于"Drive-By-Download"攻击(网页挂马)。 二、漏洞技术分析 2.1 漏洞触发机制 该漏洞的核心在于VBScript中对动态数组处理不当导致的释放后重用问题,具体流程如下: 类初始化阶段 : 通过 new 创建类实例时,调用 vbscript!VBScriptClass::Create 和 vbscript!VBScriptClass::InitializeClass 在类初始化中尝试创建数组,但初始创建失败(维度为空) 数组重定义阶段 : 使用 Redim 重新定义数组为一维数组(长度3) 由于初始创建失败,实际再次调用 vbscript!MakeArray 创建新数组 漏洞触发阶段 : 访问数组元素时调用 vbscript!AccessArray 和 vbscript!AssignVar 在赋值操作中,源操作数获取时触发 Public Default Property Get 期间会调用 vbscript!RedimPreserveArray 重新分配数组内存 导致目标地址被释放但后续仍被使用(UAF) 2.2 关键数据结构 VARIANT类型 : tagSafeArray(动态数组结构) : 2.3 漏洞利用技术 攻击者利用该漏洞的主要步骤: 通过UAF控制释放的内存区域 构造大量二维数组占用释放的内存块(大小0x30) 伪造二维数组的第一维度长度为任意值 利用堆块头部8字节错位,修改伪造数组的头4字节 创建伪造的全局可读写数组(长度0x7ffffff) 实现任意内存读写,进而执行shellcode 三、漏洞检测技术 3.1 静态检测方法 关键检测特征: Public Default Property Get 声明 Redim 或 Redim Preserve 关键字 动态数组的创建和修改操作 类初始化中的数组操作 注意 : Initialize_Class 不是必要检测字段,攻击代码可能省略 3.2 动态检测方法 建议Hook的关键函数: vbscript!MakeArray :数组创建 vbscript!RedimPreserveArray :数组重分配 vbscript!AssignVar :变量赋值 vbscript!AccessArray :数组访问 监控点: 数组创建与释放的时序关系 内存释放后又被使用的行为 异常的数组维度修改操作 3.3 高级检测技术 行为检测 : 检测堆喷射(Heap Spray)行为 检测ROP链构造 检测异常的全局读写操作 机器学习检测 : 基于VBScript代码特征的分类模型 异常行为模式识别 四、防护建议 及时更新 :安装微软提供的安全补丁 禁用VBScript :在不需要的场景下禁用IE的VBScript支持 深度防御 : 启用DEP(数据执行保护) 启用ASLR(地址空间布局随机化) 启用CFG(控制流防护) 监控措施 : 部署网络流量检测系统 监控异常的脚本解释行为 五、技术验证POC分析 简化版漏洞触发代码结构: 关键点说明: 通过 Class_Initialize 初始化空数组 使用 Redim 在属性获取时重定义数组 通过数组赋值操作触发UAF条件 六、参考资料 微软官方VARIANT类型定义 Windows Kits头文件 趋势科技原始漏洞报告 看雪论坛相关技术分析文章 注:本文仅限技术研究与防御用途,严禁用于非法活动