寻找注入shellcode的地方

逆向工程 linux 开发
2021-07-03 04:58:49

我下面的教程ROP底漆,0级教程设置内存的开始[vdso]写和可执行文件并复制的shellcode存在。

我不知道为什么,但似乎mprotect对我来说失败了:

(python exp.py; cat) | strace ./level0
...
mprotect(0xb7fff000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC) = -1 ENOMEM (Cannot allocate memory)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xa7fff804} ---
+++ killed by SIGSEGV +++

我将目标地址更改为0x8048000vmmap在 gdb-peda 中得到)。现在mprotect不返回-1,但我仍然收到 SIGSEGV:

(pyhton exp.py; cat) | strace ./level0
...
mprotect(0x8048000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x88048804} ---
+++ killed by SIGSEGV +++

我已经检查了内存地址,与教程的唯一区别是 shellcode 以0xbfff764而不是结束0xbfff754,我相应地调整了 python 脚本。

我不明白为什么会出现这些错误,尤其是因为我使用的是下载的虚拟机。我怎样才能运行shellcode?

更新:我不知道它是否与问题有关,但是如果我将目标地址mprotect(稍后我也希望eip指向那里)设置为映射地址空间之外的地址(根据gdb),si_addr在上面的错误信息中会包含这个地址。但是如果地址属于程序的地址空间,si_addr就会不同(并且可能无效),就像上面一样。

并且如果我在执行它gdb的区域设置正确可执行,甚至执行shellcode。

2个回答

我不确定这是否会有所帮助,但是,如果您不确定 shellcode 是否正在尝试运行,请尝试将您的 shellcode 设置为 "\xeb\xfe" (jmp -2) 或 "\xcc" / “\xcd\x03”(都是 int 0x03)。

在第一种情况下,程序将挂起直到它收到信号(比如,你杀死它)。在后一种情况下,程序将因调试/跟踪点而终止。这使得它是否正在工作变得非常明显(它也可以很好地用于远程服务器,假设无限循环将自动终止,以验证您的代码是否实际运行!)

像任何开发过程一样,错误可能很常见,理解它们可能并不容易。这就是为什么上帝创造了调试。您应该在调试器下运行您的练习程序,并跟踪整个利用过程,以找出事情发生的原因和位置。

如果没有任何额外的信息,很难猜测那里的问题是什么。我建议您发布调试漏洞的结论,我们可以进一步回答您的问题。