
Outil auto-hébergé de surveillance passive continue des sous-domaines.
Outil de surveillance de sous-domaines rapide et convivial pour une gestion continue de la surface d'attaque.

Pourquoi opter pour sub.Monitor ? Ce programme offre une installation facile grâce à l'utilisation de SQLite pour stocker tous les domaines identifiés (supprimant la nécessité d'une gestion préalable de la base de données). De plus, il est hautement personnalisable, les utilisateurs n'ayant besoin d'ajouter que quelques lignes de code au script en utilisant leurs outils choisis. Contrairement à d'autres solutions existantes reposant sur des bases de données telles que MySQL ou MongoDB, l'initialisation du script peut devenir une tâche fastidieuse.
Indicateurs sub.Monitor :
options:
--add ADD Domaine à analyser
--out-scope OUT_SCOPE
Fichier avec les domaines hors périmètre
--file FILE Fichier avec les sous-domaines connus
-D DOMAIN, --domain DOMAIN
Domaine à analyser
-H HOURS, --hours HOURS
Heures entre les analyses
--dump Vider tous les sous-domaines pour un domaine spécifique
--list Lister tous les domaines racine dans la base de données
-df DF Fichier avec les domaines à analyser
--inscope Vider uniquement les domaines dans le périmètre
--notinscope Vider uniquement les domaines hors périmètre
--dumpall Vider tous les sous-domaines avec leurs détails
--info Afficher la date de découverte des sous-domaines
-help, -? Afficher ce message d'aide et quitter
Vous devez écrire les chemins des fichiers de configuration (api) dans le fichier config.ini.
pip3 install -r requirements.txtVous pouvez facilement implémenter vos propres outils dans le script, modifiez simplement les lignes de code :
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}'
Il est important de noter que si vous ajoutez un outil personnalisé, la dernière sortie doit être les résultats du domaine afin que sub.Monitor les enregistre dans la base de données. Par exemple, la manière de l'utiliser serait :
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
Ajoutez également le nom de votre outil ici :
for tool in ['subfinder', 'amass', 'assetfinder', 'my-custom-tool-name']:
run_tool(tool, domain, output_file)
Enfin, bien sûr, vous devez ajouter l'outil dans le fichier sub.monitor-config.ini pour que le script python puisse obtenir le binaire à partir de ce fichier de configuration.
La seule chose nécessaire est qu'une fois la commande terminée, elle doit afficher en sortie tous les domaines découverts afin que l'outil puisse les enregistrer dans le fichier de logs et dans la base de données.
Tout d'abord, sub.Monitor a besoin d'une liste de domaines déjà scannés :
➜ cat ibm_sorted_subdomains.txt
test1.ibm.com
test2.ibm.com
test3.ibm.com
subtest.testX.ibm.com
...
Maintenant, le fichier contenant les sous-domaines peut être passé à sub.Monitor avec la commande suivante :
python3 monitor.py --add ibm.com --file ibm_sorted_subdomains.txt
_ ___ ___ _ _
| | | \/ | (_) |
___ _ _| |__ | . . | ___ _ __ _| |_ ___ _ __
/ __| | | | '_ \| |\/| |/ _ \| '_ \| | __/ _ \| '__|
\__ \ |_| | |_) | | | | (_) | | | | | || (_) | |
|___/\__,_|_.__/\_| |_/\___/|_| |_|_|\__\___/|_|
github.com/e1abrador/sub.Monitor
[2023-06-06 18:16:26.002521] - 538 sous-domaines ont été ajoutés à la base de données locale.
Il est également possible d'ajouter un indicateur hors périmètre. Par exemple, disons qu'un programme de Bug Bounty a la politique suivante :
*.ibm.com - dans le périmètre
super-admin.ibm.com - hors périmètre
*.super-admin.ibm.com - hors périmètre
Il est possible de créer un fichier avec ces éléments :
cat outscope.txt
super-admin.ibm.com
*.super-admin.ibm.com
Maintenant, vous pouvez ajouter manuellement tous vos domaines découverts à la base de données (en filtrant ceux qui sont dans le périmètre) :
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 sous-domaines ont été ajoutés à la base de données locale.
Cela ajoutera tous vos sous-domaines à la base de données, mais marquera ceux qui sont hors périmètre avec le drapeau [Hors périmètre] (nous verrons comment filtrer les domaines dans le périmètre depuis la base de données dans la section de vidage des domaines).
Pour confirmer que le domaine a été ajouté à la base de données, exécutez :
python3 monitor.py --list
_ ___ ___ _ _
| | | \/ | (_) |
___ _ _| |__ | . . | ___ _ __ _| |_ ___ _ __
/ __| | | | '_ \| |\/| |/ _ \| '_ \| | __/ _ \| '__|
\__ \ |_| | |_) | | | | (_) | | | | | || (_) | |
|___/\__,_|_.__/\_| |_/\___/|_| |_|_|\__\___/|_|
github.com/e1abrador/sub.Monitor
ibm.com [9 sous-domaines ajoutés manuellement] [2 sous-domaines découverts] [11 uniques totaux dans la base de données]