Mil*_*ilk 2 bash null filenames
对于安全测试,我需要传递一个在其内容和文件名中包含空字符的文件。
对于正文内容,它很容易使用printf:
$ printf "Hello\00, Null!" > containsnull.txt
$ xxd contains.null
0000000: 4865 6c6c 6f00 2c20 4e75 6c6c 21 Hello., Null!
Run Code Online (Sandbox Code Playgroud)
但是如何创建名称中包含空字节的文件?
注意:如果可能bash,最好使用python或 中的解决方案nodejs
不可能通过 POSIX 或 Windows API 创建包含空字节的文件名。在我所知道的所有 Unix 系统上,即使使用绕过正常 API 的行为不良的应用程序,也不可能创建包含空字节的文件名,因为内核本身将其所有文件名输入视为空- 终止的字符串。我相信这在 Windows 上也是如此,但我不完全确定。
作为应用程序程序员,就安全性而言,这意味着您无需担心包含空字节的文件名,如果您确定您拥有的是文件名。另一方面,如果您得到一个字符串并被告知将其用作文件名,例如,如果您正在对服务器进行编程并让客户端选择文件名,则需要确保该字符串不包含 null字节。这只是其他要求之一,包括字符串长度、目录分隔符(/或\)的存在、保留名称(.和..,保留的 Windows 文件名,例如nul.txt或prn)等。在大多数 Unix 系统上,在其本机文件系统上,对于文件名是:没有空字节或斜杠,长度介于 1 和某个最大值之间,.并被..保留。Windows 和 Unix 上的非本地文件系统有额外的限制(可以/通过 Windows 上的直接内核调用将 a放入文件名中)。
要将空字节放入文件内容中,只需使用任何允许字符串中包含空字节的语言将字符串写入文件。在 bash 中,您不能在字符串中存储空字节,因此您需要使用另一种方法,例如printf '\0'或echo "abc" | tr b '\0'。
| 归档时间: |
|
| 查看次数: |
3686 次 |
| 最近记录: |