缓冲区溢出如何执行堆栈上的指令?

问题描述 投票:0回答:1

我读过一些有关缓冲区溢出的内容,我不明白的一件事是,据我所知,通常空间无法执行,放置在其中的代码如何运行?

linux windows assembly buffer-overflow
1个回答
0
投票

有一个二进制保护调用NX(非可执行堆栈),您可以通过运行命令来检查任何二进制文件的保护

❯ checksec --file test

    Arch:       amd64-64-little
    RELRO:      Partial RELRO
    Stack:      No canary found
    NX:         NX enabled
    PIE:        No PIE (0x400000)
    Stripped:   No

此处启用了 NX 位,因此输入的任何类型的用户输入都将被视为数据而不是代码,但是如果 NX 位关闭,即如果在那里写入了 NX 禁用,则用户输入将被解释为代码而不是代码数据。

在旧系统中,NX 位不存在,因此 shellcode 注入是可能的,但是现在这些保护几乎存在于所有二进制文件中,如果您编译任何二进制文件,默认情况下这些保护将打开,除非您在编译代码时使用标志另外指定.

© www.soinside.com 2019 - 2024. All rights reserved.