为什么使用system()返回libc shell会立即退出?

时间:2015-02-17 19:31:14

标签: exploit c shellcode

我正在尝试对Linux上用C编写的程序进行控制流劫持攻击。我尝试在启用了No-eXecutable-stack对策的程序上执行简单的ret-2-libc攻击。为此,我使用参数system()返回/bin/sh函数。

但是我遇到了一个问题:虽然我的攻击有效并且shell成功生成,但是在进入第一个角色后shell立即退出!也就是说,按下任意键后shell关闭了!

在这个简单的C代码中也可以观察到这种行为:

int main() { system("/bin/sh"); return 0; }

我使用:gcc code.c -o system

编译它

这是为什么?我该如何解决?

我正在使用Ubuntu-9.04kernel 2.6.28

glibc-2.9-1进行实验

更新当且仅当我按下的第一个键是 Enter 时,shell才会变为交互式。也就是说,如果我输入的第一个字符是new-line\n),那么shell将保持打开状态并变为交互式。

所以有人可以解释这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

好的,我相信系统已成功调用/bin/sh,但它正在使用-c标志调用它。

尝试:

/bin/bash -c junk

这应该与您所看到的相似。您需要使用寄存器来设置系统调用,以便在没有-c标志的情况下调用/ bin / sh。