在我的程序中,我试图修改EIP来指向包含shell代码的缓冲区基址
例如: 0xbffff5f3是指向栈上的地址
code[80] = "\x90\x90\x90\x90\x90\x31\xc0\x31\xdb\x31\xc9\"
我创build一个指针ret
并使用栈帧知识指向缓冲区的基地址。
{ //Some more pointer arithmetic on ret (*ret) = (int)code; return ; }
修改eip
eip 0xbffff5f3 0xbffff5f3
这工作得很好,我的shell代码执行。 但ret
是用缓冲区地址硬编码的。
不过,现在我想让我的shell代码包含事先已知的缓冲区基地址,这样一旦缓冲区溢出,EIP就会指向它。
我怎么能提前知道缓冲区的基址?
[![缓冲区本身包含shellcode的地址] [1]] [1]
编辑:提炼我的问题:给定一个静态声明的数组代码[80],我怎么才能确定这个数组在堆栈的基地址,以便我可以插入这个基地址到我的shell代码并插入适当的填充字节和NOPS使EIP指向shell代码?
我在互联网上看过很多例子,他们都演示了使用GDB并在运行时计算出缓冲区地址,但是如果我必须以编程的方式派生出可以实现的shell代码地址。
没有直接的办法。 你需要使用目标特定的技巧。 他们包括:
esp
)