Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/xnl-h4ck3r/urless
ReconnaissanceCollecte d'InformationsSécurité WebTests d'IntrusionUtilitaires et Frameworks
GitHubxnl-h4ck3r/urless

urless

Filtrer et dédupliquer de grandes listes d'URL en supprimant les extensions statiques, les mots-clés indésirables, les identifiants, les variantes linguistiques et les paramètres, afin de produire des ensembles d'endpoints propres pour la reconnaissance web.

Voir le dépôt
39141il y a 5 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
urless — Filtrer et dédupliquer de grandes listes d'URL en supprimant les extensions statiques, les mots-clés indésirables, les identifiants, les variantes linguistiques et les paramètres, afin de produire des ensembles d'endpoints propres pour la reconnaissance web. | Kitploit

À propos - v2.7

Cet outil sert à désencombrer une liste d'URLs. Comme point de départ, j'ai pris l'incroyable outil uro de Somdev Sangwan. Mais je voulais changer quelques éléments, apporter quelques améliorations (comme gérer les GUID) et le rendre plus personnalisable.

Installation

urless prend en charge Python 3.

Installez urless dans l'environnement python par défaut (global).

root@kitploit:~
pip install urless

OU

root@kitploit:~
pip install git+https://github.com/xnl-h4ck3r/urless.git -v

Vous pouvez mettre à jour avec

root@kitploit:~
pip install --upgrade urless

pipx

Installation rapide dans un environnement python isolé à l'aide de pipx

root@kitploit:~
pipx install git+https://github.com/xnl-h4ck3r/urless.git

Utilisation

Que fait-il exactement ?

Vous passez en gros une liste d'URLs en entrée (depuis un fichier, ou via un pipe depuis STDIN), et vous obtenez en sortie un fichier ou des URLs désencombrés. Mais de quelle manière sont-ils désencombrés ? Je vais vous expliquer cela ci-dessous, mais d'abord voici quelques termes qui seront utilisés :

  • FILTER-EXTENSIONS : Cela fait référence à la liste des extensions qui peuvent être passées avec -fe, spécifiées avec FILTER_EXTENSIONS dans config.yml, ou si aucune de ces options n'existe, une liste par défaut de .css,.ico,.jpg,.jpeg,.png,.bmp,.svg,.img,.gif,.mp4,.flv,.ogv,.webm,.webp,.mov,.mp3,.m4a,.m4p,.scss,.tif,.tiff,.ttf,.otf,.woff,.woff2,.bmp,.ico,.eot,.htc,.rtf,.swf,.image.
  • FILTER-KEYWORDS : Cela fait référence à la liste des mots-clés qui peuvent être passés avec -fk, spécifiés avec FILTER_KEYWORDS dans config.yml, ou si aucune de ces options n'existe, une liste par défaut de blog,article,news,bootstrap,jquery,captcha,node_modules
  • LANGUAGE : Cela fait référence à la liste des codes de langue qui peuvent être spécifiés avec LANGUAGE dans config.yml, ou si elle n'existe pas, une liste par défaut des codes les plus courants en,en-us,en-gb,fr,de,pl,nl,fi,sv,it,es,pt,ru,pt-br,es-mx,zh-tw,js.ko

Voici ce qui se passe :

  • Si une URL a un port 80 ou 443 explicitement indiqué, il sera supprimé de l'URL (par ex. http://example.com:80/test -> http://example.com/test)
  • Si l'URL contient l'une des FILTER-EXTENSIONS, elle sera supprimée de la sortie.
  • Si l'URL n'a PAS de paramètres OU si l'argument -dp/--disregard-params a été passé :
    • Si l'URL contient un mot-clé de FILTER-KEYWORDS ou du UNWANTED-CONTENT, elle sera supprimée.
    • si la chaîne de requête de l'URL contient des paramètres indésirables spécifiés dans la config REMOVE_PARAMS (ou remplacés avec l'argument -rp/--remove-params), ils seront supprimés de toutes les URLs avant le traitement.
    • Si -rcid/--regex-custom-id est passé et que le chemin de l'URL contient un ID personnalisé, une seule correspondance avec la regex d'ID personnalisé sera incluse s'il y a plusieurs URLs où c'est la seule différence.
    • Si le chemin de l'URL contient un GUID, un seul des GUID sera inclus s'il y a plusieurs URLs où le GUID est la seule différence.
    • Si le chemin de l'URL contient un ID entier, un seul des ID entiers sera inclus s'il y a plusieurs URLs où l'ID entier est la seule différence.
    • Si l'argument -lang est passé et que l'URL contient un code de langue (par ex. ), un seul des codes de langue sera inclus s'il y a plusieurs URLs où le code de langue est différent.

Exemples

Utilisation de base

root@kitploit:~
cat target_urls.txt | urless

ou

root@kitploit:~
urless -i target_urls.txt

Capturer la sortie

root@kitploit:~
cat target_urls.txt | urless > output.txt

ou

root@kitploit:~
urless -i target_urls.txt -o output.txt

