据我所知,堆栈金丝雀是写在堆栈上的值,如果被缓冲区溢出覆盖,则强制应用程序返回关闭。
我的问题是:如果我覆盖EIP和堆栈因为我想要ROP什么的.我再也不回来..。堆叠金丝雀也会造成问题吗?
发布于 2012-10-24 17:25:01
堆栈金丝雀仍然是一个问题,因为在堆栈缓冲区溢出的情况下,您无法控制EIP而不覆盖返回地址(该地址位于carny的上方)。此外,包含基于堆栈的缓冲区溢出的函数必须在损坏的返回地址成为新的EIP之前返回。
对于悬空指针来说,这不是一个问题。
你需要花更多的时间在你的调试器!这是没有借口的。如果你在开发过程中迈出了一步,你就会知道这一点!
发布于 2016-10-24 19:54:53
在某些溢出情况下,您可以覆盖EIP,但不触及金丝雀值。这里我引用Enrico Perla的“内核开发指南:攻击核心”一书:
堆栈金丝雀是一种很好的保护方案,但它有一些问题:一个特别受控制的溢出(例如,保存在堆栈上的数组上基于索引的溢出)可以在不接触金丝雀的情况下写入金丝雀。
https://security.stackexchange.com/questions/23097
复制相似问题