find缓冲区地址来创buildshell代码

在我的程序中,我试图修改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代码地址。

没有直接的办法。 你需要使用目标特定的技巧。 他们包括:

  • 在没有地址空间随机性的相对静态的程序中(或者如果模块已经被编译而没有重定位,因此不能被移动),你可以静态猜测(例如: https : //reverseengineering.stackexchange.com/questions/8504/problem-寻找返回地址为shellcode )。
  • 蛮力所有可能的值,依靠迟早会击中的事实(错过将仅仅是DoSes或者可能小到服务器日志中的错误,如果它例如重新启动错误的部分)
  • 在代码中腐败的其他实体,而不是/除了返回地址,使他们为您的事业服务(例如: https : //en.wikipedia.org/wiki/Return-to-libc_attack , 腐败esp
  • 使用额外的侦察攻击 ,使服务器发送给你一个线索