Kann die Weiterleitung von „find“ an „echo“ dazu verwendet werden, massiven Schaden anzurichten?

Kann die Weiterleitung von „find“ an „echo“ dazu verwendet werden, massiven Schaden anzurichten?

Ich nehme derzeit am Google Cybersecurity Coursera-Zertifikatskurs teil. Ich bin jetzt im Linux-Bereich und lerne ein paar Linux-Befehle. Ich bin völlig neu darin, aber ich habe mich über eine Sache gewundert. Während ich lerne, versuche ich immer darüber nachzudenken, wie ein Verteidiger oder ein Angreifer den besagten Befehl verwenden könnte, und vor kurzem habe ich etwas über den echo >Befehl gelernt und wie er alles überschreiben kann. Ich habe überprüft, dass er böswillig verwendet werden kann, aber natürlich habe ich ihn nicht vollständig verstanden.

Meine Frage ist: Angenommen, ein Angreifer erhält Zugriff auf den Computer einer anderen Person und möchte dem Benutzer schnell Schaden zufügen, obwohl er weiß, dass er viele .txtDateien hat. Würde dieser Befehl funktionieren?

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

Ich frage mich nur, ob ich das richtig verstehe. Würde dies im Grunde einen Befehl erstellen, der alle .txtDateien darunter findet /home/und dann eine Pipe ausführt, echoum alle .txtDateien mit dem Wort zu überschreiben gg?

Wenn nicht, warum funktioniert es nicht genau? Ich würde gerne verstehen, warum es nicht funktioniert, um es besser zu verstehen. Und wenn die Idee technisch funktioniert, der Befehl aber falsch geschrieben ist, lassen Sie mich wissen, welcher Teil daran falsch ist.

Antwort1

Das funktioniert nicht: echoempfängt keine Parameter von einer Pipe. findfindet alle .txtDateien und leitet sie an weiter echo. echoIgnoriert sie aber und gibt nur aus gg.

>Die Umleitung versucht einfach, es in eine Datei mit dem Namen zu schreiben, *.txt*wenn Sie die Berechtigung dafür haben. Die Datei wird überschrieben, wenn sie existiert, und erstellt, wenn sie nicht existiert.

Antwort2

Aus den von ThoriumBR bereits erläuterten Gründen funktioniert das nicht.

Sie suchen etwas wie

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

oder

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

verwandte Informationen