2

セキュリティ、DNS キャッシュ ポイズニング、およびカミンスキー攻撃に関連する宿題として、Nemesisを使用してローカル DNS サーバーにパケットを送信する Perl スクリプトを作成しています (これはすべて、閉じたホストオンリーの VMWare ネットワークで行われています)。ネメシスを呼び出すプロセスの自動化まですべてを行いました。

特に Perl を使用して、ランダムな DNS トランザクション ID を選択し、以前に作成した DNS ペイロードにそれらを追加しています。現在、ペイロードは DNS の回答ではなく単なるクエリであるため、ペイロードの ID 部分を作成し、Perl で敵にプッシュする方法を完成させることができます。

私のコードは現在...

 #!/usr/bin/perl

use strict;
use warnings;

my $dnsId = int(rand(65535));

my $idString = sprintf("%x", $dnsId);

if(length($idString) == 1){$idString = "000".$idString}
elsif(length($idString) == 2){$idString = "00".$idString}
elsif(length($idString) == 3){$idString = "0".$idString}

my $payload = $idString."01000001000000000000037777770f646e737068697368696e676c61627303636f6d0000010001";

print(`echo "$payload" | nemesis udp -S10.1.3.1 -D10.1.3.100 -x53 -y33333 -P-`)

私が抱えている問題は、ネメシスがデータを文字列として読み取っていることです。これはもちろん、エコーが行っていることです。したがって、データを ASCII ではなくバイナリ データとして nemesis にパイプする必要があります。

pack()バイナリファイルを作成してから、「cat /foo/bar/file | nemesis -...」を使用してペイロードを実行できると思いますが、余分なIOが必要ないため、これは最適なソリューションではありません(仮想的に、決して届かない) 本物の応答を受信する前に、私が試行できる悪意のある DNS 応答の数の要因となる時間。

このデータをバイナリ形式でネメシスにフィードできるようにするために調べることができるいくつかの方法は何ですか?

4

1 に答える 1

4

初め、

print(`...`);

に単純化します

system("...");

からパイプアウトする必要がなくなったためnemesis、簡単にパイプインできるようになりました (両方を実行する場合は、IPC::Run3またはIPC::Runを使用します)。

my @cmd = ('nemesis',
   'udp', '-S10.1.3.1', '-D10.1.3.100',
   '-x53', '-y33333', '-P-' );

open(my $pipe, '|-', @cmd)
   or die $!;
binmode($pipe);
print($pipe $payload);
close($pipe);

もちろん、コード$payloadには実際にはペイロードは含まれていませんが、その 16 進表現が含まれています。すべてを行うことができますがpack 'H*'、次の方法がより良いアプローチだと思います。

my $dnsId = int(rand(65536));

my $payload = pack('n H*',
    $dnsId, '010000010000'.  # 000000
    '0000000003777777'.      # 000010
    '0f646e7370686973'.      # 000020
    '68696e676c616273'.      # 000030
    '03636f6d00000100'.      # 000040
    '01');                   # 000050

実際に戻ることができるように変更65535したことに注意してください。6553665535

于 2013-02-26T06:02:15.320 に答える