
Filtra e deduplica grandi elenchi di URL rimuovendo estensioni statiche, parole chiave indesiderate, ID, varianti linguistiche e parametri, producendo set di endpoint puliti per la ricognizione web.
Questo è uno strumento usato per ripulire una lista di URL. Come punto di partenza, ho preso il fantastico strumento uro di Somdev Sangwan. Ma volevo cambiare alcune cose, fare alcuni miglioramenti (come gestire i GUID) e renderlo più personalizzabile.
urless supporta Python 3.
Installa urless nell'ambiente python predefinito (globale).
pip install urless
OPPURE
pip install git+https://github.com/xnl-h4ck3r/urless.git -v
Puoi aggiornare con
pip install --upgrade urless
Configurazione rapida in un ambiente python isolato usando pipx
pipx install git+https://github.com/xnl-h4ck3r/urless.git
In pratica passi una lista di URL (da un file o tramite pipe da STDIN) e ottieni un file o un elenco di URL ripuliti. Ma in che modo vengono ripuliti? Lo spiego qui sotto, ma prima ecco alcuni termini che verranno usati:
-fe, specificate con FILTER_EXTENSIONS nel config.yml, o, se nessuna delle due cose esiste, un elenco predefinito di .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.-fk, specificate con FILTER_KEYWORDS nel config.yml, o, se nessuna delle due cose esiste, un elenco predefinito di blog,article,news,bootstrap,jquery,captcha,node_modulesLANGUAGE nel config.yml o, se non esiste, un elenco predefinito dei codici più comuni en,en-us,en-gb,fr,de,pl,nl,fi,sv,it,es,pt,ru,pt-br,es-mx,zh-tw,js.koEcco cosa succede:
-dp/--disregard-params:
REMOVE_PARAMS (o sovrascritti con l'argomento -rp/--remove-params), verranno rimossi da tutti gli URL prima dell'elaborazione.-rcid/--regex-custom-id e il percorso dell'URL contiene un ID personalizzato, verrà inclusa solo una corrispondenza con la regex dell'ID personalizzato se ci sono più URL in cui questa è l'unica differenza.-lang e l'URL contiene un codice lingua (es. ), verrà incluso solo uno dei codici lingua se ci sono più URL in cui il codice lingua è diverso.cat target_urls.txt | urless
oppure
urless -i target_urls.txt
cat target_urls.txt | urless > output.txt
oppure
urless -i target_urls.txt -o output.txt
Il file config.yml ha le chiavi che possono essere aggiornate in base alle tue esigenze:
FILTER_KEYWORDS - Un elenco separato da virgole di parole chiave (es. blog,article,news ecc.) con cui gli URL vengono confrontati in determinate circostanze.FILTER_EXTENSIONS - Un elenco separato da virgole di estensioni di file (es. .css,.jpg,.jpeg ecc.) con cui vengono confrontati tutti gli URL. Se un URL include una qualsiasi di queste stringhe, verrà escluso dall'output.LANGUAGE - Un elenco separato da virgole di codici lingua (es. en-gb,fr,nl ecc.) con cui vengono confrontati tutti gli URL quando viene passato l'argomento -lang. Se ci sono più URL con codici lingua diversi, verrà restituita solo una versione dell'URL.REMOVE_PARAMS - Un elenco separato da virgole di nomi di parametri case sensitive (es. cachebuster,cacheBuster) che verranno rimossi da tutti gli URL prima dell'elaborazione.Attualmente ci sono controlli automatici tramite regex per identificare una parte del percorso come Globally Unique ID (GUID) o ID intero, ma l'argomento -rcid / --regex-custom-id ti permette di fornire un'espressione regolare per identificare un ID personalizzato. Ad esempio, se un target ha un formato di ID specifico (che non è un GUID o un intero), puoi specificare un'espressione regex per esso, e quindi verrà restituito solo uno di questi nell'output se il resto dell'URL è lo stesso. Per esempio:
U-65241Xhttps://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
urless e passare -rcid 'U-[0-9]{5}[A-Z]', quindi l'output sarà:
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
NOTE IMPORTANTI SULLA REGEX:
-rcid.[^(\?|\/|#|$)]* alla fine della regex, il che significherà TUTTI gli altri caratteri fino alla fine della parte del percorso.^ all'inizio e $ alla fine della tua regex per assicurarti che rappresenti l'intera parte di un percorso tra gli slash. Tuttavia, verranno aggiunti automaticamente se li ometti.cat input.txt | grep -E 'U-[0-9]{5}[A-Z]' e vedere se la tua espressione sembra corretta (dovrebbe evidenziare solo ciò che ti interessa e l'intera parte del percorso che è l'ID personalizzato).https://target.com/blah/xnl/settings dove è un nome utente, non sarai in grado di creare una regex per il nome utente perché non è un formato abbastanza univoco da distinguerlo da altri possibili valori del percorso.Se incontri qualsiasi problema, o hai idee per miglioramenti, sentiti libero di aprire una issue su Github. Se c'è un problema, sarà utile se puoi fornire il comando esatto che hai eseguito e una descrizione dettagliata del problema. Se possibile, esegui con -v per riprodurre il problema e fammi sapere qualunque messaggio di errore venga mostrato.
Nessuno - sentiti libero di aprire una issue su Github per suggerire qualsiasi miglioramento.
Buona fortuna e buona caccia! Se ami davvero lo strumento (o qualsiasi altro), o ti hanno aiutato a trovare una bounty fantastica, considera l'idea di OFFRIRMI UN CAFFÈ! ☕ (mi serve la caffeina!)
🤘 /XNL-h4ck3r
| Argomento | Argomento lungo | Descrizione |
|---|
| -i | --input | Un file di URL da ripulire. |
| -o | --output | Il file di output che conterrà l'elenco di URL ripuliti (predefinito: output.txt). Se l'output viene passato tramite pipe a un altro programma, verrà scritto su STDOUT. |
| -fk | --filter-keywords | Un elenco separato da virgole di parole chiave per escludere i link (se non ci sono parametri). Questo sovrascriverà l'elenco FILTER_KEYWORDS specificato in config.yml |
| -fe | --filter-extensions | Un elenco separato da virgole di estensioni di file da escludere. Questo sovrascriverà l'elenco FILTER_EXTENSIONS specificato in config.yml |
| -rp | --remove-params | Un elenco separato da virgole di parametri case sensitive da rimuovere da TUTTI gli URL. Questo sovrascriverà l'elenco REMOVE_PARAMS specificato in config.yml. Questo può essere utile per rimuovere, ad esempio, i parametri cache buster.** |
| -ks | --keep-slash | Uno slash finale alla fine di un URL di input non verrà rimosso. Pertanto, potrebbero esserci URL identici in output, uno con e uno senza slash finale. |
| -khw | --keep-human-written | Per impostazione predefinita, qualsiasi URL con una parte di percorso che contiene più di 3 trattini (-) viene rimosso perché si presume sia contenuto scritto da umani (es. post di un blog) e non interessante. Passare questo argomento li manterrà nell'output. |
| -kym | --keep-yyyymm | Per impostazione predefinita, qualsiasi URL con un percorso contenente /YYYY/MM (dove YYYY è un anno e MM il mese) viene rimosso perché si presume sia contenuto di blog/notizie e non interessante. Passare questo argomento li manterrà nell'output. |
| -rcid | --regex-custom-id | USARE CON CAUTELA! Espressione regex per un ID personalizzato utilizzato dal tuo target. Assicurati che il valore venga passato tra virgolette. Vedi la sezione seguente per maggiori dettagli. |
| -iq | --ignore-querystring | Rimuovi la query string (inclusi i frammenti di URL #) così l'output contiene solo percorsi univoci. |
| -fnp | --fragment-not-param | Non trattare i frammenti di URL # allo stesso modo dei parametri, es. se un link ha una parola chiave di filtro e un frammento (o parametro), il link viene solitamente mantenuto, ma se questo argomento viene passato e un link ha una parola di filtro e un frammento, il link verrà rimosso. Inoltre, se questo argomento viene passato e viene usato -iq / --ignore-querystring, il frammento NON verrà rimosso dai link se nel link non c'è una query string. |
| -lang | --language | Se passato e ci sono più URL con diversi codici lingua come parte del percorso, verrà restituita solo una versione dell'URL. I codici sono specificati nella sezione LANGUAGE di config.yml. |
| -c | --config | Percorso del file di configurazione YML. Se non passato, cerca il file config.yml nella directory di configurazione predefinita, es. ~/.config/urless/. |
| -dp | --disregard-params | C'è un certo filtraggio che non viene eseguito se gli URL hanno parametri, perché per impostazione predefinita vogliamo vedere tutti i possibili parametri. Se questo argomento viene passato, il filtraggio verrà eseguito indipendentemente dall'esistenza di eventuali parametri. |
| -nb | --no-banner | Nasconde il banner dello strumento (è nascosto per impostazione predefinita se passi l'input a urless tramite pipe) nell'output. |
| --version | Mostra il numero di versione corrente. | |
| -v | --verbose | Output dettagliato |
-), MA non è un GUID. Questo implica contenuto scritto da umani, es. how-to-hack-the-planet. Se viene passato l'argomento -khw, non verrà rimosso./YYYY/MM/, es. un anno, un mese. Questo è solitamente contenuto statico come un blog. Se viene passato l'argomento -kym, non verrà rimosso.en-gb#) E l'argomento -dp/--disregard-params NON è stato passato:
xnl