Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
xnLinkFinder — Una herramienta Python utilizada para descubrir endpoints, parámetros potenciales, una lista de palabras específica para un objetivo dado y secretos. | Kitploit
Herramientas/GitHubGitHub/xnl-h4ck3r/xnlinkfinder
ReconocimientoRecopilación de InformaciónSeguridad WebPruebas de PenetraciónDetección de SecretosCrawler
GitHubxnl-h4ck3r/xnlinkfinder

xnLinkFinder

Una herramienta Python utilizada para descubrir endpoints, parámetros potenciales, una lista de palabras específica para un objetivo dado y secretos.

Ver Repositorio
1.6k1864hace 6 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Acerca de - v8.2

Esta es una herramienta utilizada para descubrir endpoints, descubrir parámetros potenciales, generar una lista de palabras específica del objetivo y encontrar secretos para un objetivo dado. Puede encontrarlos mediante:

  • rastreando un objetivo (proporcionar un dominio/URL)
  • rastreando múltiples objetivos (proporcionar un archivo de dominios/URLs)
  • buscando archivos en un directorio dado (proporcionar un nombre de directorio)
  • buscando en el contenido de un solo archivo
  • obtenerlos de un proyecto Burp (proporcionar la ubicación de un archivo XML de Burp)
  • obtenerlos de un proyecto ZAP (proporcionar la ubicación de un archivo de mensajes ASCII de ZAP)
  • obtenerlos de un proyecto Caido (proporcionar la ubicación de un archivo CSV de exportación de Caido)
  • obtenerlos de un archivo HAR (HTTP Archive) (proporcionar la ubicación de un archivo JSON de HAR)
  • procesando un directorio de resultados de waymore (buscando archivos de respuesta archivados de waymore -mode R y también solicitando URLs de waymore.txt y las URLs originales de waymore_index.txt - ver README.md de waymore)

El script de Python se basa en las capacidades de búsqueda de enlaces de mi extensión de Burp GAP. Como punto de partida, tomé la increíble herramienta LinkFinder de Gerben Javado, y utilicé la expresión regular para encontrar enlaces, pero con mejoras adicionales para encontrar aún más.

Instalación

xnLinkFinder es compatible con Python 3.

Instala xnLinkFinder en el entorno de Python predeterminado (global).```bash pip install xnLinkFinder

root@kitploit:~
O```bash
pip install git+https://github.com/xnl-h4ck3r/xnLinkFinder.git -v

Puedes actualizar con```bash pip install --upgrade xnLinkFinder

root@kitploit:~
### pipx

Configuración rápida en entorno aislado de Python usando [pipx](https://pypa.github.io/pipx/)```bash
pipx install git+https://github.com/xnl-h4ck3r/xnLinkFinder.git

NOTA: Para extraer enlaces de archivos PDF, puede instalar pdftotext en su sistema. Puede instalarlo usando sudo apt install -y poppler-utils en Linux o brew install poppler en macOS. Si no tiene instalado pdftotext, xnLinkFinder usará como alternativa la biblioteca Python pypdf. Si no se encuentra texto (p.ej., en PDFs escaneados), intentará usar ocrmypdf si está instalado (p.ej., sudo apt install -y ocrmypdf). El uso de pdftotext y ocrmypdf generalmente dará resultados mucho mejores que pypdf solo.

Uso| Arg | Long Arg | Descripción |

