バイナリデータをgets()に送信する

バイナリデータをgets()に送信する

被害プログラム(バッファ オーバーランの脆弱性あり)があります。このプログラムは、gets() を使用して固定サイズのバッファに書き込みます。

シェルコードをファイルSCに書き込んだとします。そして、

$ ./victim < SC
Input your data: 
$

シェルコードが機能しない理由は、SC が被害者にリダイレクトされ、シェルコードを挿入してシェルを生成しますが、生成されたシェルは stdin が閉じられていることを検出し、すぐに終了します。

expect注射を試みましたが、expect砲弾が出現した後に爆弾が爆発しました。

唯一の実用的な方法は、キーボードを入力デバイスとして保持しながら、マウスの貼り付けバッファにシェルコードを挿入することのようです。しかし、バイナリ データを貼り付けバッファに取り込む方法がわかりません。

この問題を回避する方法について何かアイデアはありますか?

答え1

この問題の解決策(同じ状況で誰かが遭遇した問題)は次のとおりです。 https://stackoverflow.com/questions/8509045/execve-bin-sh-0-0-in-a-pipe

答え2

特殊文字を印刷する簡単なスクリプトを使用してこれを実行できます。

たとえば、Perl では、16 進コードを指定して任意の文字を印刷できます。たとえば、次のようにする perl -e 'print "\x54\x0A"'と、「T」の後に新しい行が印刷されます。

印刷されたテキストは、見えなくてもコピーできます。もちろん、端末は raw モードである必要があります。

関連情報