C Windows/Linux 缓冲区溢出漏洞



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

如果一个人现在编写了一个漏洞,例如针对Apache,Apache开发人员将不会使用上述参数编译程序。

这些漏洞利用如何仍然有效?

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

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

最新更新