| ----------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | -i | --input | Entrada: una URL, archivo de texto de URLs, un directorio de archivos para buscar, un archivo de salida XML de Burp, un archivo de salida de ZAP, un archivo CSV de Caido, un archivo HAR JSON, o un único archivo para buscar contenidos. | | -o | --output | El archivo para guardar la salida de enlaces, incluyendo la ruta si es necesario (por defecto: output.txt). Si se establece en cli, la salida solo se escribe en STDOUT. Si el archivo ya existe, solo se añadirá (y se deduplicará) a menos que se pase la opción -ow. | | -op | --output-params | El archivo para guardar la salida de Parámetros Potenciales, incluyendo la ruta si es necesario (por defecto: parameters.txt). Si se establece en cli, la salida solo se escribe en STDOUT (pero no se canaliza a otro programa). Si el archivo ya existe, solo se añadirá (y se deduplicará) a menos que se pase la opción -ow. | | -owl | --output-wordlist | El archivo para guardar la salida de la wordlist específica del objetivo, incluyendo la ruta si es necesario (por defecto: Sin salida de wordlist). Si se establece en , la salida solo se escribe en STDOUT (pero no se canaliza a otro programa). Si el archivo ya existe, solo se añadirá (y se deduplicará) a menos que se pase la opción -ow. | | -oo | --output-oos | El archivo para guardar la salida de enlaces fuera de alcance, incluyendo la ruta si es necesario (por defecto: Sin salida OOS). Si se establece en , la salida solo se escribe en STDOUT (pero no se canaliza a otro programa). Si el archivo ya existe, solo se añadirá (y se deduplicará) a menos que se pase la opción -ow. | | -os | --output-secrets | El archivo para guardar los secretos encontrados en las respuestas (formato JSON), incluyendo la ruta si es necesario (por defecto: Sin salida de secretos). Si el archivo ya existe, los secretos se fusionarán a menos que se pase la opción -ow. Los secretos se agrupan por tipo y valor con un array de fuentes donde se encontró cada uno. | | -ow | --output-overwrite | Si el archivo de salida ya existe, se sobrescribirá en lugar de añadirse. | | -sp | --scope-prefix | Cualquier enlace encontrado que comience con tendrá como prefijo los dominios de alcance en la salida en lugar del enlace original. Si el valor pasado es un nombre de archivo válido, se usará ese archivo; de lo contrario, se usará la cadena literal. | | -spo | --scope-prefix-original | Si se pasa el argumento , esto determina si el enlace original que comienza con también se incluye en la salida (por defecto: false) | | -spkf | --scope-prefix-keep-failed | Si se pasa el argumento , esto determina si un enlace con prefijo se mantendrá en la salida si fue un 404 o ocurre una RequestException (por defecto: false) | | -sf | --scope-filter | Filtrará los enlaces de salida para incluir solo aquellos cuyo dominio esté dentro del alcance especificado. Si el valor pasado es un nombre de archivo válido, se usará ese archivo; de lo contrario, se usará la cadena literal. Este argumento ahora es obligatorio si la entrada es un dominio/URL (o archivo de dominios/URLs) para evitar rastrear sitios que no están en el alcance y también para evitar resultados engañosos. | | -c | --cookies † | Añadir cookies para pasar con las solicitudes HTTP. Pasar en el formato | | -H | --headers † | Añadir encabezados personalizados para pasar con las solicitudes HTTP. Pasar en el formato | | -ra | --regex-after | Expresión regular para fines de filtrado contra los endpoints encontrados antes de la salida (ej. ). Si coincide, el enlace se emite. | | -d | --depth † | El nivel de profundidad a buscar. Por ejemplo, si se pasa un valor de 2, todos los enlaces encontrados inicialmente se buscarán a su vez para encontrar más enlaces (por defecto: 1). Esta opción se ignora para archivos Burp, ZAP, Caido y HAR porque pueden ser enormes y consumir mucha memoria. También se recomienda usar el argumento () para asegurar que se pueda intentar una solicitud a enlaces encontrados sin dominio. | | -p | --processes † | Se realiza un multihilo básico al obtener solicitudes para una URL, o archivo de URLs (no un archivo Burp, ZAP, Caido o HAR). Este argumento determina el número de procesos (hilos) utilizados (por defecto: 25) | | -rl | --rate-limit † | Número máximo de solicitudes a enviar por segundo (por defecto: 0, sin límite de velocidad). Esto ayuda a evitar abrumar al servidor objetivo. | | -x | --exclude | Exclusiones de enlaces adicionales (a la lista en ) en una lista separada por comas, ej. | | -orig | --origin | Si desea que el origen del enlace aparezca en la salida. Se muestra como en la salida (por defecto: false) | | -prefixed | | Si desea ver qué enlaces se prefijaron en la salida. Muestra después del enlace y origen en la salida (por defecto: false) | | -xrel | --exclude-relative-links | Por defecto, si algún enlace en los resultados comienza con o , se incluirán. Si se usa este argumento, estos enlaces relativos no se añadirán. | | -t | --timeout † | Cuántos segundos esperar a que el servidor envíe datos antes de rendirse (por defecto: 10 segundos) | | -r | --retries † | El número de veces para reintentar una solicitud después de un fallo (ej. timeout, error de conexión, etc). Esto está limitado a 5 reintentos (por defecto: 0) | | -inc | --include | Incluir enlaces de entrada () en la salida (por defecto: false) | | -u | --user-agent † | Qué User Agents usar para obtener enlaces, ej. . Los valores posibles son , , y . También hay , y que son subconjuntos de pero se pueden usar por separado. | | -uc | --user-agent-custom † | Una cadena de User Agent personalizada para usar en todas las solicitudes. Esto anulará el argumento /. Se puede usar cuando un programa requiere un encabezado User Agent específico para identificarte, por ejemplo. | | -insecure | † | Si se deben deshabilitar las comprobaciones de certificados TLS al hacer solicitudes (por defecto: false) | | -s429 | † | Detener cuando > 95 por ciento de las respuestas devuelvan 429 Too Many Requests (por defecto: false) | | -s403 | † | Detener cuando > 95 por ciento de las respuestas devuelvan 403 Forbidden (por defecto: false) | | -sTO | † | Detener cuando > 95 por ciento de las solicitudes den timeout (por defecto: false) | | -sCE | † | Detener cuando > 95 por ciento de las solicitudes tengan errores de conexión (por defecto: false) | | -m | --memory-threshold | El porcentaje de umbral de memoria. Si la memoria de la máquina supera el umbral, el programa se detendrá y finalizará correctamente antes de quedarse sin memoria (por defecto: 95) | | -mfs | --max-file-size † | El tamaño máximo de archivo (en bytes) de un archivo a verificar si -i es un directorio. Si el tamaño del archivo es mayor, se ignorará (por defecto: 500 MB). Establecer en 0 significa que ningún archivo será ignorado, independientemente del tamaño. | | -mrs | --max-response-size † | El tamaño máximo de respuesta (en MB) para descargar. Las respuestas mayores que esto se saltarán (por defecto: 100 MB). | | -fp | --forward-proxy † | Para la búsqueda activa de enlaces con URL (o archivo de URLs), reenviar las solicitudes a través de un proxy como Burp o Caido, ej. . | | -rp | --request-proxy | Proxy de solicitud a utilizar. Puede ser una cadena de proxy (ej. , ) o un archivo que contenga una lista de proxies (uno por línea, selección aleatoria). | | | --heap | Si tomar una instantánea del heap de URLs visitadas y extraer enlaces de la memoria del navegador. Esto tomará más tiempo pero podría descubrir enlaces generados dinámicamente que el análisis estático estándar podría pasar por alto (Requiere Playwright instalado). | | -ro | --readable-only | Si se pasa, solo se extraerá texto legible por humanos de las respuestas/archivos HTML usando BeautifulSoup antes de buscar enlaces. Esto excluye el contenido de las etiquetas , , y . | | -ascii-only | | Si los enlaces y parámetros solo se añadirán si solo contienen caracteres ASCII. Esto puede ser útil cuando sabes que el objetivo probablemente usa caracteres ASCII y también obtienes una serie de falsos positivos de archivos binarios por alguna razón. | | -mtl | --max-time-limit | El límite de tiempo máximo (en minutos) para ejecutar antes de detenerse (por defecto: 0). Si se pasa 0, no hay límite. | | | --config | Ruta al archivo de configuración YML. Si no se pasa, busca el archivo en el directorio predeterminado, típicamente . | | -nwlpl | --no-wordlist-plurals | Cuando se encuentran palabras para una wordlist específica del objetivo, por defecto se añaden nuevas palabras si hay una palabra singular a partir de un plural, y viceversa. Si se usa este argumento, este proceso no se realiza. | | -nwlpw | --no-wordlist-pathwords | Por defecto, cualquier palabra de ruta encontrada en los enlaces se procesará para la wordlist específica del objetivo. Si se usa este argumento, no se procesarán. | | -nwlpm | --no-wordlist-parameters | Por defecto, cualquier parámetro encontrado en los enlaces se procesará para la wordlist específica del objetivo. Si se usa este argumento, no se procesarán. | | -nwlc | --no-wordlist-comments | Por defecto, cualquier comentario en las páginas se procesará para la wordlist específica del objetivo. Si se usa este argumento, no se procesarán. | | -nwlia | --no-wordlist-imgalt | Por defecto, cualquier atributo 'alt' de imagen se procesará para la wordlist específica del objetivo. Si se usa este argumento, no se procesarán. | | -nwld | --no-wordlist-digits | Excluir cualquier palabra de la wordlist específica del objetivo que contenga dígitos numéricos. | | -nwll | --no-wordlist-lowercase | Por defecto, cualquier palabra añadida con caracteres en mayúsculas también añadirá la palabra en minúsculas. Si se usa este argumento, las palabras en minúsculas no se añadirán. | | -wlml | --wordlist-maxlen | La longitud máxima de las palabras para añadir a la wordlist específica del objetivo, excluyendo plurales (por defecto: 0 - sin límite) | | -swf | --stopwords-file | Un archivo de Stop Words adicionales (además de "stopWords" en el archivo de configuración YML) utilizado para excluir palabras de la wordlist específica del objetivo. Las Stop Words se utilizan en Procesamiento de Lenguaje Natural y se pueden encontrar diferentes listas en diferentes bibliotecas. Es posible que desee agregar palabras en diferentes idiomas, dependiendo de su objetivo. | | -brt | --burpfile-remove-tags | Cuando la entrada pasada con es un archivo Burp, se le pregunta interactivamente al usuario si desea eliminar etiquetas innecesarias de ese archivo (a veces hay un problema en los archivos XML de Burp que a menudo se puede resolver eliminando etiquetas innecesarias, lo que también hará que el archivo sea más pequeño). Si está utilizando xnLinkFinder en un script, no desea detenerse por entrada del usuario, por lo que puede configurarlo pasando este argumento con o . NOTA: Este es un cambio permanente en el archivo. | | -all | --all-tlds | Todos los enlaces encontrados serán devueltos, incluso si el TLD no es común. Esto puede resultar en una serie de falsos positivos donde nombres de variables, etc. también pueden ser un dominio genuino posible. Por defecto, solo se devuelven enlaces que tengan un TLD en los TLD comunes ( en ). | | -cl | --content-length | Mostrar el Content-Length de la respuesta al rastrear. | | -nb | --no-banner | Oculta el banner de la herramienta. | | -v | --verbose | Salida verbosa | | -vv | --vverbose | Salida verbosa aumentada | | | --version | Muestra el número de versión actual. | | -h | --help | muestra el mensaje de ayuda y sale |† NO RELEVANTE PARA LA ENTRADA DE DIRECTORIO, ARCHIVO XML DE BURP, ARCHIVO DE ZAP, ARCHIVO CAIDO CSV O ARCHIVO HAR

