
Un outil avancé de scan de répertoires et de fichiers web, plus puissant que DirBuster, Dirsearch, cansina et Yu Jian.
Un outil avancé de scan de répertoires web, dont les fonctionnalités surpasseront DirBuster, Dirsearch, cansina, et Yujian.

Après de nombreuses recherches, un bon outil de scan de répertoires web doit au moins posséder les fonctionnalités suivantes :
Voyons maintenant les caractéristiques de Dirmap.
git clone https://github.com/H4ckForJob/dirmap.git && cd dirmap && python3 -m pip install -r requirement.txt
Cible unique, par défaut http
python3 dirmap.py -i https://target.com -lcf
python3 dirmap.py -i 192.168.1.1 -lcf
Sous-réseau (format CIDR)
python3 dirmap.py -i 192.168.1.0/24 -lcf
Plage réseau
python3 dirmap.py -i 192.168.1.1-192.168.1.100 -lcf
python3 dirmap.py -iF targets.txt -lcf
targets.txt prend en charge les formats ci-dessus.
output à la racine du projet.nom_de_domaine_cible.txt.Personnalisez la configuration de Dirmap et explorez les fonctionnalités avancées.
Pour l'instant, la configuration détaillée se fait via un fichier de configuration, les paramètres de ligne de commande ne sont pas supportés pour une configuration détaillée !
Modifiez dirmap.conf à la racine du projet pour la configuration.
Explication détaillée de dirmap.conf
# Configuration du scan récursif
[RecursiveScan]
# Activer/désactiver le scan récursif : 0=désactivé, 1=activé
conf.recursive_scan = 0
# Codes d'état déclenchant le scan récursif. Par défaut [301,403]
conf.recursive_status_code = [301,403]
# Longueur maximale de l'URL au-delà de laquelle le scan est arrêté
conf.recursive_scan_max_url_length = 60
# Extensions à exclure du scan récursif
conf.recursive_blacklist_exts = ["html",'htm','shtml','png','jpg','webp','bmp','js','css','pdf','ini','mp3','mp4']
# Répertoires à exclure du scan. Par défaut vide. Exemple : ['/test1','/test2']
#conf.exclude_subdirs = ['/test1','/test2']
conf.exclude_subdirs = ""
# Configuration du mode de scan (4 modes, un seul choix à la fois)
[ScanModeHandler]
# Mode dictionnaire : 0=désactivé, 1=dictionnaire unique, 2=multi-dictionnaires
conf.dict_mode = 1
# Chemin du dictionnaire unique
conf.dict_mode_load_single_dict = "dict_mode_dict.txt"
# Chemin des dictionnaires multiples, par défaut dictmult
conf.dict_mode_load_mult_dict = "dictmult"
# Mode force brute : 0=désactivé, 1=activé
conf.blast_mode = 0
# Longueur minimale du dictionnaire généré. Par défaut 3
conf.blast_mode_min = 3
# Longueur maximale du dictionnaire généré. Par défaut 3
conf.blast_mode_max = 3
# Jeu de caractères par défaut : a-z. Non utilisé pour l'instant.
conf.blast_mode_az = "abcdefghijklmnopqrstuvwxyz"
# Jeu de caractères par défaut : 0-9. Non utilisé pour l'instant.
conf.blast_mode_num = "0123456789"
# Jeu de caractères personnalisé. Par défaut "abc". Construit le dictionnaire avec abc.
conf.blast_mode_custom_charset = "abc"
# Jeu de caractères de reprise. Par défaut vide.
conf.blast_mode_resume_charset = ""
# Mode crawler : 0=désactivé, 1=activé
conf.crawl_mode = 0
# Dictionnaire des suffixes pour le fuzz dynamique
conf.crawl_mode_dynamic_fuzz_suffix = "crawl_mode_suffix.txt"
# Analyse du fichier robots.txt. Non implémenté.
conf.crawl_mode_parse_robots = 0
# Expression XPath pour analyser le HTML
conf.crawl_mode_parse_html = "//*/@href | //*/@src | //form/@action"
# Activer la génération dynamique du dictionnaire via le crawler. Par défaut 1 (activé). Autres : 0=désactivé, 1=activé
conf.crawl_mode_dynamic_fuzz = 1
# Mode Fuzz : 0=désactivé, 1=dictionnaire unique, 2=multi-dictionnaires
conf.fuzz_mode = 0
# Chemin du dictionnaire unique pour le fuzz.
conf.fuzz_mode_load_single_dict = "fuzz_mode_dir.txt"
# Chemin des dictionnaires multiples pour le fuzz. Par défaut : fuzzmult
conf.fuzz_mode_load_mult_dict = "fuzzmult"
# Étiquette pour le fuzz. Par défaut {dir}. Utilise {dir} comme point d'insertion du dictionnaire, remplace http://target.com/{dir}.php par chaque ligne du dictionnaire. Autre exemple : {ext}
#conf.fuzz_mode_label = "{ext}"
conf.fuzz_mode_label = "{dir}"
# Configuration du traitement des charges utiles. Non implémenté.
[PayloadHandler]
# Configuration des requêtes
[RequestHandler]
# En-têtes personnalisés. Par défaut vide. Exemple : test1=test1,test2=test2
#conf.request_headers = "test1=test1,test2=test2"
conf.request_headers = ""
# User-Agent personnalisé. Par défaut Chrome.
conf.request_header_ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
# Cookie personnalisé. Par défaut vide. Exemple : cookie1=cookie1; cookie2=cookie2;
#conf.request_header_cookie = "cookie1=cookie1; cookie2=cookie2"
conf.request_header_cookie = ""
# Authentification 401 personnalisée. Non implémenté (l'en-tête personnalisé peut suffire).
conf.request_header_401_auth = ""
# Méthode de requête personnalisée. Par défaut get. Autres : get, head
#conf.request_method = "head"
conf.request_method = "get"
# Délai d'expiration par requête. Par défaut 3 secondes.
conf.request_timeout = 3
# Délai aléatoire (0-x) secondes avant chaque requête. Doit être un entier. Par défaut 0 (pas de délai).
conf.request_delay = 0
# Nombre de threads par cible. Par défaut 30.
conf.request_limit = 30
# Nombre maximal de tentatives. Non implémenté.
conf.request_max_retries = 1
# Connexion persistante. Utiliser session(). Non implémenté.
conf.request_persistent_connect = 0
# Redirection 302. Par défaut False (pas de redirection). Autres : True, False
conf.redirection_302 = False
# Extension ajoutée après la charge utile. Par défaut vide. Exemples : txt, php, asp, jsp
#conf.file_extension = "txt"
conf.file_extension = ""
# Configuration du traitement des réponses
[ResponseHandler]
# Codes d'état à enregistrer. Par défaut [200]. Autres exemples : [200,403,301]
#conf.response_status_code = [200,403,301]
conf.response_status_code = [200]
# Enregistrer l'en-tête content-type. Par défaut 1 (oui)
#conf.response_header_content_type = 0
conf.response_header_content_type = 1
# Enregistrer la taille de la page. Par défaut 1 (oui)
#conf.response_size = 0
conf.response_size = 1
# Détection automatique des pages 404. Par défaut True. Autres : True, False
#conf.auto_check_404_page = False
conf.auto_check_404_page = True
# Expression régulière personnalisée pour la page 503. Non implémenté.
#conf.custom_503_page = "page 503"
conf.custom_503_page = ""
# Expression régulière personnalisée pour le contenu de la page
#conf.custom_response_page = "([0-9]){3}([a-z]){3}test"
conf.custom_response_page = ""
# Ignorer les pages d'une taille donnée. Pour ne pas ignorer, mettre "None". Par défaut "None". Exemples : None, 0b, 1k, 1m
#conf.skip_size = "0b"
conf.skip_size = "None"
# Options de proxy
[ProxyHandler]
# Configuration du proxy. Par défaut "None" (pas de proxy). Exemple : {"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
#conf.proxy_server = {"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
conf.proxy_server = None
# Options de débogage
[DebugMode]
# Afficher les charges utiles et quitter
conf.debug = 0
# Options de mise à jour
[CheckUpdate]
# Vérifier les mises à jour sur GitHub. Non implémenté.
conf.update = 0
Les fichiers dictionnaires se trouvent dans le dossier data à la racine du projet.
bar.log.start(). Solution : installez progressbar2. Désinstallez progressbar pour éviter les conflits de modules. Merci à un collègue de l'avoir signalé.Exécutez :
python3 -m pip uninstall progressbar
python3 -m pip install progressbar2
Lors de la rédaction de dirmap, de nombreux modèles et idées de projets open source exceptionnels ont été empruntés. Nous tenons à les mentionner et à les remercier.
mail: [email protected]
