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
Herramientas/GitHubGitHub/xnl-h4ck3r/urless
ReconocimientoRecopilación de InformaciónSeguridad WebPruebas de PenetraciónUtilidades y Frameworks
GitHubxnl-h4ck3r/urless

urless

Filtra y deduplica grandes listas de URLs eliminando extensiones estáticas, palabras clave no deseadas, IDs, variantes de idioma y parámetros, produciendo conjuntos de endpoints limpios para el reconocimiento web.

Ver Repositorio
39141hace 5 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 - v2.7

Esta es una herramienta utilizada para depurar una lista de URLs. Como punto de partida, tomé la increíble herramienta uro de Somdev Sangwan. Pero quería cambiar algunas cosas, hacer algunas mejoras (como lidiar con GUIDs) y hacerla más personalizable.

Instalación

urless es compatible con Python 3.

Instala urless en el entorno de Python por defecto (global).

root@kitploit:~
pip install urless

O

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

Puedes actualizarlo con

root@kitploit:~
pip install --upgrade urless

pipx

Configuración rápida en un entorno de Python aislado usando pipx

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

Uso

¿Qué hace exactamente?

Básicamente pasas una lista de URLs (desde un archivo, o canalizada desde STDIN), y obtienes un archivo depurado de URLs de salida. Pero, ¿de qué manera se depuran? Te lo explicaré a continuación, pero primero estos son algunos términos que se usarán:

  • FILTER-EXTENSIONS: Esto se refiere a la lista de extensiones que se pueden pasar con -fe, especificadas con FILTER_EXTENSIONS en config.yml, o si no existe ninguna de esas, una lista predeterminada 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: Esto se refiere a la lista de palabras clave que se pueden pasar con -fk, especificadas con FILTER_KEYWORDS en config.yml, o si no existe ninguna de esas, una lista predeterminada de blog,article,news,bootstrap,jquery,captcha,node_modules.
  • LANGUAGE: Esto se refiere a la lista de códigos de idioma que se pueden especificar con LANGUAGE en config.yml, o si no existe, una lista predeterminada de los códigos más comunes en,en-us,en-gb,fr,de,pl,nl,fi,sv,it,es,pt,ru,pt-br,es-mx,zh-tw,js.ko.

