
Filtert und dedupliziert große URL-Listen, indem statische Erweiterungen, unerwünschte Schlüsselwörter, IDs, Sprachvarianten und Parameter entfernt werden, und erzeugt so saubere Endpunkt-Sets für die Web-Reconnaissance.
Dies ist ein Tool zum Bereinigen einer Liste von URLs. Als Ausgangspunkt habe ich das erstaunliche Tool uro von Somdev Sangwan genommen. Aber ich wollte ein paar Dinge ändern, einige Verbesserungen vornehmen (wie den Umgang mit GUIDs) und es anpassbarer machen.
urless unterstützt Python 3.
Installiere urless in der Standard-Python-Umgebung (global).
pip install urless
ODER
pip install git+https://github.com/xnl-h4ck3r/urless.git -v
Du kannst mit folgendem Befehl aktualisieren:
pip install --upgrade urless
Schnelle Einrichtung in einer isolierten Python-Umgebung mit pipx
pipx install git+https://github.com/xnl-h4ck3r/urless.git
Du übergibst im Grunde eine Liste von URLs (aus einer Datei oder per Pipe von STDIN) und erhältst eine bereinigte Datei oder URLs als Ausgabe. Aber auf welche Weise werden sie bereinigt? Ich erkläre das weiter unten, aber zuerst einige Begriffe, die verwendet werden:
-fe übergeben, mit FILTER_EXTENSIONS in der config.yml angegeben werden kann, oder, wenn keines von beiden existiert, eine Standardliste von .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 übergeben, mit FILTER_KEYWORDS in der config.yml angegeben werden kann, oder, wenn keines von beiden existiert, eine Standardliste von blog,article,news,bootstrap,jquery,captcha,node_modulesLANGUAGE in der config.yml angegeben werden kann, oder, wenn sie nicht existiert, eine Standardliste der häufigsten Codes So funktioniert es:
-dp/--disregard-params übergeben wurde:
REMOVE_PARAMS angegeben sind (oder mit dem Argument -rp/--remove-params überschrieben wurden), werden sie vor der Verarbeitung aus allen URLs entfernt.-rcid/--regex-custom-id übergeben wird und der URL-Pfad eine Custom ID enthält, wird nur eine Übereinstimmung mit der Custom-ID-Regex aufgenommen, wenn es mehrere URLs gibt, bei denen dies der einzige Unterschied ist.-lang übergeben wird und die URL einen Sprachcode enthält (z. B. ), wird nur einer der Sprachcodes aufgenommen, wenn es mehrere URLs gibt, bei denen sich der Sprachcode unterscheidet.cat target_urls.txt | urless
oder
urless -i target_urls.txt
cat target_urls.txt | urless > output.txt
oder
urless -i target_urls.txt -o output.txt
Die Datei config.yml enthält die Schlüssel, die nach deinen Bedürfnissen angepasst werden können:
FILTER_KEYWORDS - Eine durch Kommas getrennte Liste von Schlüsselwörtern (z. B. blog,article,news usw.), gegen die URLs unter bestimmten Umständen geprüft werden.FILTER_EXTENSIONS - Eine durch Kommas getrennte Liste von Dateierweiterungen (z. B. .css,.jpg,.jpeg usw.), gegen die alle URLs geprüft werden. Wenn eine URL eine der Zeichenketten enthält, wird sie von der Ausgabe ausgeschlossen.LANGUAGE - Eine durch Kommas getrennte Liste von Sprachcodes (z. B. en-gb,fr,nl usw.), gegen die alle URLs geprüft werden, wenn das Argument -lang übergeben wird. Wenn es mehrere URLs mit unterschiedlichen Sprachcodes gibt, wird nur eine Version der URL ausgegeben.REMOVE_PARAMS - Eine durch Kommas getrennte Liste von groß-/kleinschreibungsempfindlichen Parameternamen (z. B. cachebuster,cacheBuster), die vor der Verarbeitung aus allen URLs entfernt werden.Es gibt derzeit automatische Regex-Prüfungen für einen Pfadteil, der eine global eindeutige ID (GUID) oder eine Integer-ID ist. Das Argument -rcid / --regex-custom-id ermöglicht es dir jedoch, einen regulären Ausdruck zur Identifizierung einer benutzerdefinierten ID (Custom ID) bereitzustellen. Wenn ein Ziel beispielsweise ein bestimmtes ID-Format hat (das keine GUID oder Integer ist), kannst du einen Regex-Ausdruck dafür angeben, und es wird dann nur eine davon in der Ausgabe zurückgegeben, wenn der Rest der URL gleich ist. Zum Beispiel:
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 aufrufen und -rcid 'U-[0-9]{5}[A-Z]' übergeben, dann wäre die Ausgabe:
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
WICHTIGE HINWEISE ZUR REGEX:
-rcid übergibst.[^(\?|\/|#|$)]* an das Ende deiner Regex hinzu, was ALLE anderen Zeichen bis zum Ende des Pfadteils bedeutet.^ am Anfang und $ am Ende deiner Regex hinzufügen, um sicherzustellen, dass sie den gesamten Teil eines Pfades zwischen Schrägstrichen darstellt. Diese werden jedoch automatisch für dich hinzugefügt, wenn sie weggelassen werden.cat input.txt | grep -E 'U-[0-9]{5}[A-Z]' ausführen und prüfen, ob dein Ausdruck korrekt aussieht (er sollte nur das hervorheben, was dich interessiert, und den gesamten Teil des Pfades hervorheben, der die Custom ID ist).https://target.com/blah/xnl/settings gibt, wobei ein Benutzername ist, wirst du keine Regex für einen Benutzernamen erstellen können, da es kein ausreichend eindeutiges Format ist, um ihn von anderen möglichen Pfadwerten zu unterscheiden.Wenn du auf irgendwelche Probleme stößt oder Ideen für Verbesserungen hast, erstelle bitte gerne ein Issue auf Github. Wenn es ein Problem gibt, ist es hilfreich, wenn du den genauen Befehl, den du ausgeführt hast, und eine detaillierte Beschreibung des Problems bereitstellen kannst. Wenn möglich, führe den Befehl mit -v aus, um das Problem zu reproduzieren, und teile mir eventuelle Fehlermeldungen mit.
Keine - erstelle gerne ein Github-Issue, um Verbesserungen vorzuschlagen.
Viel Glück und viel Erfolg bei der Jagd! Wenn du das Tool (oder andere) wirklich liebst oder sie dir geholfen haben, ein tolles Bounty zu finden, denke über KAUF MIR EINEN KAFFEE! ☕ nach (Ich könnte das Koffein gebrauchen!)
🤘 /XNL-h4ck3r
| Argument | Langes Argument | Beschreibung |
|---|
| -i | --input | Eine Datei mit URLs, die bereinigt werden sollen. |
| -o | --output | Die Ausgabedatei, die die bereinigte Liste von URLs enthält (Standard: output.txt). Wenn an ein anderes Programm weitergeleitet wird, wird die Ausgabe stattdessen nach STDOUT geschrieben. |
| -fk | --filter-keywords | Eine durch Kommas getrennte Liste von Schlüsselwörtern zum Ausschließen von Links (wenn es keine Parameter gibt). Dies überschreibt die in config.yml angegebene Liste FILTER_KEYWORDS. |
| -fe | --filter-extensions | Eine durch Kommas getrennte Liste von Dateierweiterungen, die ausgeschlossen werden sollen. Dies überschreibt die in config.yml angegebene Liste FILTER_EXTENSIONS. |
| -rp | --remove-params | Eine durch Kommas getrennte Liste von groß-/kleinschreibungsempfindlichen Parametern, die aus ALLEN URLs entfernt werden sollen. Dies überschreibt die in config.yml angegebene Liste REMOVE_PARAMS. Dies kann zum Beispiel nützlich sein, um Cache-Buster-Parameter zu entfernen.** |
| -ks | --keep-slash | Ein abschließender Schrägstrich am Ende einer URL in der Eingabe wird nicht entfernt. Daher können identische URLs ausgegeben werden, eine mit und eine ohne abschließenden Schrägstrich. |
| -khw | --keep-human-written | Standardmäßig wird jede URL mit einem Pfadteil entfernt, der mehr als 3 Bindestriche (-) enthält, da angenommen wird, dass es sich um von Menschen geschriebenen Inhalt handelt (z. B. Blogbeitrag), der nicht interessant ist. Durch die Übergabe dieses Arguments bleiben sie in der Ausgabe erhalten. |
| -kym | --keep-yyyymm | Standardmäßig wird jede URL mit einem Pfad entfernt, der /YYYY/MM enthält (wobei YYYY ein Jahr und MM einen Monat darstellt), da angenommen wird, dass es sich um Blog-/Nachrichteninhalte handelt, die nicht interessant sind. Durch die Übergabe dieses Arguments bleiben sie in der Ausgabe erhalten. |
| -rcid | --regex-custom-id | MIT VORSICHT VERWENDEN! Regex für eine benutzerdefinierte ID (Custom ID), die dein Ziel verwendet. Stelle sicher, dass der Wert in Anführungszeichen übergeben wird. Weitere Details dazu findest du im Abschnitt unten. |
| -iq | --ignore-querystring | Entfernt den Query-String (einschließlich URL-Fragmenten #), sodass die Ausgabe nur eindeutige Pfade enthält. |
| -fnp | --fragment-not-param | Behandelt URL-Fragmente # nicht auf die gleiche Weise wie Parameter, z. B. wird ein Link normalerweise behalten, wenn er ein Filter-Schlüsselwort und ein Fragment (oder einen Parameter) hat. Wenn dieses Argument jedoch übergeben wird und ein Link ein Filterwort und ein Fragment hat, wird der Link entfernt. Wenn dieses Argument außerdem übergeben wird und -iq / --ignore-querystring verwendet wird, wird das Fragment NICHT aus Links entfernt, wenn sich kein Query-String im Link befindet. |
| -lang | --language | Wenn übergeben und es mehrere URLs mit unterschiedlichen Sprachcodes als Teil des Pfades gibt, wird nur eine Version der URL ausgegeben. Die Codes sind im Abschnitt LANGUAGE der config.yml angegeben. |
| -c | --config | Pfad zur YML-Konfigurationsdatei. Wenn nicht übergeben, sucht das Tool nach der Datei config.yml im Standard-Konfigurationsverzeichnis, z. B. ~/.config/urless/. |
| -dp | --disregard-params | Es gibt eine bestimmte Filterung, die nicht durchgeführt wird, wenn die URLs Parameter haben, da wir standardmäßig alle möglichen Parameter sehen wollen. Wenn dieses Argument übergeben wird, wird die Filterung unabhängig von der Existenz von Parametern durchgeführt. |
| -nb | --no-banner | Blendet die Tool-Banner-Ausgabe aus (sie ist standardmäßig ausgeblendet, wenn du die Eingabe an urless weiterleitest). |
| --version | Zeigt die aktuelle Versionsnummer an. | |
| -v | --verbose | Ausführliche Ausgabe |
en,en-us,en-gb,fr,de,pl,nl,fi,sv,it,es,pt,ru,pt-br,es-mx,zh-tw,js.ko-), ist aber KEINE GUID. Dies deutet auf von Menschen geschriebenen Inhalt hin, z. B. how-to-hack-the-planet. Wenn das Argument -khw übergeben wird, wird dies nicht entfernt./YYYY/MM/, z. B. ein Jahr, einen Monat. Dies ist normalerweise statischer Inhalt wie ein Blog. Wenn das Argument -kym übergeben wird, wird dies nicht entfernt.en-gb#) UND das Argument -dp/--disregard-params wurde NICHT übergeben:
xnl