通过管道将 `find` 传送到 `echo` 能造成巨大破坏吗?

通过管道将 `find` 传送到 `echo` 能造成巨大破坏吗?

我目前正在学习 Google 网络安全 Coursera 认证课程。我现在在 Linux 部分,正在学习一些 Linux 命令,我对它完全陌生,但有一件事我很疑惑。在学习过程中,我总是试图思考防御者或攻击者可能会如何使用该命令,最近我了解了该echo >命令以及它如何覆盖所有内容。我确实检查过它可以被恶意使用,但我当然没有完全理解它。

我的问题是,假设攻击者可以访问某人的计算机,并想快速对用户造成一些损害,因为他知道该用户拥有许多.txt文件。此命令有效吗?

find /home/ -name "*.txt*" | echo "gg" > "*.txt*"

只是想知道我是否理解正确。这是否基本上会创建一个命令来查找.txt下的所有文件/home/,然后通过管道用单词echo覆盖所有文件?.txtgg

如果不是,为什么它不起作用?我想知道为什么它不起作用,以帮助我更好地理解它,如果这个想法在技术上可行,但命令写错了,请告诉我哪部分是错误的。

答案1

它不会工作:echo不从管道接收参数。find将找到所有.txt文件并将其通过管道传输到echo。但echo会忽略它并仅输出gg

>*.txt*如果您有权限,redirect 将尝试将其写入名为的文件。如果该文件存在,它将被覆盖,如果不存在,它将被创建。

答案2

由于 ThoriumBR 已经解释过的原因,这种方法行不通。

你正在寻找类似

shopt -s globstar
for file in **/*.txt
do
    echo "rr" > "$file"
done

或者

find . -name "*.txt" -print0 | while read -d $'\0' file
do
    echo "rr" > "$file"
done

相关内容