我正在学习缓冲区溢出攻击,并且遇到了以下命令: 使用此处获得的进程ID的“ ps aux | grep exploitme”,可以说是312 运行“ gdb exploitme 312”,它神奇地将libc映射到进程中。通常,为什么不能将libc映射到进程中?如果攻击者想克服'nx'保护,他将始终依靠将libc映射到易受攻击的程序中吗?
返回到libc-缓冲区溢出
答案 0 :(得分:0)
让我们说它是312“ gdb exploitme 312”正在运行,它神奇地将libc映射到了进程中
您很困惑:在GDB附加期间实际上没有任何映射。 libc.so.6
已经很早就已经映射到该进程中了。
所有GDB都以Reading symbols from ... Loaded symbols from ...
告诉您,是因为GDB本身意识到libc.so.6
已被映射,并且它(GDB)从libc.so.6
读取符号表,因此可以打印地址{{ 1}}的符号形式为0xb7f3bcde
。
在将GDB附加到__read_nocancel
之前,您可以确认libc.so.6
已经存在了。。
您还可以阻止GDB自动加载共享库(cat /proc/312/maps
)的符号,并观察到set auto-solib-add off
消失了,并且您从GDB获取地址而不是符号名称。