我正在尝试编辑secretinfo.txt
目录中的一个文件。SensitiveData
目前,该目录和文件具有以下权限:
drwx------ 2 www-data root 4096 Apr 20 17:39 SensitiveData
-rw------- 1 www-data root 28 Apr 20 17:20 secretinfo.txt
文件和目录位于运行 apache Web 服务器的 UbuntuVM 上,该服务器容易受到命令注入攻击(这是我正在练习的个人 VM),我能够注入cat /var/SensitiveData/secretinfo.txt
输出的命令My bank account pin is 4565
。我尝试使用相同的命令注入技术来更改引脚,但没有成功。到目前为止,我已尝试以下命令,但它不会更改文本文件:
sed -i ‘s/4565/1111/’ /var/SensitiveData/secretinfo.txt
cat /var/SensitiveData/secretinfo.txt | sed -i ‘s/4565/1111/’ > /var/SensitiveData/secretinfo.txt
使用 sed 时我是否遗漏了一些内容,或者应该使用另一个命令来替换文本?第一个命令不执行任何操作,而第二个命令覆盖并创建一个空白文件。
答案1
您的文件secretinfo.txt
长度为 81 个字符。当您查看cat
其内容时,仅显示其中的一小部分。
原因之一可能是其中有多个字符串4565
,而您正在替换隐藏的字符串,而不是显示的字符串。因此,尝试替换所有可能的字符串,而不仅仅是每行的第一个:
sed -i ‘s/4565/1111/g’ /var/SensitiveData/secretinfo.txt
另一个原因可能是显示的字符之间存在不可见的字符。尝试使用hd
( hexdump
) 命令来找出secretinfo.txt
文件的确切内容。只有这样你才能构建相关的sed
命令。
顺便说一句,不要这样做:
cat /var/SensitiveData/secretinfo.txt | sed -i ‘s/4565/1111/’ > /var/SensitiveData/secretinfo.txt
首先,您在修改文件的同时读取文件(这可能在某些条件下有效,但请考虑这不受您的控制并避免这种构造)。
其次,该-i
选项要求提供一个文件作为参数,并且该命令不会产生输出,因此您的重定向只是清空该文件。