
Ein Python-Tool zum Entdecken von Endpunkten, potenziellen Parametern, einer zielspezifischen Wortliste für ein bestimmtes Ziel und Geheimnissen.
Dieses Tool wird verwendet, um Endpunkte zu entdecken, potenzielle Parameter zu entdecken, eine zielspezifische Wortliste zu generieren und Geheimnisse für ein bestimmtes Ziel zu finden. Es kann sie finden durch:
waymore -mode R sowie Anfordern von URLs aus waymore.txt und den ursprünglichen URLs aus waymore_index.txt – siehe waymore README.md)Das Python-Skript basiert auf den Link-Finding-Fähigkeiten meiner Burp-Erweiterung GAP. Als Ausgangspunkt habe ich das großartige Tool LinkFinder von Gerben Javado genommen und den Regex zum Finden von Links verwendet, jedoch mit zusätzlichen Verbesserungen, um noch mehr zu finden.
xnLinkFinder unterstützt Python 3.
Installiere xnLinkFinder in der standardmäßigen (globalen) Python-Umgebung.```bash
pip install xnLinkFinder
ODER```bash
pip install git+https://github.com/xnl-h4ck3r/xnLinkFinder.git -v
Sie können upgraden mit```bash pip install --upgrade xnLinkFinder
### pipx
Schnelle Einrichtung in einer isolierten Python-Umgebung mit [pipx](https://pypa.github.io/pipx/)```bash
pipx install git+https://github.com/xnl-h4ck3r/xnLinkFinder.git
HINWEIS: Um Links aus PDF-Dateien zu extrahieren, können Sie pdftotext auf Ihrem System installieren. Sie können es unter Linux mit sudo apt install -y poppler-utils oder unter macOS mit brew install poppler installieren. Wenn pdftotext nicht installiert ist, verwendet xnLinkFinder als Fallback die Python-Bibliothek pypdf. Wenn kein Text gefunden wird (z.B. bei gescannten PDFs), wird versucht, ocrmypdf zu verwenden, falls installiert (z.B. sudo apt install -y ocrmypdf). Die Verwendung von pdftotext und ocrmypdf liefert in der Regel deutlich bessere Ergebnisse als pypdf allein.
| ----------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| -i | --input | Eingabe: eine URL, eine Textdatei mit URLs, ein Verzeichnis mit zu durchsuchenden Dateien, eine Burp-XML-Ausgabedatei, eine ZAP-Ausgabedatei, eine Caido-CSV-Datei, eine HAR-JSON-Datei oder eine einzelne Datei, deren Inhalt durchsucht werden soll. |
| -o | --output | Die Datei, in die die Links ausgegeben werden sollen, inklusive Pfad falls nötig (Standard: output.txt). Wenn auf cli gesetzt, wird die Ausgabe nur nach STDOUT geschrieben. Wenn die Datei bereits existiert, wird sie nur angehängt (und dedupliziert), es sei denn, die Option -ow wird übergeben. |
| -op | --output-params | Die Datei, in die die potenziellen Parameter ausgegeben werden sollen, inklusive Pfad falls nötig (Standard: parameters.txt). Wenn auf cli gesetzt, wird die Ausgabe nur nach STDOUT geschrieben (aber nicht an ein anderes Programm weitergeleitet). Wenn die Datei bereits existiert, wird sie nur angehängt (und dedupliziert), es sei denn, die Option -ow wird übergeben. |
| -owl | --output-wordlist | Die Datei, in die die zielspezifische Wortliste ausgegeben werden soll, inklusive Pfad falls nötig (Standard: Keine Wortlistenausgabe). Wenn auf gesetzt, wird die Ausgabe nur nach STDOUT geschrieben (aber nicht an ein anderes Programm weitergeleitet). Wenn die Datei bereits existiert, wird sie nur angehängt (und dedupliziert), es sei denn, die Option wird übergeben. |
| -oo | --output-oos | Die Datei, in die die Out-of-Scope-Links ausgegeben werden sollen, inklusive Pfad falls nötig (Standard: Keine OOS-Ausgabe). Wenn auf gesetzt, wird die Ausgabe nur nach STDOUT geschrieben (aber nicht an ein anderes Programm weitergeleitet). Wenn die Datei bereits existiert, wird sie nur angehängt (und dedupliziert), es sei denn, die Option wird übergeben. |
| -os | --output-secrets | Die Datei, in die alle in Antworten gefundenen Geheimnisse gespeichert werden (JSON-Format), inklusive Pfad falls nötig (Standard: Keine Geheimnisausgabe). Wenn die Datei bereits existiert, werden die Geheimnisse zusammengeführt, es sei denn, die Option wird übergeben. Geheimnisse werden nach Typ und Wert gruppiert, mit einem Array von Quellen, in denen jedes gefunden wurde. |
| -ow | --output-overwrite | Wenn die Ausgabedatei bereits existiert, wird sie überschrieben, anstatt dass angehängt wird. |
| -sp | --scope-prefix | Alle gefundenen Links, die mit beginnen, werden im Ausgabe mit den Scope-Domains als Präfix versehen, anstatt mit dem ursprünglichen Link. Wenn der übergebene Wert ein gültiger Dateiname ist, wird diese Datei verwendet, andernfalls wird das Literal verwendet. |
| -spo | --scope-prefix-original | Wenn das Argument übergeben wird, legt dies fest, ob der ursprüngliche Link, der mit beginnt, ebenfalls in der Ausgabe enthalten ist (Standard: false) |
| -spkf | --scope-prefix-keep-failed | Wenn das Argument übergeben wird, legt dies fest, ob ein mit Präfix versehener Link in der Ausgabe behalten wird, falls er ein 404 oder eine RequestException war (Standard: false) |
| -sf | --scope-filter | Filtert die Ausgabelinks so, dass sie nur dann enthalten sind, wenn die Domain des Links im angegebenen Scope liegt. Wenn der übergebene Wert ein gültiger Dateiname ist, wird diese Datei verwendet, andernfalls wird das Literal verwendet. Dieses Argument ist nun obligatorisch, wenn die Eingabe eine Domain/URL (oder eine Datei mit Domains/URLs) ist, um zu verhindern, dass nicht im Scope liegende Seiten gecrawlt werden und auch um irreführende Ergebnisse zu vermeiden. |
| -c | --cookies † | Fügt Cookies hinzu, die mit HTTP-Anfragen gesendet werden. Übergeben im Format |
| -H | --headers † | Fügt benutzerdefinierte Header hinzu, die mit HTTP-Anfragen gesendet werden. Übergeben im Format |
| -ra | --regex-after | Regex zum Filtern von gefundenen Endpunkten vor der Ausgabe (z. B. ). Wenn es zutrifft, wird der Link ausgegeben. |
| -d | --depth † | Die Tiefe der Suche. Wenn beispielsweise ein Wert von 2 übergeben wird, werden alle zuerst gefundenen Links dann ebenfalls durchsucht (Standard: 1). Diese Option wird für Burp-Dateien, ZAP-Dateien, Caido-Dateien und HAR-Dateien ignoriert, da diese sehr groß sein können und viel Speicher verbrauchen. Es wird auch empfohlen, das Argument () zu verwenden, um sicherzustellen, dass eine Anfrage an Links ohne Domain versucht werden kann. |
| -p | --processes † | Grundlegendes Multithreading wird beim Abrufen von Anfragen für eine URL oder eine Datei mit URLs durchgeführt (nicht für Burp-Dateien, ZAP-Dateien, Caido-Dateien oder HAR-Dateien). Dieses Argument bestimmt die Anzahl der verwendeten Prozesse (Threads) (Standard: 25) |
| -rl | --rate-limit † | Maximale Anzahl von Anfragen pro Sekunde (Standard: 0, keine Ratenbegrenzung). Dies hilft, den Zielserver nicht zu überlasten. |
| -x | --exclude | Zusätzliche Linkausschlüsse (zusätzlich zur Liste in ) als kommagetrennte Liste, z. B. |
| -orig | --origin | Gibt an, ob der Ursprung des Links in der Ausgabe angezeigt werden soll. Angezeigt als in der Ausgabe (Standard: false) |
| -prefixed | | Gibt an, ob angezeigt werden soll, welche Links mit Präfix versehen wurden. Zeigt nach Link und Ursprung in der Ausgabe an (Standard: false) |
| -xrel | --exclude-relative-links | Standardmäßig werden alle Links, die mit oder beginnen, mit aufgenommen. Wenn dieses Argument verwendet wird, werden diese relativen Links nicht hinzugefügt. |
| -t | --timeout † | Wie viele Sekunden auf die Daten des Servers gewartet werden soll, bevor aufgegeben wird (Standard: 10 Sekunden) |
| -r | --retries † | Die Anzahl der Wiederholungsversuche nach einem Fehler (z. B. Timeout, Verbindungsfehler usw.). Dies ist auf 5 Wiederholungen begrenzt (Standard: 0) |
| -inc | --include | Eingabelinks () in die Ausgabe aufnehmen (Standard: false) |
| -u | --user-agent † | Welche User-Agents für Links abgerufen werden sollen, z. B. . Mögliche Werte sind , , und . Es gibt auch , und , die Teilmengen von sind, aber separat verwendet werden können. |
| -uc | --user-agent-custom † | Eine benutzerdefinierte User-Agent-Zeichenfolge, die für alle Anfragen verwendet wird. Dies überschreibt das Argument /. Kann verwendet werden, wenn ein Programm einen bestimmten User-Agent-Header zur Identifizierung benötigt. |
| -insecure | † | Gibt an, ob TLS-Zertifikatsprüfungen beim Senden von Anfragen deaktiviert werden sollen (Standard: false) |
| -s429 | † | Stoppen, wenn mehr als 95 % der Antworten 429 Too Many Requests zurückgeben (Standard: false) |
| -s403 | † | Stoppen, wenn mehr als 95 % der Antworten 403 Forbidden zurückgeben (Standard: false) |
| -sTO | † | Stoppen, wenn mehr als 95 % der Anfragen einen Timeout haben (Standard: false) |
| -sCE | † | Stoppen, wenn mehr als 95 % der Anfragen Verbindungsfehler aufweisen (Standard: false) |
| -m | --memory-threshold | Der Speicherschwellenwert in Prozent. Wenn der Maschinenspeicher über dem Schwellenwert liegt, wird das Programm gestoppt und ordnungsgemäß beendet, bevor der Speicher ausgeht (Standard: 95) |
| -mfs | --max-file-size † | Die maximale Dateigröße (in Bytes) einer Datei, die überprüft wird, wenn ein Verzeichnis ist. Wenn die Dateigröße überschritten wird, wird sie ignoriert (Standard: 500 MB). Auf 0 setzen bedeutet, dass keine Dateien ignoriert werden, unabhängig von der Größe. |
| -mrs | --max-response-size † | Die maximale Antwortgröße (in MB) zum Herunterladen. Antworten größer als dieser Wert werden übersprungen (Standard: 100 MB). |
| -fp | --forward-proxy † | Für aktive Linkfindung mit URL (oder Datei mit URLs), Anfragen über einen Proxy wie Burp oder Caido wiederholen, z. B. . |
| -rp | --request-proxy | Zu verwendender Anfrage-Proxy. Kann ein Proxy-String sein (z. B. , ) oder eine Datei mit einer Proxyliste (eine pro Zeile, zufällige Auswahl). |
| | --heap | Gibt an, ob ein Heap-Snapshot der besuchten URLs erstellt und Links aus dem Browser-Arbeitsspeicher extrahiert werden sollen. Dies dauert länger, könnte aber dynamisch generierte Links finden, die die standardmäßige statische Analyse übersehen könnte (Erfordert Playwright-Installation). |
| -ro | --readable-only | Wenn übergeben, wird nur menschenlesbarer Text aus HTML-Antworten/-Dateien mit BeautifulSoup extrahiert, bevor nach Links gesucht wird. Dies schließt Inhalte von , , und -Tags aus. |
| -ascii-only | | Gibt an, ob Links und Parameter nur hinzugefügt werden, wenn sie nur ASCII-Zeichen enthalten. Dies kann nützlich sein, wenn das Ziel wahrscheinlich ASCII-Zeichen verwendet und man aus irgendeinem Grund viele Fehlalarme von Binärdateien erhält. |
| -mtl | --max-time-limit | Die maximale Zeitbegrenzung (in Minuten) für den Lauf, bevor gestoppt wird (Standard: 0). Bei 0 gibt es keine Begrenzung. |
| | --config | Pfad zur YML-Konfigurationsdatei. Wenn nicht übergeben, wird nach der Datei im Standardverzeichnis (normalerweise ) gesucht. |
| -nwlpl | --no-wordlist-plurals | Wenn Wörter für eine zielspezifische Wortliste gefunden werden, werden standardmäßig neue Wörter hinzugefügt, wenn es ein Singularwort von einem Plural gibt und umgekehrt. Wenn dieses Argument verwendet wird, wird dieser Vorgang nicht durchgeführt. |
| -nwlpw | --no-wordlist-pathwords | Standardmäßig werden alle in Links gefundenen Pfadwörter für die zielspezifische Wortliste verarbeitet. Wenn dieses Argument verwendet wird, werden sie nicht verarbeitet. |
| -nwlpm | --no-wordlist-parameters | Standardmäßig werden alle in Links gefundenen Parameter für die zielspezifische Wortliste verarbeitet. Wenn dieses Argument verwendet wird, werden sie nicht verarbeitet. |
| -nwlc | --no-wordlist-comments | Standardmäßig werden alle Kommentare in Seiten für die zielspezifische Wortliste verarbeitet. Wenn dieses Argument verwendet wird, werden sie nicht verarbeitet. |
| -nwlia | --no-wordlist-imgalt | Standardmäßig werden alle 'alt'-Attribute von Bildern für die zielspezifische Wortliste verarbeitet. Wenn dieses Argument verwendet wird, werden sie nicht verarbeitet. |
| -nwld | --no-wordlist-digits | Schließt alle Wörter mit numerischen Ziffern aus der zielspezifischen Wortliste aus. |
| -nwll | --no-wordlist-lowercase | Standardmäßig wird für jedes hinzugefügte Wort mit Großbuchstaben auch das Wort in Kleinbuchstaben hinzugefügt. Wenn dieses Argument verwendet wird, werden die Kleinbuchstaben nicht hinzugefügt. |
| -wlml | --wordlist-maxlen | Die maximale Länge von Wörtern, die der zielspezifischen Wortliste hinzugefügt werden, ohne Plurale (Standard: 0 - keine Begrenzung) |
| -swf | --stopwords-file | Eine Datei mit zusätzlichen Stoppwörtern (zusätzlich zu "stopWords" in der YML-Konfigurationsdatei) zum Ausschließen von Wörtern aus der zielspezifischen Wortliste. Stoppwörter werden in der Verarbeitung natürlicher Sprache verwendet, und verschiedene Listen sind in verschiedenen Bibliotheken zu finden. Je nach Ziel können Wörter in verschiedenen Sprachen hinzugefügt werden. |
| -brt | --burpfile-remove-tags | Wenn die mit übergebene Eingabe eine Burp-Datei ist, wird der Benutzer interaktiv gefragt, ob unnötige Tags aus dieser Datei entfernt werden sollen (manchmal gibt es Probleme in Burp-XML-Dateien, die oft durch Entfernen unnötiger Tags behoben werden können, was die Datei auch verkleinert). Wenn Sie xnLinkFinder in einem Skript verwenden, möchten Sie nicht auf Benutzereingabe warten, daher können Sie dies durch Übergeben dieses Arguments mit oder festlegen. HINWEIS: Dies ist eine dauerhafte Änderung an der Datei |
| -all | --all-tlds | Alle gefundenen Links werden zurückgegeben, auch wenn die TLD nicht gebräuchlich ist. Dies kann zu einer Reihe von Fehlalarmen führen, bei denen Variablennamen usw. ebenfalls eine mögliche echte Domain sein könnten. Standardmäßig werden nur Links zurückgegeben, deren TLD in den gebräuchlichen TLDs ( in ) enthalten ist. |
| -cl | --content-length | Zeigt die Content-Length der Antwort beim Crawlen an. |
| -nb | --no-banner | Versteckt das Tool-Banner. |
| -v | --verbose | Ausführliche Ausgabe |
| -vv | --vverbose | Erhöhte ausführliche Ausgabe |
| | --version | Zeigt die aktuelle Versionsnummer an. |
| -h | --help | Zeigt die Hilfemeldung an und beendet das Programm |† NOT RELEVANT FOR INPUT OF DIRECTORY, BURP XML FILE, ZAP FILE, CAIDO CSV FILE, OR HAR FILE
Die Datei config.yml (üblicherweise in ~/.config/xnLinkFinder/) enthält die Schlüssel, die nach Bedarf angepasst werden können:
linkExclude - Eine durch Kommas getrennte Liste von Zeichenfolgen (z.B. .css,.jpg,.jpeg usw.), gegen die alle Links geprüft werden. Wenn ein Link eine der Zeichenfolgen enthält, wird er aus der Ausgabe ausgeschlossen. Wenn die Eingabe ein Verzeichnis ist, werden Dateinamen gegen diese Liste geprüft.contentExclude - Eine durch Kommas getrennte Liste von Zeichenfolgen (z.B. text/css,image/jpeg,image/jpg usw.), gegen die alle Content-Type-Header von Antworten geprüft werden. Antworten mit diesen Inhaltstypen werden ausgeschlossen und nicht auf Links überprüft.fileExtExclude - Eine durch Kommas getrennte Liste von Zeichenfolgen (z.B. .zip,.gz,.tar usw.), gegen die alle Dateien im Verzeichnismodus geprüft werden. Wenn eine Datei eine dieser Erweiterungen hat, wird sie nicht nach Links durchsucht. Im normalen Modus wird, wenn eine Antwort keinen Content-Type zur Ausschlussprüfung hat, am Ende der URL nach diesen Erweiterungen gesucht, um zu entscheiden, ob nach Links gesucht werden soll.regexFiles - Eine Liste von Dateitypen, getrennt durch ein Pipe-Zeichen (z.B. php|php3|php5 usw.). Diese werden im Link-Finding-Regex verwendet, wenn es Funde gibt, die keine offensichtlichen Links sind, aber interessante Dateitypen darstellen, die Sie extrahieren möchten. Wenn Sie diese Liste erweitern, stellen Sie sicher, dass Sie eventuelle Punkte escapieren, um einen korrekten Regex zu gewährleisten, z.B. † WENN DIESE NICHT IN DER CONFIG-DATEI GEFUNDEN WERDEN, STANDARDMÄSSIG AUF True GESETZT.
xnLinkFinder -i target.com -sf target.com
### Links von einem bestimmten Ziel finden - Ausführlich
Idealerweise geben Sie das Bereichspräfix (`-sp`) mit der primären Domain (einschließlich Schema) und einen Bereichsfilter (`-sf`) an, um die Ergebnisse nur auf relevante Domains zu filtern (dies kann eine Datei oder in Scope-Domains sein). Außerdem können Sie Cookies und benutzerdefinierte Header übergeben, um sicherzustellen, dass Sie nur Links finden, die für autorisierte Benutzer verfügbar sind.
Die Angabe des User Agents (`-u desktop mobile`) sucht zuerst nach allen Links mit Desktop-User-Agents und dann erneut mit mobilen User-Agents. Es könnte spezifische Endpunkte geben, die mit dem angegebenen User-Agent zusammenhängen. Die Angabe eines Tiefenwerts (`-d`) sendet weiterhin Anfragen an Links, die bei der vorherigen Tiefensuche gefunden wurden, um weitere Links zu finden.```
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
Wenn Sie zum Beispiel eine Datei mit JS-Datei-URLs haben, können Sie nach Links in diesen suchen:``` xnLinkFinder -i target_js.txt -sf target.com
HINWEIS: Eine übergebene Datei wird als Liste von URLs betrachtet, wenn die erste Zeile mit `//` oder `http` beginnt oder das Format einer Domain hat (z. B. `example.com`, `sub.example.co.uk`), andernfalls wird sie als eine Datei angesehen, in deren Inhalt gesucht werden soll (es sei denn, es handelt sich um eine Burp-, Zap-, Caido- oder HAR-Datei).
### Links aus dem Inhalt einer Datei finden – Einfach
Wenn Sie zum Beispiel eine gespeicherte Antwort haben, können Sie darin nach Links suchen:```
xnLinkFinder -i response.txt -sf target.com
HINWEIS: Eine übergebene Datei wird als Liste von URLs betrachtet, wenn die erste Zeile mit // oder http beginnt oder das Format einer Domain hat (z.B. example.com, sub.example.co.uk), andernfalls wird sie als eine Datei angesehen, in deren Inhalt gesucht werden soll (es sei denn, es handelt sich um eine Burp-, Zap-, Caido- oder HAR-Datei).
Wenn Sie Dateien haben, z.B. JS-Dateien, HTTP-Antworten usw., können Sie in diesen nach Links suchen:``` xnLinkFinder -i ~/.config/waymore/results/target.com
HINWEIS: Unterverzeichnisse werden ebenfalls überprüft. Die Option `-mfs` kann angegeben werden, um Dateien über einer bestimmten Größe zu überspringen.
### Links aus einem Burp-Projekt finden - Grundlegend
Wählen Sie in Burp die Elemente aus, die Sie durchsuchen möchten, indem Sie beispielsweise den Bereich markieren, mit der rechten Maustaste klicken und `Save selected items` auswählen. Stellen Sie sicher, dass die Option `base64-encode requests and responses` vor dem Speichern aktiviert ist.
Um alle Links aus der Datei zu erhalten (selbst bei SEHR GROSSEN Dateien können Sie alle Links extrahieren):```
xnLinkFinder -i target_burp.xml
HINWEIS: xnLinkFinder geht davon aus, dass, wenn die erste Zeile der mit -i übergebenen Datei mit <?xml beginnt, Sie versuchen, eine Burp-Datei zu verarbeiten.
Idealerweise geben Sie einen Umfangspräfix (-sp) mit der primären Domain (einschließlich Schema) und einen Umfangsfilter (-sf) an, um die Ergebnisse nur auf relevante Domains zu beschränken.```
xnLinkFinder -i target_burp.xml -o target_burp.txt -sp https://www.target.com -sf target.* -ow -spo -inc -vv
### Links aus einem ZAP-Projekt finden - Einfach
In ZAP wählen Sie die Elemente aus, die Sie durchsuchen möchten, indem Sie z. B. den Verlauf markieren, auf das Menü `Export` klicken und `Save Messages...` (oder in älteren Versionen `Export Messages to File...`) auswählen. Dadurch können Sie eine ASCII-Textdatei aller Anfragen und Antworten speichern, die Sie durchsuchen möchten.
Um alle Links aus der Datei zu erhalten (selbst bei SEHR großen Dateien erhalten Sie alle Links):```
xnLinkFinder -i target_zap.txt
HINWEIS: xnLinkFinder geht davon aus, dass der erste Eintrag der mit -i übergebenen Datei im Format ==== 99 ========== oder ===99 ========== usw. ist, dass Sie eine ZAP-ASCII-Textdatei verarbeiten möchten.
Gehen Sie in Caido zum Bereich History und wählen Sie die Option Export.
Wenn Sie die Caido Pro- oder Enterprise-Edition verwenden, wählen Sie die Option Export current rows und dann As CSV. Gehen Sie zum Abschnitt Exports und laden Sie die CSV-Datei herunter. Übergeben Sie diese dann als Eingabe:``` xnLinkFinder -i 2023-03-18-010332_csv_requests.csv
Wenn Sie die Caido Community edition verwenden, müssen Sie die Option **Export all** auswählen und **As CSV** auswählen. Gehen Sie zum Abschnitt **Exports** und laden Sie die CSV-Datei herunter. Da Sie die vollständige Historie haben, sollten Sie aus der CSV-Datei alles entfernen, was nicht relevant ist. Verwenden Sie das folgende Beispiel, in dem `redbull` der Hauptteil der Domains des Ziels ist, das Sie betrachten.```
cat 2023-03-18-010332_csv_requests.csv | grep -E '^id|^[0-9]+,[^,]*redbull' > caido_redbull.csv
xnLinkFinder -i caido_redbull.csv
NOTE: xnLinkFinder nimmt an, dass, wenn die erste Zeile der mit -i übergebenen Datei das Format id,host,method hat, Sie versuchen, eine Caido-Export-CSV-Datei zu verarbeiten.
Eine HAR-Datei ist eine JSON-Datei, die eine Liste von HTTP-Anfragen und -Antworten enthält. Es ist ein gängiges Format zum Speichern von HTTP-Verkehr. Sie können eine HAR-Datei aus den meisten Webbrowsern exportieren, normalerweise über den Netzwerk-Tab in den Entwicklertools. Übergeben Sie die Datei als Eingabe:``` xnLinkFinder -i browser.har
HINWEIS: xnLinkFinder geht davon aus, dass Sie versuchen, eine HAR-Datei zu verarbeiten, wenn der Dateiname auf `.har` endet ODER die erste Zeile der Datei `"log"` enthält und mit `{` beginnt.
### Links aus einem Waymore-Ergebnisverzeichnis finden
Das Tool [waymore](https://github.com/xnl-h4ck3r/waymore) kann verwendet werden, um URLs von verschiedenen Drittanbieter-APIs zu erhalten und auch archivierte Antworten von verschiedenen Quellen herunterzuladen. Wenn ein Waymore-Ergebnisverzeichnis an `xnLinKFinder` übergeben wird, werden die Inhalte der archivierten Antworten durchsucht und es werden URLs von `waymore.txt` sowie die archivierten URLs von `waymore_index.txt` (oder `index.txt` für ältere Versionen von `waymore`) angefordert und weitere Links aus diesen Antworten ermittelt. Wenn `-d`/`--depth` Null ist, werden die URLs von `waymore_index.txt` nur zurückgegeben, aber nicht angefordert.```
xnLinkFinder -i ~/Tools/waymore/results/target.com
HINWEIS: Es wird als normales Verzeichnis übergeben, aber xnLinkFinder wird erkennen, dass es sich um ein waymore-Ergebnisverzeichnis handelt und entsprechend verarbeiten. Dies beruht auf der standardmäßigen Namenskonvention, dass die URL-Datei waymore.txt heißt und sich in demselben Verzeichnis wie die archivierten Dateien befindet (was standardmäßig der Fall ist).
Sie können xnLinkFinder an andere Tools weiterleiten. Fehler werden an stderr gesendet und gefundene Links an stdout. Die Ausgabedatei wird zusätzlich zu den an das nächste Programm weitergeleiteten Links erstellt. Potenzielle Parameter werden jedoch nicht an das nächste Programm weitergeleitet, aber sie werden dennoch in die Datei geschrieben. Zum Beispiel:
xnLinkFinder -i redbull.com -sp https://redbull.com -sf rebbull.* -d 3 | unfurl keys | sort -u
```
Sie können die Eingabe auch über `stdin` anstatt `-i` leiten.```
cat redbull_subs.txt | xnLinkFinder -sp https://redbull.com -sf rebbull.* -d 3
```
HINWEIS: Sie können keine Burp-, ZAP-, Caido- oder HAR-Datei per Pipe übergeben. Diese müssen mit `-i` übergeben werden.
## Empfehlungen und Hinweise
- Verwenden Sie immer das Argument `-sp` für den Bereichspräfix. Dies kann eine einzelne Bereichsdomain oder eine Datei mit mehreren Bereichsdomains sein.
Nachfolgend Beispiele für das verwendete Format (es sollte kein Pfad enthalten sein und keine Platzhalter verwendet werden. Das Schema ist optional, standardmäßig wird http verwendet): ```
http://www.target.com
https://target-payments.com
https://static.target-cdn.com
```
Wenn ein Link gefunden wird, der keine Domain enthält, z. B. `/path/to/example.js`, dann führt die Übergabe von `-sp http://www.target.com` zur Ausgabe `http://www.target.com/path/to/example.js`, und wenn die Tiefe (`-d`) > 1 ist, kann eine Anfrage an diese URL gestellt werden, um nach weiteren Links zu suchen. Wenn eine Datei mit Domains mittels `-sp` übergeben wird, enthält die Ausgabe jede Domain gefolgt von `/path/to/example.js` und erhöht die Wahrscheinlichkeit, weitere Links zu finden.
- Wenn Sie `-sp` verwenden, aber den ursprünglichen Link `/path/to/example.js` (ohne Domain) zusätzlich in der Ausgabe haben möchten, dann übergeben Sie das Argument `-spo`.
- Verwenden Sie immer das Argument `-sf` für den Bereichsfilter. Dadurch wird sichergestellt, dass nur relevante Domains in der Ausgabe zurückgegeben werden, und was noch wichtiger ist, wenn die Tiefe (`-d`) > 1 ist, werden nicht zum Bereich gehörende Ziele nicht nach Links oder Parametern durchsucht. Dies kann eine einzelne Bereichsdomain oder eine Datei mit mehreren Bereichsdomains sein. Nachfolgend finden Sie Beispiele des verwendeten Formats (kein Schema oder Pfad sollte enthalten sein): ```
target.*
target-payments.com
static.target-cdn.com
```
DIES DIENT NUR ZUM FILTERN DER LINKS-DOMÄNE.
- Wenn du die endgültige Ausgabe irgendwie filtern möchtest, verwende `-ra`. Es ist immer eine gute Idee, https://regex101.com/ zu nutzen, um zu überprüfen, ob dein Regex-Ausdruck das tut, was du erwartest.
- Verwende die Option `-v`, um eine bessere Vorstellung davon zu bekommen, was das Tool macht.
- Falls es Probleme gibt, verwende die Option `-vv`, die möglicherweise auftretende Fehler anzeigt, die entweder behoben werden können oder als Issue auf GitHub gemeldet werden können.
- Gib Cookie- (`-c`), Header- (`-H`) und Regex-Werte (`-ra`) in einfachen Anführungszeichen an, z. B. `-ra '/api/v[0-9]\.[0-9]\*'`
- Setze die Option `-o`, um einen bestimmten Ausgabedateinamen für Links festzulegen, anstatt des Standardwerts `output.txt`. Wenn du eine große Suchtiefe planen, beginne mit 2 und der Option `-v`, um zu prüfen, was zurückgegeben wird. Dann kannst du die Tiefe erhöhen, und die neue Ausgabe wird an die vorhandene Datei angehängt, es sei denn, du verwendest `-ow`.
- Setze die Option `-op`, um einen bestimmten Ausgabedateinamen für potenzielle Parameter festzulegen, anstatt des Standardwerts `parameters.txt`. Jede Ausgabe wird an die vorhandene Datei angehängt, es sei denn, du verwendest `-ow`.
- Bei einer hohen Tiefe (`-d`) sei vorsichtig, da einige Seiten dynamische Links verwenden und immer wieder neue finden. Wenn keine neuen Links mehr gefunden werden, stoppt xnLinkFinder die Suche. Die Verwendung der Stop-Flags (`s429`, `s403`, `sTO`, `sCE`) sollte ebenfalls in Betracht gezogen werden.
- Wenn du eine große Anzahl von Links findest, insbesondere bei hoher Tiefe (`-d`-Wert) und begrenzten Ressourcen, stoppt das Programm, wenn der Speicher-Schwellenwert (`-m`) erreicht wird, und beendet sich ordentlich, bevor es abgewürgt wird.
- Wenn du dich entschließt, xnLinkFinder während des Laufs abzubrechen (mit `Strg-C`), sei geduldig; alle gesammelten Daten werden gespeichert, bevor es ordentlich endet.
- Die Verwendung der Option `-orig` zeigt die URL an, auf der der Link gefunden wurde. Dies kann zu doppelten Links in der Ausgabe führen, wenn derselbe Link auf mehreren Quellen gefunden wurde, aber die Herkunfts-URL wird in eckigen Klammern angehängt.
- Bei Anfragen verwendet xnLinkFinder einen zufälligen User-Agent aus der aktuellen Gruppe, die standardmäßig auf `desktop` eingestellt ist (sofern nicht das Argument `-uc`/`--user-agent-custom` verwendet wird). Falls ein Ziel möglicherweise unterschiedliche Links für verschiedene User-Agent-Gruppen aufweist, gib z. B. `-u desktop mobile` an (mit Leerzeichen trennen). Die Option `mobile`-User-Agent ist eine Kombination aus `mobile-apple`, `mobile-android` und `mobile-windows`. Mögliche Werte sind `desktop`, `mobile`, `set-top-boxes` und `game-console`.
- Wenn `-i` auf ein Verzeichnis gesetzt ist, werden die Inhalte der Dateien im Stammverzeichnis auf Links durchsucht. Dateien in Unterverzeichnissen werden nicht durchsucht. Dateien, die größer sind als der mit `-mfs` festgelegte Wert (Standard: 500 MB), werden übersprungen.
- Bei Verwendung der Option `-replay-proxy` können Anfragen manchmal länger dauern. Wenn du vermehrt `Request Timeout`-Fehler siehst (Fehler werden bei Verwendung von `-v` oder `-vv` angezeigt), erwäge die Verwendung von `-t`, um das Timeout-Limit zu erhöhen.
- Wenn du weißt, dass ein Ziel nur ASCII-Zeichen in Links und Parametern verwendet, solltest du `-ascii-only` in Betracht ziehen. Dies kann eine Reihe von Fehlalarmen eliminieren, die manchmal aus Binärdaten zurückgegeben werden.
- Wenn du ein [waymore](https://github.com/xnl-h4ck3r/waymore)-Ergebnisverzeichnis übergibst, ist es sinnvoll, das Argument `-d`/`--depth` zu übergeben, um zusätzliche Links aus URL-Anfragen zu durchsuchen, sowie `-u`/`--user-agent`, falls unterschiedliche Inhalte gefunden werden könnten, z. B. `-u desktop mobile`.
- Übergib immer den Dateinamen für `-owl`/`--output-wordlist`, um die zielspezifische Wortliste zu speichern. Diese Liste kann beim Fuzzing eines Ziels sehr nützlich sein.
- Die Wörter für die zielspezifische Wortliste stammen aus folgenden Quellen (alle mit 3 oder mehr Zeichen), werden aber auch durch die anderen Wortlistenargumente bestimmt (siehe Nutzungsabschnitt oben):
- Alle Antworten mit bestimmten Bedingungen:
- Es werden nur Antworten mit Inhaltstypen durchsucht, die im YML-Konfigurationsabschnitt `wordsContentTypes` angegeben sind. Die Standardwerte sind `text/html`, `application/xml`, `application/json`, `text/plain`
- Wörter aus dem Inhalt von `<meta>`-Tags, bei denen:
- `Property` gleich `og:title` oder `og:description` ist
- `Name` gleich `description`, `keywords`, `twitter:title` oder `twitter:description` ist
- Wörter aus HTML-Kommentaren
- Wörter aus dem `alt`-Attribut von ``-Tags
- Wörter aus dem restlichen inneren HTML der Seite, ohne die Tags `<style>`, `<script>` und `<link>`
- Aus Pfadwörtern in gefundenen Links gewonnene Wörter
- Aus Antworten und Links gefundene Parameter
- Allen gültigen Wörtern wird nach Möglichkeit die Singular-/Pluralversion zur Wortliste hinzugefügt
- Wenn das ursprüngliche Wort Großbuchstaben enthält, wird auch eine kleingeschriebene Version hinzugefügt
- Wenn die standardmäßigen „Stoppwörter“ für eine zielspezifische Wortliste nicht ausreichen, ändere sie entweder in der YML-Konfigurationsdatei oder gib zusätzliche Stoppwörter mit der Option `-swf`/`--stopwords-file` an. Je nach Ziel kann es sinnvoll sein, Stoppwörter in einer anderen Sprache aufzunehmen. Stoppwörter werden in der Verarbeitung natürlicher Sprache (NLP) verwendet, und viele Stoppwortlisten sind online verfügbar, um unterschiedlichen Anforderungen gerecht zu werden.
## Probleme
Solltest du auf irgendwelche Probleme stoßen oder Ideen für Verbesserungen haben, kannst du gerne ein Issue auf GitHub erstellen. Bei einem Problem ist es hilfreich, wenn du den genauen Befehl, den du ausgeführt hast, und eine detaillierte Beschreibung des Problems angibst. Führe das Problem nach Möglichkeit mit `-vv` aus und teile mir eventuelle Fehlermeldungen mit.
## TODO
- Füge eine spezifische Regex-Prüfung für Requests hinzu, wenn eine Proxy-Datei als Eingabe übergeben wird. Derzeit wird dieselbe Regex wie für Requests verwendet, aber das ist nicht ideal.
- Cookie-Namen abrufen, um sie zur Liste der potenziellen Parameter hinzuzufügen.
## Beispielausgabe
Aktive Link-Suche für eine Domain:
<center><img src="https://raw.githubusercontent.com/xnl-h4ck3r/xnLinkFinder/main/xnLinkFinder/images/example1a.png"></center>
...
<center><img src="https://raw.githubusercontent.com/xnl-h4ck3r/xnLinkFinder/main/xnLinkFinder/images/example1b.png"></center>
Gepipete Ein- und Ausgabe:
<center><img src="https://raw.githubusercontent.com/xnl-h4ck3r/xnLinkFinder/main/xnLinkFinder/images/example2.png"></center>
Viel Glück und gute Jagd!
Wenn du das Tool (oder andere) wirklich liebst oder sie dir zu einer tollen Prämie verholfen haben, erwäge [MIR EINEN KAFFEE ZU KAUFEN!](https://ko-fi.com/xnlh4ck3r) ☕ (Ich könnte das Koffein gebrauchen!)
🤘 /XNL-h4ck3r
<a href='https://ko-fi.com/B0B3CZKR5' target='_blank'><img height='36' style='border:0px;height:36px;' src="https://storage.ko-fi.com/cdn/kofi2.png?v=3" border='0' alt='Kauf mir einen Kaffee auf ko-fi.com' /></a>
cli-owcli-ow-ow/-sp/-spkf'name1=value1; name2=value2;''Header1: value1; Header2: value2;'/api/v[0-9]\.[0-9]\*-sp--scope-prefixconfig.ymlcareers,forumLINK-URL [ORIGIN-URL](PREFIXED)./../-i-u desktop mobiledesktopmobileset-top-boxesgame-consolemobile-applemobile-androidmobile-windowsmobile-u--user-agent-ihttp://127.0.0.1:8080http://user:[email protected]:8000socks5://host:port<script><style><noscript><template>config.yml~/.config/xnLinkFinderrespParamPathWords auf True gesetzt ist, hat dieses Argument keine Wirkung, es sei denn, -nwlpm/--no-wordlist-parameters wird ebenfalls übergeben.-itruefalsecommonTLDsconfig.ymljs\.maprespParamLinksFound † - Ob potenzielle Parameter aus in Antworten gefundenen Links extrahiert werden: True oder FalserespParamPathWords † - Ob Pfadwörter in abgerufenen Links als potenzielle Parameter hinzugefügt werden: True oder FalserespParamJSON † - Wenn der MIME-Typ der Antwort JSON enthält, ob JSON-Schlüsselwerte als potenzielle Parameter hinzugefügt werden: True oder FalserespParamJSVars † - Ob JavaScript-Variablen, die mit var, let oder const gesetzt wurden, als potenzielle Parameter hinzugefügt werden: True oder FalserespParamXML † - Wenn der MIME-Typ der Antwort XML enthält, ob XML-Attributwerte als potenzielle Parameter hinzugefügt werden: True oder FalserespParamInputField † - Wenn der MIME-Typ der Antwort HTML oder JAVASCRIPT enthält (da HTML in HTML eingebaut sein kann), ob die NAME- und ID-Attribute aller INPUT- (oder TEXTAREA/SELECT/BUTTON-) Felder als potenzielle Parameter hinzugefügt werden: True oder FalserespParamMetaName † - Wenn der MIME-Typ der Antwort HTML enthält, ob die NAME-Attribute aller META-Tags als potenzielle Parameter hinzugefügt werden: True oder FalsewordsContentTypes - Eine durch Kommas getrennte Liste von Zeichenfolgen (z.B. text/html,text/plain), um anzugeben, welche Inhaltstypen von Antworten nach Wörtern für die zielspezifische Wortliste durchsucht werden.stopWords - Eine durch Kommas getrennte Liste von Zeichenfolgen (z.B. then,this,that), um Wörter anzugeben, die von der zielspezifischen Wortliste ausgeschlossen werden. Diese Standardliste besteht zunächst aus englischen Determinierern, koordinierenden Konjunktionen und Präpositionen sowie einer Liste von Stoppwörtern aus Scikit-Learn, einer Python-Bibliothek für maschinelles Lernen.commonTLDs - Eine durch Kommas getrennte Liste der häufigsten TLDs. Sofern nicht das Argument -all/--all-tlds übergeben wird, werden nur Links mit Domains zurückgegeben, deren TLD in dieser Liste enthalten ist.