Capture the Flag
Orientierung
Motivation
Moderne Systeme der Robotik basieren so gut wie immer auf einem Linux-System. Dadurch ist es unerlässlich, sich zumindest grundlegend mit der Befehlszeile in Linux auszukennen. Häufige Aufgaben sind hier das Ausführen von Befehlen, das Suchen und Finden von Dateien und das Ausgeben von Dateien. Die hier durchführbare Übung ermöglicht es, die drei häufigsten Tätigkeiten kennen zu lernen und zu üben.
Lernvoraussetzung
- Sie benötigen keine besonderen Voraussetzungen
- Sie benötigen ein Programm, um auf einen entfernten Computer zugreifen zu können. Folgende Programme eignen sich dafür:
- Unter Windows empfiehlt sich PuTTY.
Alternativ kann auch openSSH unter Windows installiert werden. Die Installation wird HIER erläutert. - Unter Linux/MacOS empfiehlt sich openssh-client; von dieser Software gibt es ebenso eine portable Variante openssh portable
Lernergebnisse
Nach der Durchführung der Übung sind Sie in der Lage…
- … verfügbare Programme auf der Kommandozeile auszuführen.
- … Dateien basierend auf bestimmten Merkmalen zu finden.
- … den Inhalt von Dateien zu analysieren und anzuzeigen.
Literaturtipps
Im Internet findet man eine Vielzahl von verschiedenen Anleitungen. Eine der kürzeren und dennoch verständlichen Anleitungen kann HIER gefunden werden. Tiefergreifende Informationen können HIER abgerufen werden. Im nächsten Abschnitt werden jedoch die benötigten Grundlagen nochmals dargelegt. Eine Seite, auf der komplette Befehle erklärt werden ist unter ExplainShell zu finden.
Wegweiser durch die Übung
Für die Übung benötigt man zwischen 60 und 90 Minuten. Die konkrete Dauer ist hier vom individuellen Lernfortschritt abhängig.
Folgende Aktivitäten/Tätigkeiten werden von Ihnen erwartet:- Im Baustein Grundlagen
- erarbeiten der notwendigen Theorie.
- Im Baustein Übung
- lesen Sie sich die Rahmenbedingungen der Übung durch.
- bekommen Sie noch einen Hinweis, wie Sie mit der Übung starten können.
- Im Baustein Anwendung
- bekommen Sie für jede Übungsaufgabe den notwendigen Hinweis um die Übung zu absolvieren.
- Im Baustein Reflexion
- erhalten Sie eine kurze Zusammenfassung der Ergebnisse
Grundlagen
Im Folgenden werden die Verbindungsmöglichkeiten mit einem externen Rechner erklärt und die Grundlagen der Unix-Shell gezeigt.
Verbindung mit einem externen Rechner
PuTTY in Windows
Nach dem Starten der Software PuTTY erscheint die nachfolgend abgebildete Benutzeroberfläche. Um eine Verbindung mit einem externen Rechner herzustellen, müssen Host Name und Port angegeben werden. Der Host Name beschreibt den Computernamen und der Port ein Protokoll, das die Verbindung auf dem externen Rechner zuordnet. Über den Port werden nach erfolgreicher Verbindung Daten ausgetauscht. Für diese Online-Übung muss man sich mit dem Rechner engine.ie.technikum-wien.at unter dem Port 4841 verbinden. Dazu müssen die Informationen in den entsprechenden Feldern eingetragen werden. Da eine SSH-Verbindung hergestellt werden soll, muss unter "Connection type" die Option SSH getroffen werden. Im Normalfall ist dies die Standardauswahl und nach dem Start von PuTTY bereits voreingestellt. Für diese Online-Übung müssen keine weitere Einstellungen vorgenommen werden. Somit kann durch Klicken auf den Button Open die Verbindung zum externen Rechner hergestellt werden. Bei erstmaliger Verbindung mit einem Rechner öffnet sich eine Warnmeldung, die mit Ja bestätigt wird.Nach erfolgreicher Verbindung öffnet sich eine Konsole, die zum Interagieren mit dem externen Rechner dient. Zuerst wird nach dem Benutzernamen durch "login as:" gefragt. Um die korrekte Anmeldung zu demonstieren, wird der Benutzername level0 in die Befehlszeile der Shell geschrieben und mit Enter bestätigt. Danach erfolgt die Passwortabfrage. Das Passwort des Benutzers level0 lautet ebenfalls level0. Während des Eintippens des Passwortes werden keine Zeichen in der Shell angezeigt! Dabei handelt es sich um keinen Fehler - es soll lediglich der Sicherheit dienen. Nach Eingabe des Passworts, muss wieder mit Enter bestätigt werden. Anschließend erscheint die Information "Starting the Game". Erscheint diese Nachricht, war die Anmeldung am externen Rechner der FH Technikum Wien erfolgreich. Die weiteren Zeilen, die in der Abbildung dargestellt sind, erscheinen nachdem alle Einstellungen am Rechner geladen sind. Dies kann einige Momente in Anspruch nehmen. Weitere Erklärungen sind im nächsten Abschnitt "Befehlszeile und Befehle" beschrieben.
Shell-Fenster unter Linux/MacOS
Im Gegensatz zu Windowssystemen, muss bei Verwendung von Linux/MacOS kein Programm installiert werden. Bei diesen Betriebssystemen wird eine SSH-Verbindung direkt über die Konsole mit dem vorinstallierten Programm ssh hergestellt. Dazu muss zuerst die Shell unter Linux bzw. ein Terminal unter MacOS gestartet werden. Die Konsole ist in der unteren Abbildung abgebildet, wobei die Darstellung vom verwendeten Betriebssystem abhängig ist. Eine erfolgreiche Verbindung mit dem externen Rechner erfolgt wiederum durch Angabe von Host (engine.ie.technikum-wien.at) und Port (4841). Der Übergabe des Ports erfolgt mithilfe des Attributes -p an den die Portnummer angehängt wird. Zusätzlich muss vor dem Herstellen der Verbindung der Benutzername (level0) übergebehn werden. Der Benutzername wird dazu vor dem Host-Namen gestellt, wobei Benutzername und Host durch ein @ voneinander getrennt werden. Um mit dem Programm "ssh" eine SSH-Verbindung herzustellen, müssen die beschriebenen Parameter folgendermaßen in der Befehlszeile eingegeben werden:user@SERVICE-SA92C87:~$ ssh USER@HOST -pPORT
user@SERVICE-SA92C87:~$ ssh level0@engine.ie.technikum-wien.at -p4841
Befehlszeile und Befehle
Alle Übungen werden auf der Befehlszeile auf einem Linux-Rechner ausgeführt.
Im Folgenden ist die Befehlszeile der Übung abgebildet.
level0@ctf:~$
Wenden wir uns kurz dem Dateisystem eines Linux-Systems zu. In einem Linux-System besteht das Dateisystem aus Ordnern, Dateien und Links. Ordner werden verwendet, um Dateien zu organisieren. Links werden verwendet, um Dateien und Ordner unter einem anderen Namen ansprechen zu können. Alles andere sind Dateien! Alle Geräte verbundenen Geräte sind als Datei zugänglich. Schauen wir uns einmal den Inhalt des Root-Verzeichnisses (/) an. Dabei handelt es sich um den Basisordner, in dem alle anderen Ordner und Dateien abgelegt sind. Dafür verwenden wir den Befehl ls, auf den wir später nochmal eingehen, und bekommen folgenden Output:
level0@ctf:~$ ls -lah /
total 76K
drwxr-xr-x 1 root root 4.0K Sep 10 08:48 .
drwxr-xr-x 1 root root 4.0K Sep 10 08:48 ..
-rwxr-xr-x 1 root root 0 Sep 10 08:48 .dockerenv
drwxr-xr-x 1 root root 4.0K Apr 4 08:29 bin
drwxr-xr-x 2 root root 4.0K Apr 12 2016 boot
drwxr-xr-x 5 root root 360 Sep 10 08:48 dev
-rwxrwxr-x 1 root root 129 Jun 4 11:10 entrypoint.sh
drwxr-xr-x 1 root root 4.0K Sep 10 08:48 etc
drwxr-xr-x 1 root root 4.0K Jun 4 11:11 home
drwxr-xr-x 1 root root 4.0K Sep 13 2015 lib
drwxr-xr-x 2 root root 4.0K Jan 22 2019 lib64
drwxr-xr-x 2 root root 4.0K Jan 22 2019 media
drwxr-xr-x 2 root root 4.0K Jan 22 2019 mnt
drwxr-xr-x 2 root root 4.0K Jan 22 2019 opt
dr-xr-xr-x 271 root root 0 Sep 10 08:48 proc
drwx------ 1 root root 4.0K Jun 4 13:24 root
drwxr-xr-x 1 root root 4.0K Sep 10 08:48 run
drwxr-xr-x 1 root root 4.0K Jan 22 2019 sbin
drwxr-xr-x 2 root root 4.0K Jan 22 2019 srv
dr-xr-xr-x 13 root root 0 Sep 10 07:57 sys
drwxrwx-wx 1 root root 4.0K Apr 4 08:29 tmp
drwxr-xr-x 1 root root 4.0K Jan 22 2019 usr
drwxr-xr-x 1 root root 4.0K Jan 22 2019 var
-
Information zu den Zugriffsrechten über das folgende Element drwxr-xr-x
Das führende d kennzeichnet einen Ordner. Wenn es sich um eine Datei handelt, so steht dort -; im Falle einer Verknüpfung findet man dort ein l. Es gibt noch einige andere Buchstaben, die spezielle Dateien bezeichnen, diese können HIER unter dem Punkt --format=verbose nachgelesen werden. Als nächstes werden die Zugriffsrechte abgebildet. Es gibt drei Berechtigungen: Lesen (r), Schreiben (w) und Ausführen (x). Und es gibt drei verschiedene Gruppen, für die es Berechtigungen gibt: den Besitzer, die zugeordnete Gruppe und alle anderen. Sollte eine Berechtigung nicht erteilt sein, so wird sie mit einem - gekennzeichnet. - Anzahl der Verlinkungen auf das Element.
- Besitzer
- Gruppe
- Größe
- Zeitpunkt der letzten Modifikation
- Name des Elements
Um das Dateisystem zu navigieren, verwendet man absolute und relative Pfade. Der Unterschied zwischen einem absoluten und einem relativen Pfad ist, dass ein absoluter Pfad den gesamten Pfad einer Datei bezeichnet, während ein relativer Pfad eine Datei vom aktuellen Ordner aus bezeichnet. Jeder Pfad, der mit einem / beginnt, ist ein absoluter Pfad, alle anderen Angaben sind relative Pfade. Hier kommen die speziellen Elemente von vorher ins Spiel. Nur durch sie ist es möglich, einen relativen Pfad anzugeben. Bei einer Pfadangabe werden die einzelnen Pfadelemente durch einen / getrennt. Ein Beispiel für eine absolute und eine relative Pfadangabe können wir hier sehen:
level0@ctf:/home$ ls -l /entrypoint.sh
-rwxrwxr-x 1 root root 129 Jun 4 11:10 /entrypoint.sh
level0@ctf:/home$ ls -l ../entrypoint.sh
-rwxrwxr-x 1 root root 129 Jun 4 11:10 ../entrypoint.sh
Nachdem wir uns kurz den Pfaden gewidmet haben, sehen wir uns einmal an, wie man einen Befehl ausführen, oder eine ausführbare Datei, auch Programm genannt, starten kann. Um einen Befehl oder ein Programm auszuführen, muss im Regelfall nur der Name eingegeben werden und mit Enter bestätigt werden. Das System sucht selbstständig in verschiedenen Suchordnern nach dem Programm, welche durch die Systemvariable PATH definiert sind. Wenn eine ausführbare Datei in den Ordnern /bin, /usr/bin, /usr/local/bin, ~/bin oder ~/.local/bin ist, handelt es sich um den Regelfall und die Datei wird automatisch gefunden. Wenn das Programm nicht in einem der vorher angeführten Ordnern ist, kann man durch die Angabe eines relativen oder absoluten Pfades des Programmes dieses ausführen. Sollte man jetzt zum Beispiel ein Programm names testProgramm haben und sich im selben Ordner wie das Programm aufhalten, so kann es einfach über ./testProgramm ausgeführt werden. In dieser Übung kommen keine eigenen Programme zum Einsatz, alle Programme sind im Suchpfad des Systems.
Ordner wechseln und Inhalt anzeigen
Um den aktuellen Ordner zu wechseln, gibt es den Befehl cd.
Dabei gibt man als Argument den Zielordner als absoluten oder relativen Pfad an.
Hier sehen wir ein paar Beispiele:
level0@ctf:~$ cd /var
level0@ctf:/var$ cd ../etc
level0@ctf:/etc$ cd ~
level0@ctf:~$ cd /home
level0@ctf:/home$ cd level0
level0@ctf:~$ cd .
level0@ctf:~$ cd ../..
level0@ctf:/$ cd
level0@ctf:~$
Um den Inhalt eines Verzeichnisses anzuzeigen, gibt es zwei verschiedene Möglichkeiten. Einerseits gibt es den schon verwendeten Befehl ls. Andererseits gibt es den Befehl tree. Während der erste Befehl auf jedem Linux-System existiert, muss der zweite Befehl nachinstalliert werden. Aus diesem Grund widmen wir uns dem Befehl ls. Der Befehl kann ohne ein Argument aufgerufen werden, dann arbeitet er am aktuellen Verzeichnis. Man kann jedoch auch eine Vielzahl an absoluten und relativen Pfadangaben angeben, und er wird für jedes Verzeichnis den Inhalt des Verzeichnisses darstellen. Ohne weitere Optionen werden nur die Namen der sichtbaren Elemente im angegebenen Ordner angezeigt. Im Folgenden eine kurze Übersicht über mögliche nützliche Optionen:
- -a
- Es sollen alle Dateien, also auch die versteckten Dateien, angezeigt werden.
- -l
- Es werden nicht nur die Namen, sondern auch interessante Attribute angezeigt. Diese Attribute sind schon weiter oben genannt worden.
- -h
- Größenangaben sollen nicht in Blockgrößen, sondern in verständlichen Einheiten angegeben werden.
- -F
-
Es wird ein Indikator an die Namen angehängt, wenn es sich nicht um eine reguläre Datei handelt.
Es gibt folgende Indikatoren:
- *
- Es handelt sich um eine Ausführbare Datei.
- /
- Es handelt sich um einen Ordner.
- =
- Es handelt sich um einen Socket.
- >
- Es handelt sich um eine Door.
- @
- Es handelt sich um eine Verlinkung.
- |
- Es handelt sich um eine Pipe mit einem Namen.
Dateien analysieren
Es gibt verschiedene Möglichkeiten eine Datei zu analysieren.
Folgende Befehle sind hilfreich:
- file
- wc
- grep
- diff
- cmp
- cksum
level0@ctf:~$ file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=04eca96c5bf3e9a300952a29ef3218f00487d37b, stripped
level0@ctf:~$ file /entrypoint.sh
/entrypoint.sh: Bourne-Again shell script, ASCII text executable
level0@ctf:~$ file -i /bin/bash
/bin/bash: application/x-executable; charset=binary
level0@ctf:~$ file -i /entrypoint.sh
/entrypoint.sh: text/x-shellscript; charset=us-ascii
- -c
- Diese Option liefert die Anzahl an Bytes der angegebenen Datei.
- -w
- Diese Option liefert die Anzahl an Wörtern in der angegebenen Datei.
- -l
- Diese Option liefert die Anzahl an Zeilen der angegebenen Datei.
level0@ctf:~$ wc /entrypoint.sh
10 23 129 /entrypoint.sh
level0@ctf:~$ wc -l /entrypoint.sh
10 /entrypoint.sh
level0@ctf:~$ wc -w /entrypoint.sh
23 /entrypoint.sh
level0@ctf:~$ wc -c /entrypoint.sh
129 /entrypoint.sh
Der Befehl diff vergleicht zwei Dateien miteinander und zeigt an, wo sich die Dateien unterscheiden. Eine umfassende Anleitung für den Befehl gibt es HIER. Während diff auf Textdateien zugeschnitten ist, da es zeilenweise vergleicht, ist das Programm cmp universell. Dieses Programm vergleicht Dateien byteweise. Im nachstehenden Beipiel wird der Unterschied verdeutlicht.
level0@ctf:/tmp/test$ ls -lh
total 8.0K
-rw-rw-r-- 1 level0 level0 63 Sep 12 13:34 datei1
-rw-rw-r-- 1 level0 level0 63 Sep 12 13:34 datei2
level0@ctf:/tmp/test$ diff datei1 datei2
3c3
< Nummer 123
---
> Nummer 321
level0@ctf:/tmp/test$ cmp datei1 datei2
datei1 datei2 differ: char 60, line 3
level0@ctf:/tmp/test$ ls -lh
total 8.0K
-rw-rw-r-- 1 level0 level0 63 Sep 12 13:59 datei1
-rw-rw-r-- 1 level0 level0 63 Sep 12 13:59 datei2
level0@ctf:/tmp/test$ cksum datei1 datei2
1438393268 63 datei1
3289888160 63 datei2
Dateien ausgeben
Es gibt verschiedene Möglichkeiten eine Datei auszugeben.
Folgende Befehle sind hilfreich:
- cat
- sort
- uniq
- less
- head
- tail
Mithilfe des Befehls sort kann der Inhalt einer Datei sortiert werden, wobei die Datei selbst nicht geändert wird, sondern lediglich der sortierte Inhalt der Datei in der Konsole ausgegeben wird. Ohne Angabe weiterer Optionen erfolgt die Sortierung alphabetisch. Das Attribut -n beispielsweise ermöglicht eine numerische Sortierung. Weitere Optionen, die in dieser Übung jedoch nicht angewendet werden müssen, werden HIER erklärt.
Ein weiteres wichtiges Programm zum Ausgeben von Dateiinhalten ist uniq. Dadurch wird eine Datei zeilenweise analysiert, indem jede Zeile mit der jeweils darüberliegenden Zeile verglichen wird. Sind hintereinander folgende Zeilen ident, wird die Zeile nur einmal ausgegeben. Die Option -c gibt die Anzahl jeder Zeile an. Eine weitere wichtige Option ist -u, wodurch mehrmals vorkommende Zeilen nicht ausgegeben werden. An dieser Stelle sei nochmals erwähnt, dass der Zeilenvergleich nur mit der jeweils darüberliegenden Zeile erfolgt.
Größere Dateien können mit dem Programm less angezeigt werden. In diesem Programm ist es möglich mit den Pfeiltasten zu scrollen, und Text zu suchen. Zusätzlich ist es möglich zwischen den einzelnen gefundenen Textpassagen herumzuspringen.
Die Namen der beiden Programme head und tail lassen vermutlich schon erahnen, was mit den Programmen möglich ist. Das erste Programm kann eine beliebige Anzahl (standardmäßig sind es 10) an Zeilen vom Anfang der Datei ausgeben. Das zweite Programm gibt eine beliebige Anzahl an Zeilen vom Ende der Datei an.
level0@ctf:~$ cat /entrypoint.sh
#!/bin/bash
set -e
service ssh start
if [ "$1" = '/bin/bash' ]; then
/bin/su - level0
else
/bin/su - level0 -c "$@"
fi
level0@ctf:~$ head -n 2 /entrypoint.sh
#!/bin/bash
set -e
level0@ctf:~$ tail -n 2 /entrypoint.sh
/bin/su - level0 -c "$@"
fi
Dateien suchen
Um unter Unix ein Element zu finden, sei es eine Datei, ein Ordner, oder sonstiges, wird der Befehl find verwendet.
Das Programm benötigt einen Suchpfad und kann durch verschiedene Parameter angepasst werden.
Das Programm sucht nur ausgehend vom angegebenen Suchpfad.
Um das gesamte System zu durchsuchen, muss / als Suchpfad angegeben werden.
Es kann nur Elemente finden, für die man entsprechende Berechtigungen hat.
Eine kurze Auswahl möglicher Parameter:
- -name und -iname
- Diese Parameter suchen nach einem bestimmten Namen, welcher direkt nach dem Parameter angegeben werden muss. Die erste Form berücksichtigt die Groß- und Kleinschreibung des angegebenen Namens, die zweite Form tut dies nicht.
- -type
- Dieser Parameter schränkt die Art des zu suchenden Elements ein. Die Art des zu suchenden Elements muss angegeben werden. Dabei steht f für eine Datei, d für ein Verzeichnis und l für einen Verweis.
- -user
- Es werden nur Dateien angezeigt, die dem spezifizierten Benutzer gehören.
- -group
- Es werden nur Dateien angezeigt, die einer spezifizierten Gruppe gehören.
- -size
- Es werden nur Dateien angezeigt, die eine gewisse Größe haben. Sollte die angegebene Zahl den Suffix c haben, so bezeichnet die Zahl die Anzahl an Bytes. Ansonsten wird die Blockanzahl spezifiziert.
- -maxdepth
- Dieser Parameter gibt an, wie tief im Dateisystem gesucht werden soll. So bedeutet -maxdepth 1 nur die Suche im aktuellen Ordner.
- -readable -writeable -executable
- Diese Tests prüfen, ob die Dateien vom aktuellen Benutzer gelesen, beschrieben oder ausgeführt werden dürfen.
- -not
- Damit kann ein nachfolgender Test invertiert werden.
- Die gefundenen Dateien werden auf der Konsole angezeigt. Jede Datei steht in einer neuen Zeile.
- -print0
- Die Dateien werden auf der Konsole angezeigt. Anders als bei der vorhergehenden Option werden die Dateinamen durch ein Zeichen mit dem Zahlenwert 0 getrennt.
- -ls
- Es wird auf die gefundenen Dateien das Programm ls -dils angewandt.
- -exec ... \;
- Damit ist es möglich, beliebige Befehle auf die gefundenen Dateien anzuwenden. Der Befehl wird auf jede Datei einzeln angewandt. Dabei wird {} an jener Stelle geschrieben, wo der Name der aktuellen Datei stehen soll und vom Befehl automatisch ersetzt.
- -exec ... \+
- Damit ist es möglich, beliebige Befehle auf die gefundenen Dateien anzuwenden. Der Befehl wird auf alle gefundenen Dateien angewandt. Dabei wird {} an jener Stelle geschrieben, wo der Name der aktuellen Datei stehen soll und vom Befehl automatisch ersetzt.
level0@ctf:~$ find / -maxdepth 1 -executable -type f -ls -exec file '{}' \;
1706606 0 -rwxr-xr-x 1 root root 0 Sep 13 09:15 /.dockerenv
/.dockerenv: empty
918842 4 -rwxrwxr-x 1 root root 129 Jun 4 11:10 /entrypoint.sh
/entrypoint.sh: Bourne-Again shell script, ASCII text executable
level0@ctf:~$ find / -maxdepth 1 -executable -type f -ls -exec file '{}' \+
1706606 0 -rwxr-xr-x 1 root root 0 Sep 13 09:15 /.dockerenv
918842 4 -rwxrwxr-x 1 root root 129 Jun 4 11:10 /entrypoint.sh
/.dockerenv: empty
/entrypoint.sh: Bourne-Again shell script, ASCII text executable
level0@ctf:~$ find / -maxdepth 1 -name '*.sh' -ls -exec file '{}' \;
918842 4 -rwxrwxr-x 1 root root 129 Jun 4 11:10 /entrypoint.sh
/entrypoint.sh: Bourne-Again shell script, ASCII text executable
level0@ctf:~$ find / -maxdepth 2 -type f -size 0c -executable -ls
find: '/root': Permission denied
find: '/tmp': Permission denied
1706606 0 -rwxr-xr-x 1 root root 0 Sep 13 09:15 /.dockerenv
level0@ctf:~$ find / -maxdepth 2 -type f -size 0c -executable -ls 2>/dev/null
1706606 0 -rwxr-xr-x 1 root root 0 Sep 13 09:15 /.dockerenv
Dateien bearbeiten
Es gibt eine Vielzahl an Möglichkeiten Dateien auf einem Linux-System zu bearbeiten. Zwei der gängigeren Programme sind Vim, welches so gut wie überall zumindest in der Version vim.tiny installiert ist, und nano. Eine Online-Anleitung zu Vim finden Sie HIER und HIER. Alternativ können Sie den Befehl vimtutor verwenden. Das Bearbeiten von Dateien ist nicht Teil der Übung.
Übung
Bei der Übung müssen Sie sich auf einem entfernten Computer einloggen und zehn Level absolvieren. Ziel jedes Levels ist es, das Passwort für das nächste Level zu finden. Sie bekommen dabei in der Übungsanleitung und auf dieser Seite Hinweise, wie das nächste Passwort gefunden werden kann. Sobald Sie im Home-Directory eine Datei namens data.txt mit dem Inhalt Congratulations, you are done finden, haben Sie alle Level absolviert.
Ziel dieser Übung ist es, den Umgang mit einer Linux-Umgebung zu erlernen. Dabei lernen Sie:- Ausgabe von Dateien
- Gezieltes Suchen
Anwendung
Der Zugang zu dieser Onlineübung erfolgt über SSH. Dabei kann jeder beliebige SSH-Client verwendet werden. Für Windows-Benutzer empfiehlt sich PuTTY. Für Linux-Benutzer empfiehlt sich der openssh-client. Dieser kann über die Paketverwaltung installiert werden. Es können maximal 20 Personen gleichzeitig auf diese Übung zugreifen. Nach 10 Minuten Inaktivität wird das Spiel automatisch beendet.
In Level 0
Folgende Informationen benötigen Sie um auf die Übung zugreifen zu können:
- Host: engine.ie.technikum-wien.at
- Port: 4841
- Benutzername Level 0: level0
- Passwort Level 0: level0
In Level 1
Das Passwort ist in einer Datei namens readme im Heimat-Verzeichnis des Benutzers.
Mit dem in der Datei abgespeicherten Passwort ist es möglich, das nächste Level zu erreichen.
Jedes mal, wenn ein Passwort für ein Level gefunden wird, muss das Programm ssh verwendet werden, um das nächste Level zu erreichen.
Die anderen Level sind nicht von außerhalb zugänglich, sondern können nur über die Adresse localhost erreicht werden.
Damit können Sie den folgenden Befehl verwenden, um sich auf Level 1 einzuloggen: ssh level1@localhost.
Hilfreiche Befehle: ls, cd, cat, file, du, find
In Level 2
Das Passwort ist in einer Datei namens - zu finden.
Diese Datei befindet sich im Heimat-Verzeichnis des Benutzers.
Hinweis: Das Argument - bedeutet bei vielen Programmen, dass die Optionen Enden, und nur noch Argumente kommen.
Überlegen Sie, ob Ihnen das Dateisystem helfen kann, damit Sie nicht nur den einzelnen Bindestrich angeben müssen.
Hilfreiche Befehle: ls, cd, cat, file, du, find
In Level 3
Das Passwort des nächsten Levels ist in einer Datei mit dem Namen spaces in this filename.
Hilfreiche Befehle: ls, cd, cat, file, du, find
In Level 4
Das Passwort ist in einer versteckten Datei im Verzeichnis inhere.
Hilfreiche Befehle: ls, cd, cat, file, du, find
In Level 5
Das Passwort ist die einzig lesbare (reiner ASCII-Text) Datei im inhere Verzeichnis.
Sollten Sie das Terminal durch die Ausgabe der nicht lesbaren Dateien soweit verändert haben, dass Sie nicht damit arbeiten können, verwenden Sie den reset-Befehl um es wieder funktionstüchtig zu bekommen.
Hilfreiche Befehle: ls, cd, cat, file, du, find
In Level 6
Das Passwort ist irgendwo im inhere Verzeichnis und besitzt folgende Eigenschaften:
- ASCII-Text
- 41 bytes groß
- nicht ausführbar
In Level 7
Das Passwort ist in einer Datei irgendwo auf dem Server und hat die folgenden Eigenschaften:
- Besitzer: level7
- Gruppe: level6
Achtung! Beim Lösen dieses Levels kann es zu Unix-Fehlermeldungen kommen. Überlegen Sie deshalb, wie Sie die Fehlermeldungen umgehen können. Um die Suchzeit zu verringern, empfiehlt es sich außerdem, nicht die gesamte Ordnerstruktur des Servers zu durchsuchen, sondern eine maximale Tiefe von 6 zu verwenden.
In Level 8
Das Passwort ist in der Datei data.txt neben dem Wort million.
Hilfreiche Befehle: grep, sort, uniq, strings, base64
In Level 9
Das Passwort ist in der Datei data.txt die einzige einmalig vorkommende Zeile.
Hilfreiche Befehle: grep, sort, uniq, strings, base64
In Level 10
Das Passwort ist in der Datei data.txt als base64 kodierter Text abgelegt.
Hilfreiche Befehle: grep, sort, uniq, strings, base64
Reflexion
Nach der Durchführung der Onlineübung sind Sie in der Lage, die Linux-Befehlszeile zu verwenden.
Sie haben gesehen, wie man Dateien finden und anzeigen kann.
Ebenso haben Sie gelernt, wie man verschiedene Programme ausführen kann.
Damit haben Sie die Grundlagen zum Interagieren mit der Befehlszeile kennen gelernt.
Selbstevaluierung
Nachfolgend werden Fragen angezeigt, die Sie nach erfolgreicher Absolvierung der Onlineübung beantworten können. Die Lösung kann durch Klicken auf die Frage angezeigt werden.
Wie lautet der Code, um sich mit einem externen Server zu verbinden?
ssh USER@SERVER -p PORT
Wie lautet der Befehl um auch versteckte Inhalte eines beestimmten Verzeichnisses anzuzgein?
ls PATH -a
Wozu wird das Attribut -exec beim Programm find verwendet?
Dieses Attribut ermöglicht es, auf gefundene Dateien weitere Befehle anzuwenden.
Welchen Befehl verwenden Sie um die Anzahl der Zeilen einer Datei zu ermitteln?
file PATH/FILENAME -l
Wozu wird das Programm grep verwendet?
Das Programm dient zum Suchen von Begriffen in Dateien.
Welche Informationen beinhaltet die Befehlszeile PARAM1@PARAM2:~$?
Die ersten beiden Elemente zeigen an, dass sich der Benutzer PARAM1 am Rechner PARAM2 befindet. Die beiden Informationen sind durch das @ Symbol getrennt. Zusätzlich wird der aktuelle Pfad des aktuellen Verzeichnisses nach dem : Symbol angezeigt, wobei ~$ für das Heimatverzeichnis steht.
Take-Home-Messages
- ssh Programm zum Verbinden mit einem externen Rechner
- ls zum Anzeigen des Ordnerinhaltes
- cd um den Ordner zu wechseln
- cat um Dateien auszugeben
- find um nach Dateien und Ordnern zu suchen
- file zum Analysieren einer Datei
- sort um den Inhalt einer Datei zu sortieren
Links und Literaur
Hier finden Sie eine Zusammenfassung der verlinkten Literatur.
- download PuTTY
- openSSH-Installationsanleitung unter Windows
- openSSH unter Linux/MacOS
- openSSH für mobile Geräte
- BASH-Grundkurs
- fortgeschrittener BASH-Guide
- Erklärung kompletter BASH-Befehle
- Erklärung der Zugriffsrechte
- Erklärung Socket (=)
- Erklärung Door (>)
- Erklärung Verlinkung (@)
- Erklärung Pipe (|)
- Verwendung des Befehls diff
- Attribute des Befehls sort
- Tutorial für den Befehl vim
- Verwendung des Befehls vim
Weiterführende Themengebiete
Redirects
Dabei wird die Ein- und/oder Ausgabe in Dateien umgeleitet.Pipes
Dabei wird der Output eines Programms zum Input eines anderen Programmes.Scripting
Ein Shell-Script ist eine Abfolge von Befehlen, die ausgeführt werden sollen. Um komplexere Shell-Scripts zu erstellen, fehlen jedoch noch verschiedene Komponenten. Diese sind unter anderem:- Verzweigungen
- Schleifen
- Variablen
- Das Programm sed
systemd
Damit können Services erstellt werden. Services sind Programme, die bei Systemstart gestartet werden und bestimmte Aufgaben übernehmen.