最近我正在使用我的Ubuntu11.10在论文Bypassing non-executable-stack during exploitation using return-to-libc上进行一些返回libc攻击实验。
在我的实验之前,我关闭了ALSR。
根据论文,我可以在gdb中找到环境变量SHELL =“/ bin / bash”的地址(使用gdb来调试我要攻击的程序):
但是当我尝试将它用于返回libc实验时,我发现该地址错误。
然后我写了一个简单的程序来获取环境变量地址:
当我在终端中运行此程序时,我得到正确的地址:
有了这个地址,我可以进行攻击。
我也找到了相关的question。但答案确实没有意义(第二个可能更好)。
请告诉我一些有关此事的细节。
答案 0 :(得分:4)
从截图中,我假设你在32位英特尔平台上运行。我没有花时间充分研究这个问题的答案,但这些都值得注意:
x/100s **(char***)&environ
)。0xBffff47A
,您非常接近用户地址空间的顶部(以0xC0000000
结尾)。所以,我的猜测是,这里发生的是:
_=/usr/bin/gdb
”,我只是打赌只有在GDB下运行时才会这样。结果是,虽然你的固定指针往往位于环境块中间的某个地方,但每次都不会落在同一个地方,因为环境本身在运行之间会发生变化。