我正在尝试开发shellcode来进行二进制利用。我需要打印到文件的指令之一是NOP(0x90)。无论出于什么原因,每当我尝试打印此字符时,我的Python环境(在Ubuntu 20.04上运行)都会挂起。换句话说,除非我在环境之外按Ctrl-D并再次使用python命令,否则我将无法运行任何其他Python代码行。其他不可打印的字符不会发生这种情况。为了说明你的意思,这里是一个例子:
$ python3
Python 3.8.2 (default, Apr 27 2020, 15:53:34)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('\x55')
U
>>> print('\x80') # Python doesn't hang with other weird characters
>>> print('\x91')
>>> print('\x89')
>>> print('\x90') # Python does not respond after this line
此外,如果我尝试在外壳中使用此命令,则会得到不同的结果。它无需悬挂即可工作,但是0xc2和0x90一起打印出来。
$ python3 -c "print('\x90')" > test
$ xxd test
00000000: c290 0a ...
没有任何方法可以将0x90字符输出到文件而无需Python挂起或添加0xc2字符?
以二进制模式打开文件,并使用write
而不是print
。
将'b
放在'\ x90'前面,使其成为字节字符串。