为大学做作业。
我们必须在远程服务器上执行一个 shell。我们被告知未设置 NX 位,但是,当我们重定向到注入的代码时,服务器出现分段错误。我是否认为该位实际上是在这种情况下设置的?注入的代码是一个 NOP 负载,后跟缓冲区中的一些 shell 代码。我们覆盖 EIP 以重定向到缓冲区的开头附近(在 NOP 幻灯片中),但立即我们得到一个 seg 错误。
谢谢你的帮助!
为大学做作业。
我们必须在远程服务器上执行一个 shell。我们被告知未设置 NX 位,但是,当我们重定向到注入的代码时,服务器出现分段错误。我是否认为该位实际上是在这种情况下设置的?注入的代码是一个 NOP 负载,后跟缓冲区中的一些 shell 代码。我们覆盖 EIP 以重定向到缓冲区的开头附近(在 NOP 幻灯片中),但立即我们得到一个 seg 错误。
谢谢你的帮助!
如果您一次单步执行一条指令,并且在跳转时立即发生段错误(而不是在 NOP sled 末尾遇到一些可能损坏的 shellcode 时,这也可能导致段错误),并且您确定地址是正确的,指向有效的内存并且您的 NOP 雪橇本身没有损坏,那么是的,段错误似乎是由 DEP 引起的。
但是,在我看来,我上面列出的其他事情更有可能发生,并且可能会弹出段错误还有很多其他原因。
这样我们就可以确定您在 gdb 中一切正常;
您应该在损坏的返回指令之前有一个断点。您可以通过disasandbreak命令执行此操作。
一旦程序到达你的断点,你就想检查地形。eip用info r命令检查。并使用诸如x/40x $esp. 之后您应该能够反复看到您的 nop sled、shellcode 和返回地址。刚刚想到的另一个注释;返回地址必须正确对齐,通常这意味着在您的 shellcode之后放置 1-3 个 nop 以将其推入到位。
如果一切看起来都不错,那么是时候运行一个step. 如果info r现在报告eip包含在您的 nop 雪橇上的地址 - 使用 a 进行检查x %eip,您应该会看到0x90909090. 然后再打step。如果此时您遇到段错误,那么是的(回答您的原始问题:P)您已经打开了 DEP 恕我直言。
抱歉,如果这是您已经知道的所有内容,那么在玩内存漏洞时,多次检查所有内容至关重要。