1

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

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

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

当我在终端中运行相同的代码时想到:

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

我得到输出:abc�123

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

编辑:我弄清楚是什么导致了这种差异。pwntools 导致了这种行为。但我仍然无法真正弄清楚为什么。以下代码:

#!/usr/env/python
import pwn

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

结果是

abc\x00\x91\x11123

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

4

2 回答 2

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

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

于 2019-04-14T16:38:23.583 回答
0

我希望这符合 Stack Overflow 标准中的答案。

如果你玩手榴弹,对待就像手榴弹,而不是玩具。 PWN 工具似乎是一些用于利用的脚本小子工具。如果您阅读文档的前几段,您会发现以下内容:

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

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

您已被警告过,但您还没有 RTFM。

于 2019-04-15T08:08:33.293 回答