config.yml

El archivo config.yml (generalmente en ~/.config/xnLinkFinder/) tiene las claves que se pueden actualizar según sus necesidades:

  • linkExclude - Una lista separada por comas de cadenas (por ejemplo, .css,.jpg,.jpeg, etc.) contra las que se verifican todos los enlaces. Si un enlace incluye alguna de las cadenas, se excluirá de la salida. Si la entrada es un directorio, los nombres de archivo se verifican contra esta lista.
  • contentExclude - Una lista separada por comas de cadenas (por ejemplo, text/css,image/jpeg,image/jpg, etc.) contra las que se verifican los encabezados Content-Type de todas las respuestas. Cualquier respuesta con estos tipos de contenido será excluida y no se verificará en busca de enlaces.
  • fileExtExclude - Una lista separada por comas de cadenas (por ejemplo, .zip,.gz,.tar, etc.) contra las que se verifican todos los archivos en modo Directorio. Si un archivo tiene una de esas extensiones, no se buscarán enlaces en él. Además, en modo normal, si una respuesta no tiene un tipo de contenido para verificar exclusiones, se verificarán estas extensiones al final de la URL para determinar si buscar enlaces.
  • regexFiles - Una lista de tipos de archivo separados por un carácter de tubería (por ejemplo, php|php3|php5, etc.). Estos se utilizan en la expresión regular de búsqueda de enlaces cuando hay hallazgos que no son enlaces obvios, pero son tipos de archivo interesantes que desea destacar. Si agrega a esta lista, asegúrese de escapar cualquier punto para garantizar una expresión regular correcta, por ejemplo,

