我已经了解了缓冲区溢出的工作方式,并且必须确定程序(使用gcc)必须使用以下参数进行编译:-fno-stackprotector和-z execstack。 你必须告诉内核它每次启动程序时都不会随机分配地址(但是,这不是绝对必要的,只是让缓冲区溢出更容易)
一个人现在应该写一个漏洞吗? G。对于Apache,Apache Developers不会使用上述参数编译程序。
这些漏洞利用程序如何运作?
答案 0 :(得分:2)
-fno-stack-protector
禁用canary,它是放置在函数框架和保存的指令指针之间的随机值。 -zexecstack
使堆栈内存区域可执行,以便代码执行变得容易。由于禁用了这两种保护措施,因此更容易编写漏洞利用程序。有时地址空间布局随机化(ASLR)也被禁用,这意味着每次执行时内存中的所有偏移都是相同的。
对于那些开始利用漏洞利用程序开发的人来说,这些保护措施已被关闭,以便他们欣赏技术和攻击媒介。
然而,对于诸如apache之类的实际软件,它们通常会被编译为所有保护(另外还有PIE,RELRO)。但是存在可以帮助您获得代码执行的技术。其中之一称为面向返回编程(ROP),如果使用得当,可以帮助您击败NX(非执行内存区域)。除了绕过ASLR / PIE,您还需要一个leak
原语来从内存中获取地址。为现代软件编写漏洞并非不可能只是困难。