【发布时间】:2017-11-18 14:38:07
【问题描述】:
我正在尝试了解缓冲区溢出漏洞,更具体地说,是如何使用它来运行自己的代码 - 例如通过启动我们自己的恶意应用程序或任何类似的东西。
虽然我确实理解使用 gets() 函数的缓冲区溢出漏洞的想法(用足够长的字符串覆盖返回地址,然后跳转到所述地址),但有一些事情我很难理解真正的应用,那些是:
我是否将自己的代码放入返回地址后面的字符串中?如果是这样,我怎么知道要跳转到的地址?如果没有,我应该在哪里跳转,实际代码在哪里?
运行代码的实际有效负载是我自己正在运行的软件,而其他程序只是跳入其中,还是有效负载中提供了所有指令?或者更具体地说,缓冲区溢出漏洞利用实现实际上是什么样的?
地址(或任何指令)包含 0 时该怎么办? get() 函数在读取 0 时停止读取,那么如何解决这个问题呢?
作为一项家庭作业,我正在尝试利用一个非常简单的程序,该程序只需使用gets()(ASLR 关闭)请求输入,然后打印它。虽然我可以找到调用它的函数的内存地址和返回值,但我就是不知道如何实际实现漏洞利用。
【问题讨论】:
-
您通常会在其中一个共享库中查找 jmp 到 rsp 之类的指令。由于共享库总是在已知地址加载,因此您可以从外部确定一个此类函数的地址。
-
这可能是 Sec.SE 的最佳匹配
标签: c security x86 buffer-overflow exploit