† SI NO SE ENCUENTRAN EN EL ARCHIVO DE CONFIGURACIÓN, POR DEFECTO SERÁN True

Examples

Find Links from a specific target - Basic```

xnLinkFinder -i target.com -sf target.com

root@kitploit:~
### Encontrar enlaces de un objetivo específico - Detallado

Idealmente, proporcione un prefijo de alcance (`-sp`) con el dominio principal (incluyendo el esquema), y un filtro de alcance (`-sf`) para filtrar los resultados solo a dominios relevantes (esto puede ser un archivo o dominios dentro del alcance). También, puede pasar cookies y encabezados de cliente para asegurarse de encontrar enlaces solo disponibles para usuarios autorizados.
Especificar el User Agent (`-u desktop mobile`) primero buscará todos los enlaces usando User Agents de escritorio, y luego lo intentará de nuevo usando User Agents móviles. Podría haber endpoints específicos que estén relacionados con el User Agent dado. Proporcionar un valor de profundidad (`-d`) seguirá enviando solicitudes a los enlaces encontrados en la búsqueda de profundidad anterior para encontrar más enlaces.```
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

Encontrar enlaces desde una lista de URLs - Básico

Si tienes un archivo de URLs de archivos JS, por ejemplo, puedes buscar enlaces en esos:``` xnLinkFinder -i target_js.txt -sf target.com

root@kitploit:~
NOTA: Un archivo pasado se asume que es una lista de URLs si la primera línea comienza con `//` o `http` o tiene el formato de un dominio (p. ej. `example.com`, `sub.example.co.uk`), de lo contrario se considera un archivo para buscar en su contenido (a menos que sea un archivo Burp, Zap, Caido o HAR).

