C Windows/Linux 缓冲区溢出漏洞

C Windows/Linux Buffer Overflow Exploits

我查看了缓冲区溢出是如何工作的,必须确定程序(使用 gcc)必须使用以下参数进行编译:-fno-stackprotector 和 -z execstack。 你必须告诉内核它不会在你每次启动程序时随机分配地址(但是,这不是绝对必要的,只是使缓冲区更容易溢出)

一个人现在应该写一个exploit e. G。针对Apache,Apache Developers不会编译带有上述参数的程序。

这些漏洞如何仍然有效?

-fno-stack-protector 禁用金丝雀,它是放置在函数帧和保存的指令指针之间的随机值。 -zexecstack 使堆栈内存区域可执行,因此代码执行起来很容易。禁用这两种保护后,编写漏洞利用程序就容易多了。有时地址 Space 布局随机化 (ASLR) 也被禁用,这意味着内存中的所有偏移量在每次执行时都将相同。 对于刚开始进行漏洞利用开发的人,这些保护已关闭,因此他们会欣赏这些技术和攻击向量。

然而,对于像 apache 这样的实际软件,它们通常在编译时带有所有保护(另外还有 PIE、RELRO)。但是有一些技术可以帮助您执行代码。其中之一称为 Return 面向编程 (ROP),如果使用得当,可以帮助您击败 NX(非可执行内存区域)。此外,要绕过 ASLR/PIE,您还需要一个 leak 原语来从内存中获取地址。为现代软件编写 exploit 并非不可能,只是很难。