Return 到 libc- 缓冲区溢出

Return to libc- Buffer overflow

我正在学习缓冲区溢出攻击,我遇到了以下命令: "ps aux|grep exploitme" 使用此处获取的进程 ID,假设它是 312 "gdb exploitme 312" 是 运行 并且它神奇地将 libc 映射到进程中。通常为什么 libc 没有映射到进程中?如果攻击者想要克服 'nx' 保护,他是否总是依赖将 libc 映射到易受攻击的程序中?请解释。

Return 到 libc- 缓冲区溢出

lets say it is 312 "gdb exploitme 312" is run and it magically mapped libc into the process

你很困惑:在 GDB 附加期间实际上没有发生映射; libc.so.6 很久以前就已经 映射到进程中。

GDB 用 Reading symbols from ... Loaded symbols from ... 告诉你的只是 GDB 本身意识到 libc.so.6 已经被映射,并且它 (GDB) 从 libc.so.6 读取符号 table 所以它可以将地址 0xb7f3bcde 以符号形式打印为 __read_nocancel.

在使用 cat /proc/312/maps 附加 GDB 之前,您可以确认 libc.so.6 已经存在

您还可以阻止 GDB 自动加载共享库的符号 (set auto-solib-add off) 并观察 Loaded symbols for... 消失并且您从 GDB 获取地址而不是符号名称。