### Encontrar enlaces del contenido de un archivo - Básico

Si tienes una respuesta guardada, por ejemplo, puedes buscar enlaces en ella:```
xnLinkFinder -i response.txt -sf target.com

NOTA: Se asume que un archivo pasado es una lista de URLs si la primera línea comienza con // o http o es un formato de dominio (p. ej. example.com, sub.example.co.uk), de lo contrario se considera un archivo para buscar contenidos (a menos que sea un archivo Burp, Zap, Caido o HAR).

Encontrar enlaces desde archivos en un directorio - Básico

Si tienes archivos, p. ej. archivos JS, respuestas HTTP, etc., puedes buscar enlaces en ellos:``` xnLinkFinder -i ~/.config/waymore/results/target.com

root@kitploit:~
NOTA: También se verifican los subdirectorios. La opción `-mfs` se puede especificar para omitir archivos de más de cierto tamaño.

### Encontrar enlaces de un proyecto de Burp - Básico

En Burp, seleccione los elementos que desea buscar resaltando el alcance, por ejemplo, haciendo clic derecho y seleccionando `Guardar elementos seleccionados`. Asegúrese de que la opción `solicitudes y respuestas codificadas en base64` esté marcada antes de guardar.
Para obtener todos los enlaces del archivo (incluso con archivos ENORMES, podrá obtener todos los enlaces):```
xnLinkFinder -i target_burp.xml

NOTA: xnLinkFinder asume que si la primera línea del archivo pasado con -i comienza con <?xml, entonces se está intentando procesar un archivo de Burp.

Encontrar enlaces desde un proyecto de Burp - Detallado

Idealmente, proporcione el prefijo de alcance (-sp) con el dominio principal (incluyendo el esquema), y un filtro de alcance (-sf) para filtrar los resultados solo a los dominios relevantes.``` xnLinkFinder -i target_burp.xml -o target_burp.txt -sp https://www.target.com -sf target.* -ow -spo -inc -vv

root@kitploit:~
### Buscar enlaces desde un proyecto de ZAP - Básico

En ZAP, seleccione los elementos que desea buscar resaltando History por ejemplo, haciendo clic en el menú `Export` y seleccionando `Save Messages...` (o `Export Messages to File...` en versiones anteriores). Esto le permitirá guardar un archivo de texto ASCII de todas las solicitudes y respuestas que desea buscar.
Para obtener todos los enlaces del archivo (incluso con archivos MUY GRANDES, podrá obtener todos los enlaces):```
xnLinkFinder -i target_zap.txt

NOTA: xnLinkFinder asume que si la primera línea del archivo pasado con -i tiene el formato ==== 99 ========== o ===99 ========== por ejemplo, entonces estás intentando procesar un archivo de texto ASCII de ZAP.

Encontrar enlaces desde un archivo CSV exportado de Cadio - Básico

En Caido, ve a la sección History y selecciona la opción Export.

Si estás usando Caido Pro o Enterprise Edition, elige la opción Export current rows y selecciona As CSV. Ve a la sección Exports y descarga el archivo CSV. Luego pásalo como entrada:``` xnLinkFinder -i 2023-03-18-010332_csv_requests.csv

root@kitploit:~
Si estás utilizando Caido Community edition, entonces tendrás que elegir la opción **Exportar todo** y seleccionar **Como CSV**. Ve a la sección **Exportaciones** y descarga el archivo CSV. Como tienes el historial completo, querrás eliminar del archivo CSV todo lo que no sea relevante. Utiliza el siguiente ejemplo, donde `redbull` es la parte principal de los dominios del objetivo que estás buscando.```
cat 2023-03-18-010332_csv_requests.csv | grep -E '^id|^[0-9]+,[^,]*redbull' > caido_redbull.csv
xnLinkFinder -i caido_redbull.csv

NOTA: xnLinkFinder asume que si la primera línea del archivo pasado con -i está en el formato id,host,method, entonces se está intentando procesar un archivo CSV de exportación de Caido.

Encontrar enlaces desde un archivo JSON HAR (HTTP Archive) - Básico

Un archivo HAR es un archivo JSON que contiene una lista de solicitudes y respuestas HTTP. Es un formato común para almacenar tráfico HTTP. Puede exportar un archivo HAR desde la mayoría de los navegadores web, generalmente desde la pestaña Red en las Herramientas de Desarrollo. Pase el archivo como entrada:``` xnLinkFinder -i browser.har

