
Un outil Python utilisé pour découvrir des endpoints, des paramètres potentiels, une wordlist spécifique à une cible donnée et des secrets.
Cet outil est utilisé pour découvrir des endpoints, découvrir des paramètres potentiels, générer une wordlist spécifique à une cible et trouver des secrets pour une cible donnée. Il peut les trouver en :
waymore -mode R et demande également des URLs à partir de waymore.txt et des URLs originales à partir de waymore_index.txt - voir le README.md de waymore)Le script Python est basé sur les capacités de recherche de liens de mon extension Burp GAP. Comme point de départ, j'ai pris l'outil incroyable LinkFinder de Gerben Javado, et j'ai utilisé l'expression régulière pour trouver les liens, mais avec des améliorations supplémentaires pour en trouver encore plus.
xnLinkFinder supporte Python 3.
Installez xnLinkFinder dans l'environnement Python par défaut (global).```bash
pip install xnLinkFinder
OU```bash
pip install git+https://github.com/xnl-h4ck3r/xnLinkFinder.git -v
Vous pouvez mettre à niveau avec```bash pip install --upgrade xnLinkFinder
### pipx
Installation rapide dans un environnement Python isolé à l'aide de [pipx](https://pypa.github.io/pipx/)```bash
pipx install git+https://github.com/xnl-h4ck3r/xnLinkFinder.git
NOTE : Pour extraire des liens des fichiers PDF, vous pouvez installer
pdftotextsur votre système. Vous pouvez l'installer en utilisantsudo apt install -y poppler-utilssur Linux oubrew install popplersur macOS. Sipdftotextn'est pas installé,xnLinkFinderutilisera la bibliothèque Pythonpypdfpar défaut. Si aucun texte n'est trouvé (par exemple pour des PDF scannés), il essaiera d'utiliserocrmypdfs'il est installé (par exemplesudo apt install -y ocrmypdf). L'utilisation depdftotextetocrmypdfdonne généralement de bien meilleurs résultats qu'avecpypdfseul.
| ----------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| -i | --input | Entrez : une URL, un fichier texte d'URLs, un répertoire de fichiers à rechercher, un fichier de sortie Burp XML, un fichier de sortie ZAP, un fichier CSV de Caido, un fichier HAR JSON, ou un seul fichier dont rechercher le contenu. |
| -o | --output | Le fichier dans lequel enregistrer la sortie des liens, y compris le chemin si nécessaire (par défaut : output.txt). Si défini sur cli, la sortie est uniquement écrite sur STDOUT. Si le fichier existe déjà, il sera simplement ajouté (et dédupliqué) sauf si l'option -ow est passée. |
| -op | --output-params | Le fichier dans lequel enregistrer la sortie des paramètres potentiels, y compris le chemin si nécessaire (par défaut : parameters.txt). Si défini sur cli, la sortie est uniquement écrite sur STDOUT (mais non redirigée vers un autre programme). Si le fichier existe déjà, il sera simplement ajouté (et dédupliqué) sauf si l'option -ow est passée. |
| -owl | --output-wordlist | Le fichier dans lequel enregistrer la sortie de la wordlist spécifique à la cible, y compris le chemin si nécessaire (par défaut : pas de sortie wordlist). Si défini sur cli, la sortie est uniquement écrite sur STDOUT (mais non redirigée vers un autre programme). Si le fichier existe déjà, il sera simplement ajouté (et dédupliqué) sauf si l'option -ow est passée. |
| -oo | --output-oos | Le fichier dans lequel enregistrer la sortie des liens hors scope, y compris le chemin si nécessaire (par défaut : pas de sortie OOS). Si défini sur cli, la sortie est uniquement écrite sur STDOUT (mais non redirigée vers un autre programme). Si le fichier existe déjà, il sera simplement ajouté (et dédupliqué) sauf si l'option -ow est passée. |
| -os | --output-secrets | Le fichier dans lequel enregistrer les secrets trouvés dans les réponses (format JSON), y compris le chemin si nécessaire (par défaut : pas de sortie de secrets). Si le fichier existe déjà, les secrets seront fusionnés sauf si l'option -ow est passée. Les secrets sont regroupés par type et valeur avec un tableau des sources où chacun a été trouvé. |
| -ow | --output-overwrite | Si le fichier de sortie existe déjà, il sera écrasé au lieu d'être ajouté. |
| -sp | --scope-prefix | Tout lien trouvé commençant par / sera préfixé avec les domaines du scope dans la sortie au lieu du lien original. Si la valeur passée est un nom de fichier valide, ce fichier sera utilisé, sinon la chaîne littérale sera utilisée. |
| -spo | --scope-prefix-original | Si l'argument -sp est passé, cela détermine si le lien original commençant par / est également inclus dans la sortie (par défaut : false) |
| -spkf | --scope-prefix-keep-failed | Si l'argument -spkf est passé, cela détermine si un lien préfixé sera conservé dans la sortie s'il s'agissait d'une 404 ou si une RequestException se produit (par défaut : false) |
| -sf | --scope-filter | Filtrera les liens de sortie pour ne les inclure que si le domaine du lien est dans le scope spécifié. Si la valeur passée est un nom de fichier valide, ce fichier sera utilisé, sinon la chaîne littérale sera utilisée. Cet argument est désormais obligatoire si l'entrée est un domaine/URL (ou un fichier de domaines/URLs) pour éviter de crawler des sites hors scope et également éviter des résultats trompeurs. |
| -c | --cookies † | Ajouter des cookies à passer avec les requêtes HTTP. Passez au format 'name1=value1; name2=value2;' |
| -H | --headers † | Ajouter des en-têtes personnalisés à passer avec les requêtes HTTP. Passez au format 'Header1: value1; Header2: value2;' |
| -ra | --regex-after | Expression régulière à des fins de filtrage des points de terminaison trouvés avant la sortie (par ex. /api/v[0-9]\.[0-9]\* ). Si elle correspond, le lien est affiché. |
| -d | --depth † | Le niveau de profondeur à rechercher. Par exemple, si une valeur de 2 est passée, alors tous les liens initialement trouvés seront ensuite recherchés pour plus de liens (par défaut : 1). Cette option est ignorée pour les fichiers Burp, ZAP, Caido et HAR car ils peuvent être énormes et consommer beaucoup de mémoire. Il est également conseillé d'utiliser l'argument -sp (--scope-prefix) pour garantir qu'une requête vers des liens trouvés sans domaine puisse être tentée. |
| -p | --processes † | Un multithreading de base est effectué lors de l'obtention de requêtes pour une URL ou un fichier d'URLs (pas un fichier Burp, ZAP, Caido ou HAR). Cet argument détermine le nombre de processus (threads) utilisés (par défaut : 25) |
| -rl | --rate-limit † | Nombre maximal de requêtes à envoyer par seconde (par défaut : 0, pas de limitation de débit). Cela aide à éviter de submerger le serveur cible. |
| -x | --exclude | Exclusions de liens supplémentaires (par rapport à la liste dans config.yml) dans une liste séparée par des virgules, par ex. careers,forum |
| -orig | --origin | Si vous voulez que l'origine du lien soit dans la sortie. Affiché sous forme LINK-URL [ORIGIN-URL] dans la sortie (par défaut : false) |
| -prefixed | | Si vous voulez voir quels liens ont été préfixés dans la sortie. Affiche (PREFIXED) après le lien et l'origine dans la sortie (par défaut : false) |
| -xrel | --exclude-relative-links | Par défaut, si des liens dans les résultats commencent par ./ ou ../, ils seront inclus. Si cet argument est utilisé, ces liens relatifs ne seront pas ajoutés. |
| -t | --timeout † | Combien de secondes attendre que le serveur envoie des données avant d'abandonner (par défaut : 10 secondes) |
| -r | --retries † | Le nombre de fois pour réessayer une requête après un échec (par ex. timeout, erreur de connexion, etc.). Limité à 5 tentatives (par défaut : 0) |
| -inc | --include | Inclure les liens d'entrée (-i) dans la sortie (par défaut : false) |
| -u | --user-agent † | Quels User Agents utiliser pour obtenir des liens, par ex. -u desktop mobile. Les valeurs possibles sont desktop, mobile, set-top-boxes et game-console. Il y a aussi mobile-apple, mobile-android et mobile-windows qui sont des sous-ensembles de mobile mais peuvent être utilisés séparément. |
| -uc | --user-agent-custom † | Une chaîne User Agent personnalisée à utiliser pour toutes les requêtes. Cela remplacera l'argument -u/--user-agent. Cela peut être utilisé lorsqu'un programme nécessite un en-tête User Agent spécifique pour vous identifier par exemple. |
| -insecure | † | Si les vérifications de certificat TLS doivent être désactivées lors des requêtes (par défaut : false) |
| -s429 | † | Arrêter lorsque > 95 pour cent des réponses renvoient 429 Too Many Requests (par défaut : false) |
| -s403 | † | Arrêter lorsque > 95 pour cent des réponses renvoient 403 Forbidden (par défaut : false) |
| -sTO | † | Arrêter lorsque > 95 pour cent des requêtes expirent (par défaut : false) |
| -sCE | † | Arrêter lorsque > 95 pour cent des requêtes ont des erreurs de connexion (par défaut : false) |
| -m | --memory-threshold | Le pourcentage seuil de mémoire. Si la mémoire de la machine dépasse le seuil, le programme sera arrêté et terminé proprement avant de manquer de mémoire (par défaut : 95) |
| -mfs | --max-file-size † | La taille maximale du fichier (en octets) d'un fichier à vérifier si -i est un répertoire. Si la taille du fichier est supérieure, il sera ignoré (par défaut : 500 Mo). Une valeur de 0 signifie qu'aucun fichier ne sera ignoré, quelle que soit sa taille. |
| -mrs | --max-response-size † | La taille maximale de la réponse (en Mo) à télécharger. Les réponses plus grandes seront ignorées (par défaut : 100 Mo). |
| -fp | --forward-proxy † | Pour la recherche active de liens avec une URL (ou un fichier d'URLs), rejouer les requêtes via un proxy tel que Burp ou Caido, par ex http://127.0.0.1:8080. |
| -rp | --request-proxy | Proxy de requête à utiliser. Peut être une chaîne de proxy (par ex. http://user:[email protected]:8000, socks5://host:port) ou un fichier contenant une liste de proxies (un par ligne, sélection aléatoire). |
| | --heap | Si prendre un instantané du tas (heap) des URL visitées et extraire les liens de la mémoire du navigateur. Cela prendra plus de temps mais pourrait découvrir des liens générés dynamiquement que l'analyse statique standard pourrait manquer (nécessite l'installation de Playwright). |
| -ro | --readable-only | Si passé, seul le texte lisible par l'homme sera extrait des réponses/fichiers HTML en utilisant BeautifulSoup avant de rechercher des liens. Cela exclut le contenu des balises <script>, <style>, <noscript> et <template>. |
| -ascii-only | | Si les liens et paramètres ne seront ajoutés que s'ils ne contiennent que des caractères ASCII. Cela peut être utile lorsque vous savez que la cible est susceptible d'utiliser des caractères ASCII et que vous obtenez également un certain nombre de faux positifs provenant de fichiers binaires pour une raison quelconque. |
| -mtl | --max-time-limit | La limite de temps maximale (en minutes) à exécuter avant de s'arrêter (par défaut : 0). Si 0 est passé, il n'y a pas de limite. |
| | --config | Chemin vers le fichier de configuration YML. S'il n'est pas passé, il recherche le fichier config.yml dans le répertoire par défaut, typiquement ~/.config/xnLinkFinder. |
| -nwlpl | --no-wordlist-plurals | Lorsque des mots sont trouvés pour une wordlist spécifique à la cible, par défaut de nouveaux mots sont ajoutés s'il y a un mot singulier à partir d'un pluriel, et vice versa. Si cet argument est utilisé, ce processus n'est pas effectué. |
| -nwlpw | --no-wordlist-pathwords | Par défaut, tous les mots de chemin trouvés dans les liens seront traités pour la wordlist spécifique à la cible. Si cet argument est utilisé, ils ne seront pas traités. REMARQUE : si la valeur de configuration YAML respParamPathWords est True, cet argument n'aura aucun effet à moins que -nwlpm/--no-wordlist-parameters ne soit également passé. |
| -nwlpm | --no-wordlist-parameters | Par défaut, tous les paramètres trouvés dans les liens seront traités pour la wordlist spécifique à la cible. Si cet argument est utilisé, ils ne seront pas traités. |
| -nwlc | --no-wordlist-comments | Par défaut, tous les commentaires dans les pages seront traités pour la wordlist spécifique à la cible. Si cet argument est utilisé, ils ne seront pas traités. |
| -nwlia | --no-wordlist-imgalt | Par défaut, tous les attributs 'alt' des images seront traités pour la wordlist spécifique à la cible. Si cet argument est utilisé, ils ne seront pas traités. |
| -nwld | --no-wordlist-digits | Exclure tout mot contenant des chiffres de la wordlist spécifique à la cible. |
| -nwll | --no-wordlist-lowercase | Par défaut, tout mot ajouté contenant des caractères majuscules ajoutera également le mot en minuscules. Si cet argument est utilisé, les mots en minuscules ne seront pas ajoutés. |
| -wlml | --wordlist-maxlen | La longueur maximale des mots à ajouter à la wordlist spécifique à la cible, à l'exclusion des pluriels (par défaut : 0 - aucune limite) |
| -swf | --stopwords-file | Un fichier de mots vides (Stop Words) supplémentaires (en plus de "stopWords" dans le fichier de configuration YML) utilisé pour exclure des mots de la wordlist spécifique à la cible. Les mots vides sont utilisés en traitement du langage naturel et différentes listes peuvent être trouvées dans différentes bibliothèques. Vous pouvez souhaiter ajouter des mots dans différentes langues, selon votre cible. |
| -brt | --burpfile-remove-tags | Lorsque l'entrée passée avec -i est un fichier Burp, l'utilisateur est invité de manière interactive à savoir s'il souhaite supprimer les balises inutiles de ce fichier (parfois il y a un problème dans les fichiers XML Burp qui peut souvent être résolu en supprimant les balises inutiles, ce qui rendra également le fichier plus petit). Si vous utilisez xnLinkFinder dans un script, vous ne voulez pas interrompre pour une saisie utilisateur, vous pouvez donc définir cela en passant cet argument avec true ou false. REMARQUE : il s'agit d'une modification permanente du fichier |
| -all | --all-tlds | Tous les liens trouvés seront retournés, même si le TLD n'est pas courant. Cela peut entraîner un certain nombre de faux positifs où des noms de variables, etc. peuvent également être un domaine authentique possible. Par défaut, seuls les liens qui ont un TLD dans les TLD courants (commonTLDs dans config.yml) seront retournés. |
| -cl | --content-length | Afficher la taille du contenu (Content-Length) de la réponse lors du crawling. |
| -nb | --no-banner | Masque la bannière de l'outil. |
| -v | --verbose | Sortie verbose |
| -vv | --vverbose | Sortie verbose augmentée |
| | --version | Affiche le numéro de version actuel. |
| -h | --help | Affiche le message d'aide et quitte. |† NON PERTINENT POUR L'ENTRÉE DE RÉPERTOIRE, FICHIER XML BURP, FICHIER ZAP, FICHIER CSV CAIDO OU FICHIER HAR
Le fichier config.yml (généralement dans ~/.config/xnLinkFinder/) contient les clés qui peuvent être mises à jour selon vos besoins :
linkExclude - Une liste de chaînes de caractères séparées par des virgules (par exemple .css,.jpg,.jpeg etc.) sur laquelle tous les liens sont vérifiés. Si un lien inclut l'une de ces chaînes, il sera exclu du résultat. Si l'entrée est un répertoire, les noms de fichiers sont vérifiés par rapport à cette liste.contentExclude - Une liste de chaînes de caractères séparées par des virgules (par exemple text/css,image/jpeg,image/jpg etc.) sur laquelle tous les en-têtes Content-Type des réponses sont vérifiés. Toute réponse avec l'un de ces types de contenu sera exclue et ne sera pas vérifiée pour des liens.fileExtExclude - Une liste de chaînes de caractères séparées par des virgules (par exemple .zip,.gz,.tar etc.) sur laquelle tous les fichiers en mode Répertoire sont vérifiés. Si un fichier a l'une de ces extensions, il ne sera pas recherché pour des liens. De plus, en mode normal, si une réponse n'a pas de type de contenu à vérifier pour les exclusions, il vérifiera ces extensions à la fin de l'URL pour déterminer s'il faut rechercher des liens.regexFiles - Une liste de types de fichiers séparés par le caractère pipe (par exemple php|php3|php5 etc.). Ceux-ci sont utilisés dans l'expression régulière de recherche de liens lorsqu'il y a des résultats qui ne sont pas des liens évidents, mais qui sont des types de fichiers intéressants que vous souhaitez extraire. Si vous ajoutez à cette liste, assurez-vous d'échapper les points pour garantir une expression régulière correcte, par exemple js\.maprespParamLinksFound † - Indique s'il faut obtenir les paramètres potentiels à partir des liens trouvés dans les réponses : True ou FalserespParamPathWords † - Indique s'il faut ajouter les mots de chemin dans les liens récupérés en tant que paramètres potentiels : True ou FalserespParamJSON † - Si le type MIME de la réponse contient JSON, indique s'il faut ajouter les valeurs des clés JSON en tant que paramètres potentiels : True ou FalserespParamJSVars † - Indique si les variables JavaScript définies avec var, let ou const sont ajoutées en tant que paramètres potentiels : True ou FalserespParamXML † - Si le type MIME de la réponse contient XML, indique s'il faut ajouter les valeurs des attributs XML en tant que paramètres potentiels : True ou FalserespParamInputField † - Si le type MIME de la réponse contient HTML ou JAVASCRIPT (car du HTML pourrait être intégré dans du HTML), indique s'il faut ajouter les attributs NAME et ID de tout champ INPUT (ou TEXTAREA/SELECT/BUTTON) en tant que paramètres potentiels : True ou FalserespParamMetaName † - Si le type MIME de la réponse contient HTML, indique s'il faut ajouter les attributs NAME de toute balise META en tant que paramètres potentiels : True ou FalsewordsContentTypes - Une liste de chaînes de caractères séparées par des virgules (par exemple text/html,text/plain) pour spécifier quels types de contenu de réponse seront recherchés pour des mots à inclure dans la liste de mots spécifique à la cible.stopWords - Une liste de chaînes de caractères séparées par des virgules (par exemple then,this,that) pour spécifier les mots exclus de la liste de mots spécifique à la cible. Cette liste par défaut est initialement composée de déterminants anglais, de conjonctions de coordination et de prépositions, ainsi que d'une liste de mots vides de Scikit-Learn, une bibliothèque d'apprentissage automatique Python.commonTLDs - Une liste de TLD les plus courants séparés par des virgules. Sauf si l'argument -all/--all-tlds est passé, seuls les liens avec des domaines ayant un TLD dans cette liste sont retournés.† SI CEUX-CI NE SONT PAS TROUVÉS DANS LE FICHIER DE CONFIGURATION, ILS SERONT PAR DÉFAUT À True
xnLinkFinder -i target.com -sf target.com
### Trouver des liens depuis une cible spécifique - Détails
Idéalement, fournissez un préfixe de scope (`-sp`) avec le domaine principal (incluant le schéma), et un filtre de scope (`-sf`) pour filtrer les résultats uniquement vers les domaines pertinents (cela peut être un fichier ou des domaines dans le scope). Vous pouvez également passer des cookies et des en-têtes personnalisés pour vous assurer de trouver des liens uniquement accessibles aux utilisateurs autorisés.
Spécifier le User Agent (`-u desktop mobile`) va d'abord rechercher tous les liens en utilisant les User Agents desktop, puis réessayer avec les User Agents mobiles. Il pourrait y avoir des points de terminaison spécifiques liés à l'User Agent donné. Donner une valeur de profondeur (`-d`) fera que des requêtes seront envoyées aux liens trouvés lors de la recherche de profondeur précédente pour trouver davantage de liens.```
xnLinkFinder -i target.com -sp target_prefix.txt -sf target_scope.txt -spo -inc -vv -H 'Authorization: Bearer XXXXXXXXXXXXXX' -c 'SessionId=MYSESSIONID' -u desktop mobile -d 10
Si vous avez un fichier contenant des URLs de fichiers JS par exemple, vous pouvez y chercher des liens :``` xnLinkFinder -i target_js.txt -sf target.com
NOTE: Un fichier passé est supposé être une liste d'URLs si la première ligne commence par `//` ou `http` ou est un format de domaine (par ex. `example.com`, `sub.example.co.uk`), sinon il est considéré comme un fichier dont il faut chercher le contenu (à moins qu'il ne s'agisse d'un fichier Burp, Zap, Caido ou HAR).
### Trouver des liens dans le contenu d'un fichier - Base
Si vous avez une réponse sauvegardée par exemple, vous pouvez chercher des liens dans celle-ci :```
xnLinkFinder -i response.txt -sf target.com
REMARQUE : Un fichier passé est supposé être une liste d'URLs si la première ligne commence par // ou http ou est au format d'un domaine (ex. example.com, sub.example.co.uk), sinon il est considéré comme un fichier dans lequel chercher le contenu (sauf s'il s'agit d'un fichier Burp, Zap, Caido ou HAR).
Si vous avez des fichiers, par ex. des fichiers JS, des réponses HTTP, etc. vous pouvez rechercher des liens dans ceux-ci :``` xnLinkFinder -i ~/.config/waymore/results/target.com
NOTE : Les sous-répertoires sont également vérifiés. L'option `-mfs` peut être spécifiée pour ignorer les fichiers dépassant une certaine taille.
### Trouver des liens à partir d'un projet Burp - Basique
Dans Burp, sélectionnez les éléments que vous souhaitez rechercher en mettant en évidence la portée par exemple, en cliquant avec le bouton droit et en sélectionnant `Save selected items`. Assurez-vous que l'option `base64-encode requests and responses` est cochée avant d'enregistrer.
Pour obtenir tous les liens à partir du fichier (même avec des fichiers ÉNORMES, vous pourrez obtenir tous les liens) :```
xnLinkFinder -i target_burp.xml
REMARQUE : xnLinkFinder suppose que si la première ligne du fichier passé avec -i commence par <?xml alors vous essayez de traiter un fichier Burp.
Idéalement, fournissez un préfixe de scope (-sp) avec le domaine principal (incluant le schéma), et un filtre de scope (-sf) pour filtrer les résultats uniquement sur les domaines pertinents.```
xnLinkFinder -i target_burp.xml -o target_burp.txt -sp https://www.target.com -sf target.* -ow -spo -inc -vv
### Trouver des liens depuis un projet ZAP - Basique
Dans ZAP, sélectionnez les éléments que vous souhaitez rechercher en mettant en surbrillance l'historique par exemple, en cliquant sur le menu `Export` et en sélectionnant `Save Messages...` (ou `Export Messages to File...` dans les versions plus anciennes). Cela vous permettra d'enregistrer un fichier texte ASCII de toutes les requêtes et réponses que vous souhaitez rechercher.
Pour obtenir tous les liens à partir du fichier (même avec des fichiers TRÈS VOLUMINEUX, vous pourrez obtenir tous les liens) :```
xnLinkFinder -i target_zap.txt
NOTE: xnLinkFinder part du principe que si la première ligne du fichier passé avec -i est au format ==== 99 ========== ou ===99 ========== par exemple, alors vous essayez de traiter un fichier texte ASCII ZAP.
Dans Caido, allez dans la section History et sélectionnez l'option Export.
Si vous utilisez Caido Pro ou Enterprise edition, choisissez l'option Export current rows et sélectionnez As CSV. Allez dans la section Exports et téléchargez le fichier CSV. Puis passez-le en entrée :``` xnLinkFinder -i 2023-03-18-010332_csv_requests.csv
Si vous utilisez la version Community de Caido, vous devrez choisir l'option **Tout exporter** et sélectionner **En CSV**. Allez dans la section **Exports** et téléchargez le fichier CSV. Comme vous avez l'historique complet, vous voudrez supprimer tout ce qui n'est pas pertinent du fichier CSV. Utilisez l'exemple ci-dessous, où `redbull` constitue la partie principale des domaines de la cible que vous analysez.```
cat 2023-03-18-010332_csv_requests.csv | grep -E '^id|^[0-9]+,[^,]*redbull' > caido_redbull.csv
xnLinkFinder -i caido_redbull.csv
NOTE : xnLinkFinder suppose que si la première ligne du fichier passé avec -i est au format id,host,method, alors vous essayez de traiter un fichier CSV exporté depuis Caido.
Un fichier HAR est un fichier JSON qui contient une liste de requêtes et réponses HTTP. C'est un format courant pour stocker le trafic HTTP. Vous pouvez exporter un fichier HAR depuis la plupart des navigateurs web, généralement depuis l'onglet Réseau des outils de développement. Passez le fichier en entrée :``` xnLinkFinder -i browser.har
NOTE : xnLinkFinder suppose que si le nom du fichier se termine par `.har` OU si la première ligne du fichier contient `"log"` et commence par `{`, alors vous essayez de traiter un fichier HAR.
### Trouver des liens depuis un répertoire de résultats Waymore
L'outil [waymore](https://github.com/xnl-h4ck3r/waymore) peut être utilisé pour obtenir des URLs à partir de diverses API tierces, et aussi télécharger les réponses archivées de diverses sources. Passer un répertoire de résultats de `waymore` à `xnLinKFinder` cherchera le contenu des réponses archivées, et demandera également les URLs de `waymore.txt` ainsi que les URLs archivées de `waymore_index.txt` (ou `index.txt` pour les versions plus anciennes de `waymore`) et obtiendra plus de liens à partir de ces réponses. Si `-d`/`--depth` est zéro, alors les URLs de `waymore_index.txt` seront simplement retournées mais pas demandées.```
xnLinkFinder -i ~/Tools/waymore/results/target.com
NOTE : Il est passé comme un répertoire normal, mais xnLinkFinder déterminera qu'il s'agit d'un répertoire de résultats waymore et le traitera en conséquence. Cela repose sur la convention de nommage par défaut du fichier d'URLs qui est waymore.txt et sur le fait que ce fichier se trouve dans le même répertoire que les fichiers archivés (ce qui est le cas par défaut).
Vous pouvez rediriger xnLinkFinder vers d'autres outils. Les erreurs sont envoyées vers stderr et les liens trouvés vers stdout. Le fichier de sortie est toujours créé en plus des liens redirigés vers le programme suivant. Cependant, les paramètres potentiels ne sont pas redirigés vers le programme suivant, mais ils sont toujours écrits dans le fichier. Par exemple :```
xnLinkFinder -i redbull.com -sp https://redbull.com -sf rebbull.* -d 3 | unfurl keys | sort -u
Vous pouvez également passer l'entrée via `stdin` au lieu de `-i`.```
cat redbull_subs.txt | xnLinkFinder -sp https://redbull.com -sf rebbull.* -d 3
NOTE: Vous ne pouvez pas rediriger un fichier Burp, ZAP, Caido ou HAR via un pipe ; ceux-ci doivent être passés en utilisant -i.
-sp. Cela peut être un seul domaine de scope, ou un fichier contenant plusieurs domaines de scope.
Vous trouverez ci-dessous des exemples du format utilisé (aucun chemin ne doit être inclus, et aucun wildcard n'est utilisé. Le schéma est facultatif, mais par défaut http) : ```
http://www.target.com
https://target-payments.com
https://static.target-cdn.com
Si un lien est trouvé qui n'a pas de domaine, par exemple /path/to/example.js, alors passer -sp http://www.target.com aura pour résultat http://www.target.com/path/to/example.js et si la Profondeur (-d) est >1 alors une requête pourra être faite à cette URL pour rechercher plus de liens. Si un fichier de domaines est passé en utilisant -sp, alors la sortie inclura chaque domaine suivi de /path/to/example.js et augmentera les chances de trouver plus de liens.
-sp mais souhaitez que le lien original /path/to/example.js (sans domaine) soit également retourné dans la sortie, alors passez l'argument -spo.-sf. Cela garantira que seuls les domaines pertinents sont retournés dans la sortie, et plus important encore, si la Profondeur (-d) est >1, les cibles hors périmètre ne seront pas recherchées pour des liens ou des paramètres. Cela peut être un domaine de périmètre unique, ou un fichier contenant plusieurs domaines de périmètre. Voici des exemples du format utilisé (aucun schéma ni chemin ne doit être inclus) : ```
target.*
target-payments.com
static.target-cdn.com
CE FILTRE CONCERNE UNIQUEMENT LE DOMAINE DES LIENS.
-ra. C'est toujours une bonne idée d'utiliser https://regex101.com/ pour vérifier que votre expression Regex fait ce que vous attendez.-v pour mieux comprendre ce que fait l'outil.-vv qui peut afficher les erreurs survenant, qui peuvent être résolues, ou que vous pouvez signaler comme problème sur github.-c), des en-têtes (-H) et des expressions régulières (-ra) entre guillemets simples, par exemple -ra '/api/v[0-9]\.[0-9]\*'-o pour donner un nom de fichier de sortie spécifique pour les liens, plutôt que le fichier par défaut output.txt. Si vous prévoyez d'effectuer de grandes profondeurs de recherche, commencez par 2 avec l'option -v pour vérifier ce qui est renvoyé. Ensuite, vous pouvez augmenter la profondeur, et la nouvelle sortie sera ajoutée au fichier existant, sauf si vous passez -ow.-op pour donner un nom de fichier de sortie spécifique pour les paramètres potentiels, plutôt que le fichier par défaut parameters.txt. Toute sortie sera ajoutée au fichier existant, sauf si vous passez -ow.-d) élevée, méfiez-vous de certains sites utilisant des liens dynamiques qui ne cesseront d'en trouver de nouveaux. Si aucun nouveau lien n'est trouvé, xnLinkFinder cessera la recherche. Il est également recommandé de fournir les indicateurs d'arrêt (s429, s403, sTO, sCE).-d) est élevée et que vous avez des ressources limitées, le programme s'arrêtera lorsqu'il atteindra la valeur seuil de mémoire (-m) et se terminera gracieusement avec les données intactes avant d'être tué.Ctrl-C) en cours d'exécution, soyez patient et toutes les données collectées seront sauvegardées avant de se terminer gracieusement.-orig affichera l'URL où le lien a été trouvé. Cela peut entraîner des liens en double dans la sortie si le même lien a été trouvé sur plusieurs sources, mais il sera suffixé avec l'URL d'origine entre crochets.desktop (sauf si l'argument -uc/--user-agent-custom est utilisé). Si vous avez une cible qui pourrait avoir des liens différents pour différents groupes d'agents utilisateurs, spécifiez alors -u desktop mobile par exemple (séparez par un espace). L'option mobile pour l'agent utilisateur est une combinaison de mobile-apple, mobile-android et mobile-windows. Les valeurs possibles sont desktop, mobile, set-top-boxes et game-console.-i est défini sur un répertoire, le contenu des fichiers situés à la racine de ce répertoire sera recherché pour trouver des liens. Les fichiers dans les sous-répertoires ne sont pas recherchés. Tout fichier dont la taille dépasse celle définie par -mfs (par défaut : 500 Mo) sera ignoré.-replay-proxy, les requêtes peuvent parfois prendre plus de temps. Si vous commencez à voir davantage d'erreurs Request Timeout (vous verrez des erreurs si vous utilisez les options -v ou -vv), envisagez d'utiliser -t pour augmenter la limite de temps d'attente.-ascii-only. Cela peut éliminer un certain nombre de faux positifs parfois renvoyés à partir de données binaires.-d/--depth pour rechercher les liens supplémentaires trouvés à partir des requêtes URL et également l'argument -u/--user-agent si vous pensez que du contenu différent pourrait être trouvé, par exemple -u desktop mobile.-owl/--output-wordlist pour enregistrer la liste de mots spécifique à la cible. Cette liste peut être très utile lors du fuzzing d'une cible.wordsContentTypes sont recherchées. Les valeurs par défaut sont text/html,application/xml,application/json,text/plain<meta> où :
Property est og:title ou og:descriptionName est description,keywords,twitter:title ou twitter:descriptionalt des balises ``<style>, <script> et <link>-swf/--stopwords-file. Vous souhaiterez peut-être inclure des mots d'arrêt dans une autre langue, en fonction de la cible. Les mots d'arrêt sont utilisés dans le traitement du langage naturel (NLP) et de nombreuses listes de mots d'arrêt peuvent être trouvées en ligne pour répondre à différents besoins.Si vous rencontrez des problèmes, ou avez des idées d'amélioration, n'hésitez pas à soumettre un problème sur Github. S'il y a un problème, il sera utile de fournir la commande exacte que vous avez exécutée et une description détaillée du problème. Si possible, exécutez avec -vv pour reproduire le problème et faites-moi part des éventuels messages d'erreur.
Recherche active de liens pour un domaine :
...
Entrée et sortie par tube :
Bonne chance et bonne chasse ! Si vous aimez vraiment l'outil (ou d'autres), ou s'il vous a aidé à trouver une prime géniale, envisagez de M'OFFRIR UN CAFÉ ! ☕ (La caféine est la bienvenue !)
🤘 /XNL-h4ck3r