我正在阅读有关缓冲区溢出的内容,但有一部分我不明白,它说:
消除数据段
该汇编代码完全有效。然而,这是无用的。你可以用nasm编译它,执行它,然后用hexdump查看十六进制形式的二进制文件,它本身就是一个shellcode。问题是两个程序都使用自己的数据段,这意味着它们不能在另一个应用程序中执行。这意味着在链中,漏洞利用将无法将所需的代码注入堆栈并执行它。
为什么我们不能在我们的 shellcode 中使用数据段?谢谢 !
我正在阅读有关缓冲区溢出的内容,但有一部分我不明白,它说:
消除数据段
该汇编代码完全有效。然而,这是无用的。你可以用nasm编译它,执行它,然后用hexdump查看十六进制形式的二进制文件,它本身就是一个shellcode。问题是两个程序都使用自己的数据段,这意味着它们不能在另一个应用程序中执行。这意味着在链中,漏洞利用将无法将所需的代码注入堆栈并执行它。
为什么我们不能在我们的 shellcode 中使用数据段?谢谢 !
您可以从 shellcode 读取和写入进程的数据段(假设页面保护正确)。
但是,您通常希望提供您的 shellcode 将要使用的数据(例如,数据字符串“ http://172.19.3.204/stager.exe”),而不是依赖当前在被利用进程的数据段中的内容(例如,数据字符串“ Internet Explorer 4.0”)。
因此,您需要将您的 shellcode 的数据注入到被利用进程的数据段中,或者在更常见的情况下,将您的 shellcode 和数据一起注入单个 blob 中,并让您的 shellcode 以相对于以下的偏移量引用您的数据你的shellcode。