gpt4 book ai didi

exploit - 为什么使用 system() 的 return-to-libc shell 会立即退出?

转载 作者:太空狗 更新时间:2023-10-29 17:13:51 25 4
gpt4 key购买 nike

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

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

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

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

我编译它使用:gcc code.c -o system

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

我正在使用 kernel 2.6.28glibc-2.9-1

Ubuntu-9.04 上进行实验

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

那么谁能解释一下这里发生了什么?

最佳答案

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

尝试:

/bin/bash -c junk

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

关于exploit - 为什么使用 system() 的 return-to-libc shell 会立即退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28574088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com