config.yml

Le fichier config.yml contient les clés qui peuvent être modifiées selon vos besoins :

  • FILTER_KEYWORDS - Une liste de mots-clés séparés par des virgules (par ex. blog,article,news, etc.) à laquelle les URLs sont comparées dans certaines circonstances.
  • FILTER_EXTENSIONS - Une liste d'extensions de fichiers séparées par des virgules (par ex. .css,.jpg,.jpeg, etc.) à laquelle toutes les URLs sont comparées. Si une URL inclut l'une de ces chaînes, elle sera exclue de la sortie.
  • LANGUAGE - Une liste de codes de langue séparés par des virgules (par ex. en-gb,fr,nl, etc.) à laquelle toutes les URLs sont comparées lorsque l'argument -lang est passé. S'il y a plusieurs URLs avec des codes de langue différents, une seule version de l'URL sera produite en sortie.
  • REMOVE_PARAMS - Une liste de noms de paramètres sensibles à la casse séparés par des virgules (par ex. cachebuster,cacheBuster) qui seront supprimés de toutes les URLs avant le traitement.

Regex personnalisée

Il existe actuellement des vérifications regex automatiques pour détecter un identifiant global unique (GUID) et un ID entier dans une partie du chemin, mais l'argument -rcid / --regex-custom-id vous permet de fournir une expression régulière pour identifier un ID personnalisé. Par exemple, si une cible a un format d'ID spécifique (qui n'est ni un GUID ni un entier), vous pouvez spécifier une expression regex correspondante, et alors un seul d'entre eux sera renvoyé en sortie si le reste de l'URL est identique. Par exemple :

  • Supposons que la cible utilise un ID utilisateur dans un format comme U-65241X
  • Et qu'il y ait plusieurs URLs comme celles-ci :
    root@kitploit:~
    https://target.com/blah/U-61723A/settings
    https://target.com/blah/U-63352B/settings
    https://target.com/blah/U-61351A/profile
    https://target.com/blah/U-61723A/settings
    https://target.com/blah/U-64135C/profile
    
  • Vous pouvez appeler urless et passer -rcid 'U-[0-9]{5}[A-Z]', alors la sortie serait :
    root@kitploit:~
    https://target.com/blah/U-61723A/settings
    https://target.com/blah/U-64135C/profile
    

NOTES IMPORTANTES SUR LES REGEX :

  • Écrire des expressions regex correctes peut être difficile, et si elle n'est pas correcte, vous pourriez obtenir une sortie imprévisible et incorrecte.
  • Enfermez toujours votre expression regex entre guillemets simples lorsque vous la passez à l'argument -rcid.
  • Vous n'avez pas besoin d'ajouter une regex personnalisée pour un GUID ou un ID entier - ceux-ci sont déjà gérés.
  • L'expression regex doit couvrir toute la partie du chemin. Ainsi, si votre regex n'identifie que le début du chemin, ajoutez [^(\?|\/|#|$)]* à la fin de votre regex, ce qui signifiera TOUS les autres caractères jusqu'à la fin de la partie du chemin.
  • Vous pouvez ajouter ^ au début et $ à la fin de votre regex pour vous assurer qu'elle représente toute la partie d'un chemin entre les barres obliques. Cependant, ces caractères seront ajoutés automatiquement si vous les omettez.
  • Assurez-vous que la regex n'identifie que les sections qui vous intéressent, sinon vous pourriez obtenir des résultats inattendus. Pour tester votre regex, vous pouvez prendre votre fichier d'entrée et exécuter cat input.txt | grep -E 'U-[0-9]{5}[A-Z]' par exemple, et vérifier si votre expression semble correcte (elle ne doit mettre en évidence que ce qui vous intéresse, et couvrir toute la partie du chemin qui correspond à l'ID personnalisé).
  • Vous pouvez également tester avec Regex101, en saisissant des URLs d'exemple dans la section TEST STRING pour vérifier si c'est correct. Assurez-vous que les REGEX FLAGS global et multiligne sont sélectionnés.
  • Il peut y avoir des cas où vous ne pouvez tout simplement pas fournir une regex qui identifie correctement l'ID personnalisé sans traiter d'autres valeurs comme identiques. Par exemple, s'il y a des URLs comme https://target.com/blah/xnl/settings où est un nom d'utilisateur, vous ne pourrez pas créer de regex pour le nom d'utilisateur car ce n'est pas un format suffisamment unique pour le distinguer des autres valeurs de chemin possibles.

Problèmes

Si vous rencontrez le moindre problème, ou si vous avez des idées d'amélioration, n'hésitez pas à ouvrir une issue sur Github. S'il y a un problème, il sera utile de fournir la commande exacte que vous avez exécutée ainsi qu'une description détaillée du problème. Si possible, exécutez avec -v pour reproduire le problème et signalez-moi les éventuels messages d'erreur affichés.

TODO

Aucun - n'hésitez pas à ouvrir une issue Github pour suggérer des améliorations.

Et pour finir...

Bonne chance et bonne chasse ! Si vous aimez vraiment l'outil (ou tout autre), ou s'ils vous ont aidé à trouver une superbe prime (bounty), pensez à M'OFFRIR UN CAFÉ ! ☕ (J'ai bien besoin de caféine !)

🤘 /XNL-h4ck3r

Offrez-moi un café sur ko-fi.com

Télécharger l’outil
ArgumentLong ArgumentDescription
-i--inputUn fichier d'URLs à désencombrer.
-o--outputLe fichier de sortie qui contiendra la liste désencombrée d'URLs (par défaut : output.txt). Si la sortie est redirigée vers un autre programme, elle sera écrite sur STDOUT à la place.
-fk--filter-keywordsUne liste de mots-clés séparés par des virgules pour exclure des liens (s'il n'y a pas de paramètres). Cela remplacera la liste FILTER_KEYWORDS spécifiée dans config.yml
-fe--filter-extensionsUne liste d'extensions de fichiers séparées par des virgules à exclure. Cela remplacera la liste FILTER_EXTENSIONS spécifiée dans config.yml
-rp--remove-paramsUne liste de paramètres sensibles à la casse séparés par des virgules à supprimer de TOUTES les URLs. Cela remplacera la liste REMOVE_PARAMS spécifiée dans config.yml. Cela peut être utile pour supprimer les paramètres anti-cache (cache buster) par exemple.**
-ks--keep-slashUne barre oblique finale à la fin d'une URL en entrée ne sera pas supprimée. Par conséquent, des URLs identiques peuvent être produites en sortie, l'une avec et l'autre sans barre oblique finale.
-khw--keep-human-writtenPar défaut, toute URL dont une partie du chemin contient plus de 3 tirets (-) est supprimée, car on suppose qu'il s'agit de contenu rédigé par un humain (par ex. un article de blog) et qu'il n'est pas intéressant. Passer cet argument les conservera en sortie.
-kym--keep-yyyymmPar défaut, toute URL dont le chemin contient /YYYY/MM (où YYYY est une année et MM un mois) est supprimée, car on suppose qu'il s'agit de contenu de blog ou d'actualités, et qu'il n'est pas intéressant. Passer cet argument les conservera en sortie.
-rcid--regex-custom-idUTILISER AVEC PRUDENCE ! Regex pour un ID personnalisé que votre cible utilise. Assurez-vous que la valeur est passée entre guillemets. Voir la section ci-dessous pour plus de détails à ce sujet.
-iq--ignore-querystringSupprime la chaîne de requête (y compris les fragments d'URL #) afin que la sortie ne contienne que des chemins uniques.
-fnp--fragment-not-paramNe traite pas les fragments d'URL # de la même manière que les paramètres, par ex. si un lien contient un mot-clé de filtrage et un fragment (ou paramètre), le lien est généralement conservé, mais si cet argument est passé et qu'un lien contient un mot de filtrage et un fragment, le lien sera supprimé. De plus, si cet argument est passé et que -iq / --ignore-querystring est utilisé, le fragment ne sera PAS supprimé des liens si aucun paramètre de requête n'est présent dans le lien.
-lang--languageSi cet argument est passé et qu'il y a plusieurs URLs avec des codes de langue différents dans le chemin, une seule version de l'URL sera produite en sortie. Les codes sont spécifiés dans la section LANGUAGE de config.yml.
-c--configChemin vers le fichier de configuration YML. S'il n'est pas passé, l'outil cherche le fichier config.yml dans le répertoire de configuration par défaut, par ex. ~/.config/urless/.
-dp--disregard-paramsCertains filtrages ne sont pas effectués si les URLs ont des paramètres, car par défaut nous voulons voir tous les paramètres possibles. Si cet argument est passé, le filtrage sera effectué, indépendamment de l'existence de paramètres.
-nb--no-bannerMasque la bannière de l'outil (elle est masquée par défaut si vous redirigez l'entrée vers urless) en sortie.
--versionAffiche le numéro de version actuel.
-v--verboseSortie détaillée (verbose)
  • UNWANTED-CONTENT :
    • Une partie du chemin de l'URL contient plus de 3 tirets (-), MAIS ce n'est pas un GUID. Cela implique un contenu rédigé par un humain, par ex. how-to-hack-the-planet. Si l'argument -khw est passé, cela ne sera pas supprimé.
    • L'URL contient /YYYY/MM/ , par ex. une année, un mois . Il s'agit généralement de contenu statique comme un blog. Si l'argument -kym est passé, cela ne sera pas supprimé.
  • en-gb
  • Sinon, l'URL a des paramètres (ou un fragment #) ET l'argument -dp/--disregard-params n'a PAS été passé :
    • S'il y a plusieurs URLs avec les mêmes paramètres, seules les URLs avec des valeurs de paramètres uniques sont incluses.
    • S'il y a des URLs avec un paramètre, mais sans valeur (ou un fragment), alors elles seront incluses.
  • xnl