我正在尝试对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.04
和kernel 2.6.28
glibc-2.9-1
进行实验
更新当且仅当我按下的第一个键是 Enter 时,shell才会变为交互式。也就是说,如果我输入的第一个字符是new-line
(\n
),那么shell将保持打开状态并变为交互式。
所以有人可以解释这里发生了什么吗?
答案 0 :(得分:0)
好的,我相信系统已成功调用/bin/sh
,但它正在使用-c标志调用它。
尝试:
/bin/bash -c junk
这应该与您所看到的相似。您需要使用寄存器来设置系统调用,以便在没有-c标志的情况下调用/ bin / sh。