为什么在终端和运行终端的程序中内联打印转义的十六进制字符之间有区别?

时间:2019-04-14 16:27:17

标签: python printing escaping pwntools

我试图将字符串发送到服务器上运行的另一个应用程序(我无权访问)。该字符串包含空字符。 现在我注意到,当我在脚本中运行以下代码时,

preferredLayoutAttributesFitting

输出为:abc \ x00 \ x91 \ x11123。

在终端中运行相同代码时的想法:

print('abc\x00\x91\x11\x01123')

我得到的输出是:abc�123

在我的情况下,这是所需的输出。 为什么两个输出都不同? 在脚本中运行打印功能时,如何获得第二个输出?

编辑: 我弄清楚是什么原因造成的。 pwntools导致了这种行为。 但是我仍然不知道为什么。 以下代码:

python -c 'print("abc\x00\x91\x11\x01123")'

结果

abc \ x00 \ x91 \ x11123

当我不导入pwn时,结果是预期的: abc�123。

2 个答案:

答案 0 :(得分:0)

实际上没有什么区别。您的问题出在其他地方,但不是终端和脚本之间的解释差异。

这是我在本地为您的示例提供的输出:

[cecile@CC-PC ~]$ python
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('abc\x00\x91\x11\x01123')
abc_123
>>>
[cecile@CC-PC ~]$ python -c 'print("abc\x00\x91\x11\x01123")'
abc_123

在这台机器上,不可打印的字符似乎已被_代替,但是这里要指出的是,如您所见,解释器和终端中的结果是相同的。

答案 1 :(得分:0)

我希望这可以作为Stack Overflow标准中的答案。

如果您与手榴弹一起玩,对待就像手榴弹,而不是玩具。 PWN tools似乎是一些利用脚本编写的工具。如果您阅读该文档的前几段,则会发现以下内容:

  

如前所述,我们还希望能够默认获得很多这些副作用。这就是本模块的目的。它执行以下操作:

     

[...]调用pwnlib.term.init()将您的终端置于原始模式,并实现使它看起来好像不是原始模式的功能。

已警告您,但您尚未进行RTFM。