
स्व-होस्टेड निष्क्रिय उपडोमेन निरंतर निगरानी उपकरण।
सतत आक्रमण सतह प्रबंधन के लिए तेज़ और उपयोगकर्ता-अनुकूल सबडोमेन निगरानी उपकरण।

sub.Monitor को क्यों चुनें? यह प्रोग्राम SQLite का उपयोग करके सभी पहचाने गए डोमेन को संग्रहीत करने के कारण आसान सेटअप प्रदान करता है (पूर्व डेटाबेस प्रबंधन की आवश्यकता को समाप्त करता है)। इसके अलावा, यह अत्यधिक अनुकूलन योग्य है, जिसमें उपयोगकर्ताओं को अपने चुने हुए उपकरणों का उपयोग करके स्क्रिप्ट में कोड की केवल कुछ पंक्तियाँ जोड़नी होती हैं। MySQL या MongoDB जैसे डेटाबेस पर निर्भर अन्य मौजूदा समाधानों के विपरीत, स्क्रिप्ट को आरंभ करना एक थकाऊ कार्य हो सकता है।
sub.Monitor फ़्लैग्स:
options:
--add ADD Domain to scan
--out-scope OUT_SCOPE
File with out-of-scope domains
--file FILE File with known subdomains
-D DOMAIN, --domain DOMAIN
Domain to scan
-H HOURS, --hours HOURS
Hours between scans
--dump Dump all subdomains for a specific domain
--list List all root domains in the database
-df DF File with domains to scan
--inscope Dump only in-scope domains
--notinscope Dump only out-of-scope domains
--dumpall Dump all subdomains with their details
--info Show discovery date for subdomains
-help, -? Show this help message and exit
आपको config.ini फ़ाइल में कॉन्फ़िगरेशन (एपीआई) पथ फ़ाइलें लिखनी होंगी।
pip3 install -r requirements.txt चलाएँ।आप स्क्रिप्ट में अपने स्वयं के उपकरणों को आसानी से लागू कर सकते हैं, बस कोड की पंक्तियों को संशोधित करें:
def run_tool(tool, domain, output_file):
print(f'[{datetime.datetime.now()}] - Running {tool} on {domain}')
if tool == 'assetfinder':
assetfinder_binary = config.get('Binary paths', 'assetfinder')
cmd = f'echo {domain} | {assetfinder_binary} -subs-only | grep -E "{domain}$" |grep -v "*" | grep -v "@"'
elif tool == 'subfinder':
subfinder_binary = config.get('Binary paths', 'subfinder')
subfinder_api = config.get('Api', 'subfinder_api')
cmd = f'{subfinder_binary} -d {domain} -silent -pc {subfinder_api} -all'
elif tool == 'amass':
amass_binary = config.get('Binary paths', 'amass')
amass_api = config.get('Api', 'amass_api')
cmd = f'{amass_binary} enum -passive -norecursive -noalts -d {domain} -config {amass_api}'
elif tool == 'my-custom-tool':
my-custom-tool-binary = config.get('Binary paths', 'my-custom-tool-binary-or-script')
cmd = f'{my-custom-tool-binary} -d {domain}'
यह ध्यान रखना महत्वपूर्ण है कि यदि आप कोई कस्टम टूल जोड़ते हैं, तो अंतिम आउटपुट डोमेन परिणाम होना चाहिए ताकि sub.Monitor उन्हें डेटाबेस में सहेज सके, उदाहरण के लिए इसका उपयोग करने का तरीका होगा:
cmd = f'bash customtool.sh {domain}''
...
cat customtool.sh
mycustomtool -d $1 > /tmp/$1.txt &>/dev/null; cat /tmp/$1.txt | unfurl domains | anew; rm -r /tmp/$1.txt
अपने टूल का नाम यहाँ भी जोड़ें:
for tool in ['subfinder', 'amass', 'assetfinder', 'my-custom-tool-name']:
run_tool(tool, domain, output_file)
अंत में, निश्चित रूप से, आपको उस टूल को sub.monitor-config.ini फ़ाइल में जोड़ना होगा ताकि पायथन स्क्रिप्ट उस कॉन्फ़िगरेशन फ़ाइल से बाइनरी प्राप्त कर सके।
केवल एक चीज़ की आवश्यकता है कि कमांड समाप्त होने के बाद, आउटपुट पर सभी खोजे गए डोमेन दिखाई देने चाहिए ताकि टूल उन्हें लॉग फ़ाइल और डेटाबेस के अंदर सहेज सके।
सबसे पहले sub.Monitor को पहले से स्कैन किए गए डोमेन की एक सूची चाहिए:
➜ cat ibm_sorted_subdomains.txt
test1.ibm.com
test2.ibm.com
test3.ibm.com
subtest.testX.ibm.com
...
अब, सबडोमेन वाली फ़ाइल को निम्न कमांड के साथ sub.Monitor में पास किया जा सकता है:
python3 monitor.py --add ibm.com --file ibm_sorted_subdomains.txt
_ ___ ___ _ _
| | | \/ | (_) |
___ _ _| |__ | . . | ___ _ __ _| |_ ___ _ __
/ __| | | | '_ \| |\/| |/ _ \| '_ \| | __/ _ \| '__|
\__ \ |_| | |_) | | | | (_) | | | | | || (_) | |
|___/\__,_|_.__/\_| |_/\___/|_| |_|_|\__\___/|_|
github.com/e1abrador/sub.Monitor
[2023-06-06 18:16:26.002521] - 538 subdomains were added to the local database.
आउट-ऑफ-स्कोप फ़्लैग जोड़ने की भी संभावना है, उदाहरण के लिए, मान लें कि एक बग बाउंटी प्रोग्राम में निम्नलिखित नीति है:
*.ibm.com - in scope
super-admin.ibm.com - out of scope
*.super-admin.ibm.com - out of scope
इस सामग्री के साथ एक फ़ाइल बनाना संभव है:
cat outscope.txt
super-admin.ibm.com
*.super-admin.ibm.com
अब, आप मैन्युअल रूप से अपने सभी खोजे गए डोमेन को डेटाबेस में जोड़ सकते हैं (जो स्कोप में हैं उन्हें फ़िल्टर करके):
python3 monitor.py --add ibm.com --file ibm_sorted_subdomains.txt --out-scope outscope.txt
_ ___ ___ _ _
| | | \/ | (_) |
___ _ _| |__ | . . | ___ _ __ _| |_ ___ _ __
/ __| | | | '_ \| |\/| |/ _ \| '_ \| | __/ _ \| '__|
\__ \ |_| | |_) | | | | (_) | | | | | || (_) | |
|___/\__,_|_.__/\_| |_/\___/|_| |_|_|\__\___/|_|
github.com/e1abrador/sub.Monitor
[2023-06-06 18:16:26.002521] - 538 subdomains were added to the local database.
यह आपके सभी सबडोमेन को डेटाबेस में जोड़ देगा, लेकिन यह उन सभी को जो स्कोप से बाहर हैं, उन्हें [Out of scope] फ़्लैग से चिह्नित करेगा (हम डंपिंग डोमेन अनुभाग में डेटाबेस से इन-स्कोप डोमेन को फ़िल्टर करने का तरीका देखेंगे)।
यह पुष्टि करने के लिए कि डोमेन डेटाबेस में जोड़ा गया है, निष्पादित करें:
python3 monitor.py --list
_ ___ ___ _ _
| | | \/ | (_) |
___ _ _| |__ | . . | ___ _ __ _| |_ ___ _ __
/ __| | | | '_ \| |\/| |/ _ \| '_ \| | __/ _ \| '__|
\__ \ |_| | |_) | | | | (_) | | | | | || (_) | |
|___/\__,_|_.__/\_| |_/\___/|_| |_|_|\__\___/|_|
github.com/e1abrador/sub.Monitor
ibm.com [9 subdomains added manually] [2 subdomains discovered] [11 total unique in database]
एक बार यह सही ढंग से लोड हो जाने पर, निगरानी प्रक्रिया शुरू हो सकती है। VPS में TMUX का उपयोग करने और इसे लंबे समय तक चलने देने की अनुशंसा की जाती है। निम्नलिखित कमांड के साथ, स्क्रिप्ट सबडोमेन एन्यूमरेशन टूल्स चलाएगी और नए परिणामों की तुलना पुराने परिणामों से करेगी। यदि कोई नया सबडोमेन मिलता है, तो sub.Monitor पहले इसे स्थानीय डेटाबेस में जोड़ेगा (ताकि वह उस खोज के बारे में फिर से सूचित न करे) और फिर स्लैक/टेलीग्राम/डिस्कॉर्ड के माध्यम से उपयोगकर्ता को सूचित करेगा।
python3 monitor.py -D ibm.com -H 12 --out-scope outscope.txt
यदि कोई सबडोमेन मिलता है, तो sub.Monitor आउटपुट पर निम्न संदेश दिखाएगा:
➜ python3 monitor.py -D ibm.com -H 8 # To filter the subdomains that are in the current scope from the out-scope ones, you can use:
# python3 monitor.py -D ibm.com -H 8 --out-scope outscope.txt
_ ___ ___ _ _
| | | \/ | (_) |
___ _ _| |__ | . . | ___ _ __ _| |_ ___ _ __
/ __| | | | '_ \| |\/| |/ _ \| '_ \| | __/ _ \| '__|
\__ \ |_| | |_) | | | | (_) | | | | | || (_) | |
|___/\__,_|_.__/\_| |_/\___/|_| |_|_|\__\___/|_|
github.com/e1abrador/sub.Monitor
[2023-06-06 18:07:25.191169] - New subdomain xxxx.ibm.com discovered
[2023-06-06 18:07:25.353156] - New subdomain xyxyxyxyxyx.ibm.com discovered
[2023-06-06 18:07:25.641082] - New subdomain x1.xxxx.ibm.com discovered
निम्न कमांड के साथ 1 से अधिक डोमेन की निगरानी करना भी संभव है:
python3 monitor.py -df root-domains.txt -H 8
python3 monitor.py -df roots.txt -H 8 --out-scope outscope.txt
उन संदेशों की रिपोर्ट होने के बाद, उसी समय उपयोगकर्ता को टेलीग्राम पर सूचनाएं प्राप्त होंगी

