漏洞程序diskpulseent_setup_v10.0.12exploit-db 链接 : 718K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2W2P5s2m8D9L8$3W2@1i4K6u0V1k6r3u0Q4x3X3g2U0L8$3#2Q4x3V1k6W2P5s2m8D9L8$3W2@1M7#2)9J5c8U0b7J5y4K6M7^5正常安装以后开启80端口的Web服务
先来写一个基础的Poc加载到windbg当中,这里情况要简单的多,只有一个SEH结构,只需要关心这个部分即可。
这里如果使用msf生成的字符串会有个问题在windbg查看这个部分,会发现完全找不到我们想要的字符串,这看起来像是溢出+坏字符一起引发的崩溃。
考虑使用二分法,修改代码查看windbg,溢出的位置在前面的3000个A的部分。
再次分一次,来确认一下位置。加载windbg
此时就能够比较清晰的查看到,想要溢出覆盖到SE Handler的距离还差大概999 + 4字节简单分析一下01c1fb5c这里全是 A。说明到这里为止,还是1500 个 A 的部分,我们知道内存是小端序显示的,所以接下来的42424241实际上是41 42 42 42,这就是为什么以01c1fb5c+5来计算我们知道SEH这种结构体,SE Handler之前4个字节是Next SEH所以实际上我们需要修改代码为:加载到windbg,从输出当中可以看到一切都符合预期。
分析这个输出如果直接用常规方式进行坏字符检测,会观察到如下现象
这样的输出完全无法得知坏字符,所以这里的检测还是要用二分法。简单来说就是把badchars写成这样简单来说就是先注释一半,然后这样慢慢定位存在坏字符的部分,然后再逐个检测。细致一点可以逐行注释,只要遇到下列情况,说明当前行存在坏字符,就可以逐字符排查了。
可以针对单行进行二分法分割检测查看windbg,这样说明\x01 - \x05没有问题然后再对剩下的部分逐个测试
直到我们测试出第一个坏字符\x09,windbg显示如下:
当我们删除\x09查看windbg,会发现显示符合预期
重复这个过程直到找到所有坏字符,这个过程所需的时间非常多,因为基本上都需要逐个检测这里会注意到一个问题,观察windbg的输出,可以看出这段缓冲区完全放不下badchars,这里就需要留意一下,如果连badchars都放不下,那就更加不可能放得下shellcode,至于badchars的解决方案,还是二分法注释,只需要把后面的部分给发送出来即可同时这里要注意一个点,当使用.encode()来处理数据的时候,坏字符的部分,测试后半部分的坏字符,当坏字符大于\x7f时,查看windbg会发现,多出了一些莫名其妙的字节windbg输出,可以看到虽然没有崩溃,但是\x7f之后本应该是\x80但是,现在这里补了一个C2,这一点要尤其注意。
如果常规情况遇到这个情况,原因是在 HTTP 协议处理中,当程序接收到大于 127 (0x7F) 的扩展 ASCII 字符时,它会再次进行了 UTF-8 编码转换。 比如在 UTF-8 中,\x90 会被编码为双字节序列 \xC2\x90。这个叫做Character Encoding Expansion (字符编码膨胀)注意:这里有个很大的坑,会在PPR指令查找的部分填坑这就是为什么内存里会平白无故多了一个 \xC2。 这个部分在之前的文章当中有完整的提到过,所以不在这里赘述,还是一样,使用narly,以及wds脚本查看!nmod输出,和之前的一样,并且我推测大概率存在相同的dll地址竞争的问题
运行查找脚本,这里为了保险起见,最好在10000000这个起始地址被libspp占用时,在执行一边这个操作,查找另外一个PPR指令
注意DLL地址竞争
需要找到两个DLL当中的PPR指令地址,并且这个地址要求,首先不能包含坏字符,其次地址尽量不要包含比\x7f大的部分加载到windbg,完全符合预期
字符膨胀原因解释多次排查以后,发现代码当中存在的问题,Python 3 的 Unicode 机制,我使用encode()来处理字符转换,所以会产生字符膨胀的问题,修改代码,直接用bytes这种方式就可以轻松避免这个问题 -_- 接着,需要解决空间问题,这里不需要计算的多么精细,甚至肉眼可见的放不下一段完整的shellcode。但是,别忘了,我们用于填充的部分,是有2495个A的。另外需要注意的就是,在这个程序当中,溢出发生在SE Handler上下文的部分,而非esp附近,所以我们的逻辑如下:使用负数的思路回跳之后使用jmp 0xfffffe10让执行流回到开头A的部分当中的shellcode部分最终代码 #!/usr/bin/python
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289506.htm
[原创] SEH 溢出调试分析记录-Diskpls
262 浏览
1 回复
看到这篇文章,怀念xp时代的winows,那是一个黑客最巅峰的时代。