gpt4 book ai didi

c - 漏洞利用在 gdb 中有效,但在命令行中无效

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:55 25 4
gpt4 key购买 nike

我一直在研究“黑客:利用的艺术”并遵循示例。在第 145 页,作者演示了如何利用存储在环境变量中的 shellcode 来利用 notesearch.c 程序。埃里克森通过以下方式做到这一点:

./notesearch $(perl -e 'print "\x47\xf9\xff\xbf"x40')

在命令行上,这对我不起作用,但在 GDB 中,键入

run $(perl -e 'print "\x47\xf9\xff\xbf"x40')

确实有效。

注意事项:现在当然,由于 CPU 中的保护,他上面的地址与我的地址不同,但我只是按照他的示例在 gdb 中运行 notesearch,在环境变量中获取 shellcode 的地址,并向其添加 100:

(gdb) x/ s 0xbffff8e3 + 100

当然,我的地址与他上面的地址不同,但是,一切都检查过了,但没有用。

****但是****

当我在 GDB 中运行他的漏洞利用代码时,它工作正常。

运行 $(perl -e 'print "\x47\xf9\xff\xbf"x40')

那为什么会

run $(perl -e 'print "\x47\xf9\xff\xbf"x40')

在 gdb 中工作,给我一个 root shell 但是

./notesearch $(perl -e 'print "\x47\xf9\xff\xbf"x40')

在命令行上行不通?地址随机化在 gdb 中关闭但在操作系统中没有关闭吗? GDB 显示的地址与程序实际运行的地址不匹配吗?在此先感谢您的指导。

最佳答案

我们不需要借助 ASLR 来解释为什么 Exploit 在 gdb 中有效,但在命令行中无效。在 GDB 中运行时,堆栈位置只是简单地移动了一点(在我的系统上,向下移动了 80 个字节),因此需要调整提供的地址 0xbffff947 以在 shell 命令行中工作。要验证这一点,只需将 e. g.

    printf("searchstring = %p\n", searchstring);

notesearch.c 中;每次从 shell 运行命令时,您可能会看到一个常量地址,而每次从 GDB 运行时,您可能会看到另一个常量地址。

关于c - 漏洞利用在 gdb 中有效,但在命令行中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28048739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com