
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 .txt
Dateien 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 .txt
Dateien darunter findet /home/
und dann eine Pipe ausführt, echo
um alle .txt
Dateien 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: echo
empfängt keine Parameter von einer Pipe. find
findet alle .txt
Dateien und leitet sie an weiter echo
. echo
Ignoriert 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