编辑文件而不使其可执行

编辑文件而不使其可执行

我正在尝试编辑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选项要求提供一个文件作为参数,并且该命令不会产生输出,因此您的重定向只是清空该文件。

相关内容