root@kitploit:~
NOTA: xnLinkFinder asume que si el nombre del archivo termina en `.har` O la primera línea del archivo contiene `"log"` y comienza con `{`, entonces se está intentando procesar un archivo HAR.

### Encontrar enlaces desde un directorio de resultados de Waymore

La herramienta [waymore](https://github.com/xnl-h4ck3r/waymore) puede usarse para obtener URLs desde varias APIs de terceros, y también descargar respuestas archivadas de varias fuentes. Pasar un directorio de resultados de waymore a `xnLinKFinder` buscará el contenido de las respuestas archivadas, y también solicitará URLs desde `waymore.txt` y también las URLs archivadas desde `waymore_index.txt` (o `index.txt` para versiones antiguas de `waymore`) y obtendrá más enlaces de esas respuestas. Si `-d`/`--depth` es cero, entonces las URLs de `waymore_index.txt` solo serán devueltas pero no solicitadas.```
xnLinkFinder -i ~/Tools/waymore/results/target.com

NOTA: Se pasa como un directorio normal, pero xnLinkFinder determinará que es un directorio de resultados de waymore y lo procesará en consecuencia. Esto depende de la convención de nomenclatura predeterminada del archivo de URLs que sea waymore.txt y que ese archivo esté en el mismo directorio que los archivos archivados (como ocurre por defecto).

Tubería hacia otras herramientas

Puede canalizar xnLinkFinder hacia otras herramientas. Cualquier error se envía a stderr y cualquier enlace encontrado se envía a stdout. El archivo de salida todavía se crea además de que los enlaces se pasan a través de la tubería al siguiente programa. Sin embargo, los parámetros potenciales no se pasan a través de la tubería al siguiente programa, pero aún así se escriben en el archivo. Por ejemplo:``` xnLinkFinder -i redbull.com -sp https://redbull.com -sf rebbull.* -d 3 | unfurl keys | sort -u

root@kitploit:~
También puedes pasar la entrada a través de `stdin` en lugar de `-i`.```
cat redbull_subs.txt | xnLinkFinder -sp https://redbull.com -sf rebbull.* -d 3

NOTA: No se puede usar tubería para un archivo Burp, ZAP, Caido o HAR; estos deben pasarse usando -i.

Recomendaciones y Notas

  • Siempre use el argumento Prefijo de Alcance -sp. Puede ser un dominio de alcance único, o un archivo que contenga múltiples dominios de alcance. A continuación se muestran ejemplos del formato utilizado (no se debe incluir ninguna ruta, y no se usan comodines. El esquema es opcional, pero por defecto será http): ``` http://www.target.com https://target-payments.com https://static.target-cdn.com
    root@kitploit:~

Si se encuentra un enlace que no tiene dominio, p.ej. /path/to/example.js, entonces pasar -sp http://www.target.com resultará en la salida http://www.target.com/path/to/example.js y si la Profundidad (-d) es >1, se podrá realizar una solicitud a esa URL para buscar más enlaces. Si se pasa un archivo de dominios usando -sp, la salida incluirá cada dominio seguido de /path/to/example.js y aumentará la posibilidad de encontrar más enlaces.

  • Si usas -sp pero aún así deseas que el enlace original de /path/to/example.js (sin un dominio) se devuelva adicionalmente en la salida, pasa el argumento -spo.
  • Usa siempre el argumento de Filtro de Ámbito -sf. Esto asegurará que solo se devuelvan dominios relevantes en la salida, y más importante, si la Profundidad (-d) es >1, los objetivos fuera del ámbito no serán buscados en busca de enlaces o parámetros. Puede ser un dominio de ámbito, o un archivo que contenga múltiples dominios de ámbito. A continuación se muestran ejemplos del formato utilizado (no se debe incluir esquema ni ruta): ``` target.* target-payments.com static.target-cdn.com
    root@kitploit:~

ESTO ES SOLO PARA FILTRAR EL DOMINIO DE LOS ENLACES.

  • Si deseas filtrar la salida final de alguna manera, usa -ra. Siempre es buena idea usar https://regex101.com/ para verificar que tu expresión Regex haga lo que esperas.
  • Usa la opción -v para tener una mejor idea de lo que está haciendo la herramienta.
  • Si tienes problemas, usa la opción -vv que puede mostrar errores que están ocurriendo, los cuales posiblemente puedan resolverse, o puedes reportarlos como un issue en GitHub.
  • Pasa los valores de cookies (-c), headers (-H) y regex (-ra) entre comillas simples, p.ej. -ra '/api/v[0-9]\.[0-9]\*'
  • Establece la opción -o para dar un nombre de archivo de salida específico para Links, en lugar del predeterminado output.txt. Si planeas ejecutar una gran profundidad de búsquedas, comienza con 2 con la opción -v para verificar lo que se devuelve. Luego puedes aumentar la Depth, y la nueva salida se agregará al archivo existente, a menos que uses -ow.

Problemas

Si te encuentras con algún problema, o tienes ideas para mejoras, no dudes en crear un issue en Github. Si hay un problema, será útil si proporcionas el comando exacto que ejecutaste y una descripción detallada del problema. Si es posible, ejecuta con -vv para reproducir el problema y házmelo saber sobre cualquier mensaje de error que se muestre.

TODO

  • Agregar verificación de regex específica para Requests cuando se pasa un archivo proxy como entrada. Actualmente usa el mismo regex que Requests, pero esto no es ideal.
  • Obtener nombres de Cookies para agregar a la lista de parámetros potenciales.

Salida de ejemplo

Búsqueda activa de enlaces para un dominio:

...

Entrada y salida por tubería (piped):

¡Buena suerte y buena caza! Si realmente te encanta la herramienta (o cualquier otra), o te ayudaron a encontrar un gran bounty, considera COMPRARME UN CAFÉ! ☕ (¡Podría usar la cafeína!)

🤘 /XNL-h4ck3r

Buy Me a Coffee at ko-fi.com

Descargar herramienta
cli
cli
/
-sp
/
-spkf
'name1=value1; name2=value2;'
'Header1: value1; Header2: value2;'
/api/v[0-9]\.[0-9]\*
-sp
--scope-prefix
config.yml
careers,forum
LINK-URL [ORIGIN-URL]
(PREFIXED)
./
../
-i
-u desktop mobile
desktop
mobile
set-top-boxes
game-console
mobile-apple
mobile-android
mobile-windows
mobile
-u
--user-agent
http://127.0.0.1:8080
http://user:[email protected]:8000
socks5://host:port
<script>
<style>
<noscript>
<template>
config.yml
~/.config/xnLinkFinder
NOTA: si el valor de configuración YAML de respParamPathWords es True, entonces este argumento no tendrá efecto a menos que también se pase -nwlpm/--no-wordlist-parameters.
-i
true
false
commonTLDs
config.yml
js\.map
  • respParamLinksFound † - Si se deben obtener parámetros potenciales de los enlaces encontrados en las respuestas: True o False
  • respParamPathWords † - Si se deben agregar palabras de ruta en los enlaces recuperados como parámetros potenciales: True o False
  • respParamJSON † - Si el tipo MIME de la respuesta contiene JSON, si se deben agregar los valores de las claves JSON como parámetros potenciales: True o False
  • respParamJSVars † - Si las variables de javascript establecidas con var, let o const se agregan como parámetros potenciales: True o False
  • respParamXML † - Si el tipo MIME de la respuesta contiene XML, si se deben agregar los valores de los atributos XML como parámetros potenciales: True o False
  • respParamInputField † - Si el tipo MIME de la respuesta contiene HTML o JAVASCRIPT (porque HTML podría estar integrado en HTML), si se deben agregar los atributos NAME e ID de cualquier campo INPUT (o TEXTAREA/SELECT/BUTTON) como parámetros potenciales: True o False
  • respParamMetaName † - Si el tipo MIME de la respuesta contiene HTML, si se deben agregar los atributos NAME de cualquier etiqueta META como parámetros potenciales: True o False
  • wordsContentTypes - Una lista separada por comas de cadenas (por ejemplo, text/html,text/plain) para especificar qué tipos de contenido de respuesta se buscarán para palabras que se incluirán en la lista de palabras específica del objetivo.
  • stopWords - Una lista separada por comas de cadenas (por ejemplo, then,this,that) para especificar palabras que se excluyen de la lista de palabras específica del objetivo. Esta lista predeterminada está compuesta inicialmente por determinantes, conjunciones coordinantes y preposiciones del inglés, más una lista de palabras vacías de Scikit-Learn, una biblioteca de aprendizaje automático de Python.
  • commonTLDs - Una lista separada por comas de los TLD más comunes. A menos que se pase el argumento -all/--all-tlds, solo se devuelven enlaces con dominios que tengan un TLD en esta lista.
  • Establece la opción -op para dar un nombre de archivo de salida específico para Potential Parameters, en lugar del predeterminado parameters.txt. Cualquier salida se agregará al archivo existente, a menos que uses -ow.
  • Si se usa una Depth alta (-d), ten cuidado con algunos sitios que usan enlaces dinámicos, por lo que seguirá encontrando nuevos. Si no se encuentran nuevos enlaces, entonces xnlLinkFinder dejará de buscar. También se debe considerar proporcionar los flags Stop (s429, s403, sTO, sCE).
  • Si estás encontrando un gran número de enlaces, especialmente si la Depth (valor -d) es alta y tienes recursos limitados, el programa se detendrá cuando alcance el valor de Umbral de memoria (-m) y finalizará de forma ordenada con los datos intactos antes de ser eliminado.
  • Si decides cancelar xnLinkFinder (usando Ctrl-C) en medio de la ejecución, ten paciencia y cualquier dato recopilado se guardará antes de finalizar de forma ordenada.
  • Usar la opción -orig mostrará la URL donde se encontró el enlace. Esto puede significar que tengas enlaces duplicados en la salida si el mismo enlace se encontró en múltiples fuentes, pero se agregará como sufijo la URL de origen entre corchetes.
  • Al hacer solicitudes, xnLinkFinder usará un User-Agent aleatorio del grupo actual, que por defecto es desktop (a menos que se use el argumento -uc/--user-agent-custom). Si tienes un objetivo que podría tener diferentes enlaces para diferentes grupos de user agent, entonces especifica -u desktop mobile por ejemplo (separados por un espacio). La opción de user agent mobile es una combinación de mobile-apple, mobile-android y mobile-windows. Los valores posibles son desktop, mobile, set-top-boxes y game-console.
  • Cuando -i se ha establecido en un directorio, se buscarán enlaces en el contenido de los archivos en la raíz de ese directorio. No se buscan archivos en subdirectorios. Se omitirán los archivos que superen el tamaño establecido por -mfs (predeterminado: 500 MB).
  • Al usar la opción -replay-proxy, a veces las solicitudes pueden tardar más. Si comienzas a ver más errores de Request Timeout (verás errores si usas las opciones -v o -vv) entonces considera usar -t para aumentar el límite de timeout.
  • Si sabes que un objetivo solo tendrá caracteres ASCII en enlaces y parámetros, considera usar -ascii-only. Esto puede eliminar una serie de falsos positivos que a veces pueden devolverse de datos binarios.
  • Si pasas un directorio de resultados de waymore, vale la pena pasar el argumento -d/--depth para buscar cualquier enlace adicional encontrado a partir de solicitudes de URL y también -u/--user-agent si crees que podría haber contenido diferente encontrado, p.ej. -u desktop mobile.
  • Pasa siempre el nombre de archivo -owl/--output-wordlist para guardar la wordlist específica del objetivo. Esta lista puede ser muy útil al hacer fuzzing a un objetivo.
  • Las palabras para la wordlist específica del objetivo se toman de las siguientes fuentes (cualquiera de 3 caracteres o más), pero también están determinadas por los otros argumentos de wordlist (consulta la sección de Uso anterior):
    • Todas las respuestas con ciertas condiciones:
      • Solo se buscan respuestas con tipos de contenido específicos en la sección wordsContentTypes de la configuración YML. Los valores predeterminados son text/html,application/xml,application/json,text/plain
      • Palabras del contenido de la etiqueta <meta> donde:
        • Property es og:title o og:description
        • Name es description,keywords,twitter:title o twitter:description
      • Palabras de comentarios HTML
      • Palabras del atributo alt de etiquetas ``
      • Palabras del resto del HTML interno de la página, excluyendo las etiquetas <style>, <script> y <link>
    • Palabras encontradas a partir de palabras de ruta en enlaces encontrados.
    • Parámetros encontrados a partir de respuestas y enlaces.
    • Todas las palabras válidas también tendrán la versión singular/plural añadida a la wordlist si es posible.
    • Si la palabra original tiene caracteres en mayúsculas, también se añadirá una versión en minúsculas.
  • Si las "Stop Words" predeterminadas para una wordlist específica del objetivo no son suficientes, cambia en el archivo de configuración YML o proporciona stop words adicionales usando la opción -swf/--stopwords-file. Puede que quieras incluir stop words en otro idioma, dependiendo del objetivo. Las stop words se usan en Procesamiento de Lenguaje Natural (NLP) y se pueden encontrar muchas listas de stop words en línea para adaptarse a diferentes necesidades.