缓冲区溢出挑战 - 外壳未打开

逆向工程 数据库 缓冲区溢出
2021-06-25 13:32:28

我正在处理缓冲区溢出 CTF 挑战。此挑战的二进制文件包含一个give_shell函数(它们将在下一个挑战中介绍 shellcode)

我可以成功覆盖堆栈上保存的 EIP 以将执行重定向到 'give_shell' 函数:

080484cb  push    ebp
080484cc  mov     ebp, esp
080484ce  sub     esp, 0x8
080484d1  sub     esp, 0xc
080484d4  push    0x80485f0 {var_1c}  {"/bin/sh"}
080484d9  call    system
080484de  add     esp, 0x10
080484e1  nop     
080484e2  leave    {__saved_ebp}
080484e3  retn

但是,即使我可以在 GDB 中确认该程序正在逐步执行该give_shell功能 - 无论是在 GDB 中、本地还是使用 Netcat 到实际的 CTF 服务器,都没有启动 shell。

我不确定我在这里缺少什么。这是我需要绑定或反转 shell 以便能够交互使用它的情况吗?我已经看到在 shellcode 示例中讨论过,但不确定在这种情况下如何做。

谢谢!

1个回答

调用 system@plt 意味着您通过过程链接表而不是直接调用系统。我建议将 EIP 指向系统函数的地址,而不是指向 plt 版本,因为这往往能可靠地工作。