Esto es lo que sucede:

  • Si una URL tiene el puerto 80 o 443 explícitamente indicado, se elimina de la URL (p. ej. http://example.com:80/test -> http://example.com/test).
  • Si la URL tiene alguna de las FILTER-EXTENSIONS, se eliminará de la salida.
  • Si la URL NO tiene parámetros O se pasó el argumento -dp/--disregard-params:
    • Si la URL contiene una FILTER-KEYWORDS o UNWANTED-CONTENT, se eliminará.
    • Si la cadena de consulta de la URL contiene parámetros no deseados especificados en la configuración REMOVE_PARAMS (o anulados con el argumento -rp/--remove-params), se eliminarán de todas las URLs antes del procesamiento.
    • Si se pasa -rcid/--regex-custom-id y la ruta de la URL contiene un ID personalizado, solo se incluirá una coincidencia con la regex del ID personalizado si hay múltiples URLs donde esa es la única diferencia.
    • Si la ruta de la URL contiene un GUID, solo se incluirá uno de los GUID si hay múltiples URLs donde el GUID es la única diferencia.
    • Si la ruta de la URL contiene un ID entero, solo se incluirá uno de los IDs enteros si hay múltiples URLs donde el ID entero es la única diferencia.
    • Si se pasa el argumento -lang y la URL contiene un código de idioma (p. ej. ), solo se incluirá uno de los códigos de idioma si hay múltiples URLs donde el código de idioma es diferente.

Ejemplos

Uso básico

root@kitploit:~
cat target_urls.txt | urless

o

root@kitploit:~
urless -i target_urls.txt

Capturar la salida

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

o

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

config.yml

El archivo config.yml tiene las claves que se pueden actualizar según tus necesidades:

  • FILTER_KEYWORDS - Una lista de palabras clave separadas por comas (p. ej. blog,article,news, etc.) contra las que se verifican las URLs en ciertas circunstancias.
  • FILTER_EXTENSIONS - Una lista de extensiones de archivo separadas por comas (p. ej. .css,.jpg,.jpeg, etc.) contra las que se verifican todas las URLs. Si una URL incluye alguna de las cadenas, se excluirá de la salida.
  • LANGUAGE - Una lista de códigos de idioma separados por comas (p. ej. en-gb,fr,nl, etc.) contra los que se verifican todas las URLs cuando se pasa el argumento -lang. Si hay múltiples URLs con diferentes códigos de idioma, solo se generará una versión de la URL.
  • REMOVE_PARAMS - Una lista de nombres de parámetros separados por comas sensibles a mayúsculas (p. ej. cachebuster,cacheBuster) que se eliminarán de todas las URLs antes del procesamiento.

Regex personalizada

Actualmente hay comprobaciones automáticas de regex para que una parte de la ruta sea un Identificador Único Global (GUID) o un ID entero, pero el argumento -rcid / --regex-custom-id te permite proporcionar una expresión regular para identificar un ID personalizado. Por ejemplo, si un objetivo tiene un formato de ID específico (que no es un GUID ni un entero), entonces puedes especificar una expresión regex para él, y solo se devolverá uno de esos en la salida si el resto de la URL es igual. Por ejemplo:

  • Supón que el objetivo tiene un ID de usuario en un formato como U-65241X
  • Y hay múltiples URLs como las siguientes:
    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
    
  • Puedes llamar a urless y pasar -rcid 'U-[0-9]{5}[A-Z]', entonces la salida sería:
    root@kitploit:~
    https://target.com/blah/U-61723A/settings
    https://target.com/blah/U-64135C/profile
    

NOTAS IMPORTANTES SOBRE LA REGEX:

  • Escribir expresiones regex correctas puede ser difícil, y si no es correcta, podrías terminar con una salida impredecible e incorrecta.
  • Encierra siempre tu expresión regex entre comillas simples al pasarla al argumento -rcid.
  • No necesitas añadir una regex personalizada para un GUID o ID entero - estos ya se manejan.
  • La expresión regex debe resaltar toda la parte de la ruta. Por lo tanto, si tu regex solo identifica el comienzo de la ruta, añade [^(\?|\/|#|$)]* al final de tu regex, lo que significará TODOS los demás caracteres hasta el final de la parte de la ruta.
  • Puedes añadir ^ al principio y $ al final de tu regex para asegurar que representa toda la parte de una ruta entre barras. Sin embargo, se añadirán automáticamente si los omites.
  • Asegúrate de que la regex solo identifique las secciones que te interesan, de lo contrario podrías tener resultados inesperados. Para probar tu regex, puedes tomar tu archivo de entrada y ejecutar cat input.txt | grep -E 'U-[0-9]{5}[A-Z]', por ejemplo, y ver si tu expresión parece correcta (debería resaltar solo lo que te interesa y resaltar toda la parte de la ruta que es el ID personalizado).
  • También puedes probar usando Regex101, introduciendo URLs de ejemplo en la sección TEST STRING para comprobar si es correcta. Asegúrate de que las REGEX FLAGS global y multilínea estén seleccionadas.
  • Puede haber casos en los que simplemente no puedas proporcionar una regex que identifique correctamente el ID personalizado sin tratar otros valores como iguales. Por ejemplo, si hay URLs como https://target.com/blah/xnl/settings donde xnl es un nombre de usuario, no podrás crear una regex para el nombre de usuario porque no es un formato lo suficientemente único como para distinguirlo de otros posibles valores de ruta.

Problemas

Si te encuentras con cualquier problema, o tienes ideas para mejoras, no dudes en abrir un issue en Github. Si hay un problema, será útil que proporciones el comando exacto que ejecutaste y una descripción detallada del problema. Si es posible, ejecuta con -v para reproducir el problema y hazme saber los mensajes de error que se muestren.

TODO

Ninguno - no dudes en abrir un issue en Github para sugerir mejoras.

Y finalmente...

¡Buena suerte y buena caza! Si de verdad te encanta la herramienta (o cualquiera de las otras), o te ayudaron a encontrar un bounty increíble, considera ¡INVITARME UN CAFÉ! ☕ (¡me vendría bien la cafeína!).

🤘 /XNL-h4ck3r

Invítame a un café en ko-fi.com

Descargar herramienta
ArgumentoArgumento LargoDescripción
-i--inputUn archivo de URLs a depurar.
-o--outputEl archivo de salida que contendrá la lista depurada de URLs (por defecto: output.txt). Si se canaliza a otro programa, la salida se escribirá en STDOUT.
-fk--filter-keywordsUna lista de palabras clave separadas por comas para excluir enlaces (si no hay parámetros). Esto anulará la lista FILTER_KEYWORDS especificada en config.yml
-fe--filter-extensionsUna lista de extensiones de archivo separadas por comas para excluir. Esto anulará la lista FILTER_EXTENSIONS especificada en config.yml
-rp--remove-paramsUna lista separada por comas de parámetros sensibles a mayúsculas para eliminar de TODAS las URLs. Esto anulará la lista REMOVE_PARAMS especificada en config.yml. Esto puede ser útil para eliminar parámetros de cache buster, por ejemplo.**
-ks--keep-slashUna barra diagonal final al final de una URL de entrada no se eliminará. Por lo tanto, puede haber URLs idénticas en la salida, una con y otra sin barra diagonal final.
-khw--keep-human-writtenPor defecto, cualquier URL con una parte de la ruta que contenga más de 3 guiones (-) se elimina porque se asume que es contenido escrito por humanos (por ejemplo, una entrada de blog), y no es interesante. Pasar este argumento las mantendrá en la salida.
-kym--keep-yyyymmPor defecto, cualquier URL con una ruta que contenga /YYYY/MM (donde YYYY es un año y MM el mes) se elimina porque se asume que es contenido de blog/noticias, y no es interesante. Pasar este argumento las mantendrá en la salida.
-rcid--regex-custom-id¡ÚSALO CON PRECAUCIÓN! Expresión regular (regex) para un ID personalizado que usa tu objetivo. Asegúrate de pasar el valor entre comillas. Consulta la sección siguiente para más detalles.
-iq--ignore-querystringElimina la cadena de consulta (incluyendo los fragmentos de URL #) para que la salida contenga solo rutas únicas.
-fnp--fragment-not-paramNo trates los fragmentos de URL # de la misma manera que los parámetros, p. ej. si un enlace tiene una palabra clave de filtro y un fragmento (o parámetro), el enlace normalmente se conserva, pero si se pasa este argumento y un enlace tiene una palabra de filtro y un fragmento, el enlace se eliminará. Además, si se pasa este argumento y se usa -iq / --ignore-querystring, el fragmento NO se eliminará de los enlaces si no hay una cadena de consulta en el enlace.
-lang--languageSi se pasa y hay múltiples URLs con diferentes códigos de idioma como parte de la ruta, solo se generará una versión de la URL. Los códigos se especifican en la sección LANGUAGE de config.yml.
-c--configRuta al archivo de configuración YML. Si no se pasa, busca el archivo config.yml en el directorio de configuración predeterminado, p. ej. ~/.config/urless/.
-dp--disregard-paramsHay cierto filtrado que no se realiza si las URLs tienen parámetros, porque por defecto queremos ver todos los parámetros posibles. Si se pasa este argumento, entonces se realizará el filtrado, independientemente de la existencia de parámetros.
-nb--no-bannerOculta el banner de la herramienta en la salida (está oculto por defecto si canalizas la entrada a urless).
--versionMuestra el número de versión actual.
-v--verboseSalida detallada.
  • UNWANTED-CONTENT:
    • Una sección de la ruta de la URL contiene más de 3 guiones (-), PERO no es un GUID. Esto implica contenido escrito por humanos, p. ej. how-to-hack-the-planet. Si se pasa el argumento -khw, esto no se eliminará.
    • La URL contiene /YYYY/MM/, p. ej. un año, mes. Esto suele ser contenido estático como un blog. Si se pasa el argumento -kym, esto no se eliminará.
  • en-gb
  • De lo contrario, la URL tiene parámetros (o un fragmento #) Y el argumento -dp/--disregard-params NO se pasó:
    • Si hay múltiples URLs con los mismos parámetros, solo se incluyen las URLs con valores de parámetros únicos.
    • Si hay URLs con un parámetro, pero sin valor (o un fragmento), entonces se incluirá.