如何在 Linux 上禁用 NX

如何在 Linux 上禁用 NX

我正在学习堆栈缓冲区溢出利用,后来我发布了一个问题Shellcode 分段错误。关于从测试程序执行 shellcode 或将其注入易受攻击的程序会导致分段违规。现在我发现这可能是由 NX 引起的。当我在 dmesg 中搜索时,我发现了这一行:

[    0.000000] NX (Execute Disable) protection: active

所以我的问题是如何在 Linux 上禁用 NX 位。我正在使用带有 4.18.0 内核的 Kali Linux 64 位。

答案1

您可以在 Linux 上全局禁用 NX,方法是noexec=off内核命令行

noexec      [X86]
            On X86-32 available only on PAE configured kernels.
            noexec=on: enable non-executable mappings (default)
            noexec=off: disable non-executable mappings

noexec32    [X86-64]
            This affects only 32-bit executables.
            noexec32=on: enable non-executable mappings (default)
                read doesn't imply executable mappings
            noexec32=off: disable non-executable mappings
                read implies executable mappings

READ_IMPLIES_EXEC您还可以通过以下方式设置执行域来禁用进程的 NXpersonality(2)或者,在较旧的内核中,通过 启用可执行堆栈PT_GNU_STACK。这对于现代内核来说并不适用,因为现代内核不再设置该执行域当堆栈可执行时。

犯罪12230611改变了行为,因此设置PT_GNU_STACK为可执行文件不再将每个页面标记为可执行文件,并提交9fccc5c0使得删除PT_GNU_STACK仅在完全缺乏 NX 支持的系统上或在 ia32 架构上可执行的所有页面。

相关内容