- 发布于
No eXecute
- 作者
- Name
- CuB3y0nd
- GitHub
- @CuB3y0nd
正如你所预料的那样,程序员对于人们可以将自己的指令注入到程序中 感到非常高兴(bushi NX 位代表「不可执行」,将内存区域定义为 指令 或 数据,把需要写入数据的内存标识为可写,把保存指令的内存标识为可执行,但不会有一块内存同时被标识为可写和可执行。这意味着你的输入将被存储为 数据,任何将其作为指令运行的尝试都会使程序崩溃,从而有效地阻止 shellcode。
为了绕过 NX,我们必须使用一种被称为 ROP,Return-Oriented Programming(面向返回编程)的技术。
Note
Windows 版本的 NX 是 DEP (Data Execution Prevention),数据执行保护。
检查 NX
你可以使用 checksec
来检查 NX 的状态。
$ checksec vuln
[*] 'vuln'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX disabled
PIE: No PIE (0x8048000)
RWX: Has RWX segments