मैं सूचनाओं को कैसे प्रबंधित करूं? मैंने डिस्कॉर्ड के साथ सभी नव खोजे गए डोमेन को देखने का एक काफी आसान (और प्रबंधित करने में आसान) तरीका पाया। मुझे यह मिला (धुंधला किया गया क्योंकि ये सभी निजी प्रोग्राम हैं):

विचार यह है कि पहले प्रोग्राम नाम के संबंध में एक श्रेणी बनाएं:
Yahoo
--- yahoo.com
--- yahoo.net
--- etc ...
IBM
--- ibm.com
--- whateverdomain.com
--- etc ...
मेरी notify कॉन्फ़िग फ़ाइल ऐसी दिखती है:

मैं प्रत्येक डोमेन के लिए ऐसा करने की सलाह देता हूं (इसे सेट करना काफी कठिन हो सकता है लेकिन परिणामों को प्रबंधित करने का यह एक शानदार तरीका है)। monitor.py स्क्रिप्ट आईडी के आधार पर दिए गए वेबहुक को परिणाम भेजेगी (जो स्कैन किए जाने वाले डोमेन नाम के समान होना चाहिए)।
मान लें कि स्क्रिप्ट 2 महीनों से चल रही है और आप सभी परिणाम (पुराने सबडोमेन और नए खोजे गए) प्राप्त करना चाहते हैं। sub.Monitor के साथ --dump फ़्लैग का उपयोग करके यह संभव है:
python3 monitor.py -D ibm.com --dump
_ ___ ___ _ _
| | | \/ | (_) |
___ _ _| |__ | . . | ___ _ __ _| |_ ___ _ __
/ __| | | | '_ \| |\/| |/ _ \| '_ \| | __/ _ \| '__|
\__ \ |_| | |_) | | | | (_) | | | | | || (_) | |
|___/\__,_|_.__/\_| |_/\___/|_| |_|_|\__\___/|_|
github.com/e1abrador/sub.Monitor
Subdomains for ibm.com:
subdomain1.ibm.com
subdomain2.ibm.com
...
आप उस दिन को देखने के लिए निम्न कमांड का उपयोग कर सकते हैं जिस दिन डोमेन की खोज की गई थी:
python3 monitor.py -D ibm.com --dump --info
_ ___ ___ _ _
| | | \/ | (_) |
___ _ _| |__ | . . | ___ _ __ _| |_ ___ _ __
/ __| | | | '_ \| |\/| |/ _ \| '_ \| | __/ _ \| '__|
\__ \ |_| | |_) | | | | (_) | | | | | || (_) | |
|___/\__,_|_.__/\_| |_/\___/|_| |_|_|\__\___/|_|
github.com/e1abrador/sub.Monitor
Subdomains for ibm.com:
test.ibm.com [discovered on 06/08/2023]
test2.ibm.com [discovered on 08/08/2023] [Out of scope]
चूंकि python3 monitor.py -d ibm.com --dump --info कमांड का उपयोग करके कुछ डोमेन को स्कोप से बाहर चिह्नित किए जाने की अत्यधिक संभावना है, केवल स्कोप में डोमेन दिखाने के लिए --inscope फ़्लैग का उपयोग करना संभव है:
python3 monitor.py -D ibm.com --dump --info --inscope
_ ___ ___ _ _
| | | \/ | (_) |
___ _ _| |__ | . . | ___ _ __ _| |_ ___ _ __
/ __| | | | '_ \| |\/| |/ _ \| '_ \| | __/ _ \| '__|
\__ \ |_| | |_) | | | | (_) | | | | | || (_) | |
|___/\__,_|_.__/\_| |_/\___/|_| |_|_|\__\___/|_|
github.com/e1abrador/sub.Monitor
Subdomains for ibm.com:
test.ibm.com [discovered on 06/08/2023]
test3.ibm.com [discovered on 08/08/2023]
धन्यवाद:
यदि आपके पास किसी नई कार्यक्षमता का कोई विचार है तो https://github.com/e1abrador/sub.Monitor/pulls पर PR खोलें।
शुभकामनाएँ और शुभ शिकार! यदि आप वास्तव में इस टूल (या किसी अन्य) से प्यार करते हैं, या इसने आपको एक शानदार बाउंटी खोजने में मदद की, तो मुझे कॉफ़ी खरीदने पर विचार करें! ☕ (मैं कैफीन का उपयोग कर सकता हूँ!)
⚪ e1abrador
Twitter: https://twitter.com/e1abrador