python - str() 在这里代表什么?

标签 python security networking

我是一名初学者 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
*

显然我在这里遗漏了一些东西,但我不知道如何找到它。谁能给我解释一下?

最佳答案

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 字符,您看到的那个孤独的 *

因此,当您打印 该值时,Python 会尝试将确切的字节写入您的控制台,但其中只有一个对您的控制台有意义,从而导致一个可见的字符。

关于python - str() 在这里代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21737487/

相关文章:

java - 如何使用Java中的objectinputstream多次从服务器读取文件

python - Python中短路径算法的函数式解决方案

python - 如何根据通过 Selenium 和 Python 提供的 HTML 定位元素

php - 防止 SQL 注入(inject)

javascript - 允许用户提交的 JS 在不影响安全性的情况下执行

linux - lxc. 提供的默认 lxcbr0 网桥可以添加多少个虚拟接口(interface)?

docker - 从 docker 容器内部连接到 docker 守护进程

python - 在 nGINX 上部署 Django 应用程序

python - 查找 shapefile 中面片子集的 map 边界 (Python)

linux - Apache-CGI-Bash 应用程序中的安全性或其他陷阱?