5

クラス割り当てのためにプログラムに対してバッファオーバーフロー攻撃を実行しようとしています。攻撃プログラムと脆弱なプログラムの両方が私によって書かれています。

脆弱なコードはscanf、stdinからデータを読み取るために使用します。

./vulnerable < malicious_payload_file.txt正常に動作します。 more malicious_payload | ./vulnerableまたecho JUNK_JUNK_JUNK_JUNK | ./vulnerable、期待どおりに機能します。

ただし、攻撃プログラムを使用して、プログラムがクラッシュするまで、徐々に長いペイロードを供給し続けたいと思います。したがって、ジャンクのより大きなペイロードを動的に生成する必要があります。私はsystem ("./vulnerable");、異常終了を繰り返し呼び出してテストするために使用しています。

そのようなペイロードを指定するにはどうすればよいですか?

./vulnerable < malicious_payload_binary悪意のあるペイロードをファイルに入れる必要はないが、コマンドラインで指定できるような方法で実行する方法はありますか?

4

4 に答える 4

9

これはどう?

echo "your payload goes here" | ./vulnerable

echoこのコマンドは、必要な./vulnerableへの入力を生成する任意のコマンドに置き換えることができます。そのような例の1つは、入力としてのジャンクの一定の流れです。これを行うことができます。

cat /dev/urandom | ./vulnerable
于 2011-07-27T15:53:35.470 に答える
2

popenコマンドラインを使用するのではなく、次の代わりに使用してみてくださいsystem

FILE *fp = popen("./vulnerable", "w");
// write stuff to fp -- it goes to vulnerable's stdin
int exitcode = pclose(fp);

取得する出口コードは、別のプロセスを使用してデータを作成し、シェルを介して./vulnerableにパイプした場合、pclose取得したものと同じです。system

于 2011-07-27T16:46:56.973 に答える
0

リダイレクトする代わりに配管を試してください:

./malicious_payload_binary | ./vulnerable
于 2011-07-27T15:54:01.347 に答える
0

編集:私は最終的にあなたの質問を理解したと思います(多分)、あなたはコマンドライン引数を読みたいですか?何かのようなもの

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("the name of this program is %s\n", argv[0]);
    printf("%d command line arguments were provided\n", argc);
    printf("the input file is %s\n", argv[1]);
    // could do something like: fopen(argv[1]) here
    return 0;
}

名前の付いたバイナリにコンパイルして、次のstdintestように実行する場合:

./stdintest somefile.txt

次のように出力されます。

the name of this program is ./stdintest
2 command line arguments were provided
the input file is somefile.txt

年:

ドルフィーが述べたように、stdout inに書き込み、malicious_payload_binarystdin inから読み取りvulnerable、パイプで接続します。./malicious_payload_binary | ./vulnerable

于 2011-07-27T15:56:22.157 に答える