我是初学Python程序员,我非常喜欢安全性。但是,我正在学习,今天我偶然发现Python script很容易使用NTP服务器使用NTP“漏洞”提供的放大来执行DoS攻击。
如果查看脚本第18行,您会看到:
data=str("\x17\x00\x03\x2a") + str("\x00")*4
但是,如果我去Python控制台并尝试打印它,它返回的内容是没有意义的:
>>> str("\x17\x00\x03\x2a") + str("\x00")*4
*
显然我在这里遗漏了一些东西,但我不知道如何找到它。有人可以向我解释一下吗?
答案 0 :(得分:5)
str()
来电完全是多余的。
以下内容产生相同的值:
data = "\x17\x00\x03\x2a" + "\x00" * 4
这是4个字节,十六进制值17,00,03和2a,后跟4 00个字节。
\xhh
是一个Python转义序列,用于通过十六进制代码点定义字节; \x61
将是小写'a'
,因为这是该ASCII字符的十六进制代码:
>>> '\x61'
'a'
Python提示将字符串作为'a'
回复给我,因为它是可打印的。不可打印的字符仍然使用其转义码显示。
该字符串不包含(多)可打印数据,这些字节大多数在ASCII可打印范围之外:
>>> data = "\x17\x00\x03\x2a" + "\x00" * 4
>>> data
'\x17\x00\x03*\x00\x00\x00\x00'
只有\x2a
字节是可打印的ASCII字符,您看到的是*
孤独的字符。
因此,当您 print
该值时,Python会尝试将确切的字节写入您的控制台,但只有其中一个实际上对您的控制台有意义,从而产生一个可见的字符