
jshunter ist ein Befehlszeilen-Tool zur Analyse von JavaScript-Dateien und zum Extrahieren von Endpunkten. Dieses Tool ist auf die Identifizierung sensibler Daten wie API-Endpunkte und potenzieller Sicherheitslücken spezialisiert und ist damit eine unverzichtbare Ressource für Bug-Bounty-Jäger und Sicherheitsforscher.
Professionelles Tool zur JavaScript-Sicherheitsanalyse
Vollständige Endpunkt-Erkennung, Erkennung sensibler Daten und erweiterte Code-Analyse für Sicherheitsexperten
JSHunter ist ein umfassendes Kommandozeilen-Tool für JavaScript-Sicherheitsanalyse und Endpunkt-Erkennung. Es wurde für Sicherheitsexperten, Penetrationstester und Entwickler entwickelt und bietet Analysefunktionen auf Unternehmensniveau mit hochpräzisen Erkennungsalgorithmen und professionellen Berichtsfunktionen.
https://github.com/user-attachments/assets/5a5f60fa-f8dc-4aac-bd06-2e93779f9af4
JSHunter in Aktion — eine echte Terminalaufnahme der CLI (alle gezeigten Secrets sind gefälschte Testdaten)
Genauigkeit auf Unternehmensniveau mit fortschrittlichen Analysalgorithmen
JSHunter parst das JavaScript, das es scannt, anstatt es nur per Musterabgleich zu prüfen. Ein Single-Pass-ECMAScript-Scanner klassifiziert jedes Byte der Antwort als String- Literal, Template-Literal, Kommentar, Regular-Expression-Literal oder Code, und die Erkennungsregeln werden gegen diese Klassifizierung ausgewertet.
Das ist wichtig, weil eine Regex keine Ahnung hat, was sie gematcht hat. Dieselben vierzig Base64- Zeichen bedeuten „Credential" innerhalb eines String-Literals, „Chunk-Hash" innerhalb eines minifizierten Bezeichners und gar nichts, wenn sie die Naht zwischen zwei benachbarten Token überspannen. Zu wissen, welcher Fall vorliegt, ersetzt einen Haufen Näherungs- Heuristiken durch eine strukturelle Antwort:
key zu durchsuchen, rekonstruiert die Engine den Bezeichner oder Property-Key, an den der Wert
tatsächlich gebunden ist — const stripeSecret = "..." liest sich ganz anders als
{contentHash: "..."}, und eine rein formbasierte Regel erfordert nun diese Bindung.role-Claim gelesen werden, Twilio-SIDs — werden klassifiziert statt als Leaks gemeldet.
--include-public meldet sie trotzdem.Jede Verwerfung ist daran gebunden, dass der Body mit Sicherheit JavaScript oder JSON ist.
Bei allem anderen — einer .env-Datei, Fließtext, rohem HTML — liefert die Engine
Hinweise, unterdrückt aber nie, sodass eine falsch klassifizierte Eingabe niemals ein Secret verbergen kann.
--no-structural schaltet die gesamte Schicht ab und stellt das Verhalten von v0.7 wieder her.
Funde tragen die Begründung als evidence-Objekt in --json, --ndjson und
der SARIF-Property-Bag mit sich:```json
"exposure": "secret",
"evidence": {
"region": "string-literal",
"role": "assignment",
"bound_to": "awsAccessKeyId",
"shape": "opaque-token",
"charset": "alphanumeric",
"signals": [
{"name": "in-literal", "delta": 0.04, "detail": "value is a complete string-literal"},
{"name": "credential-binding", "delta": 0.12, "detail": "bound to 'awsAccessKeyId'"}
]
}
`--stats` meldet, was jede Stufe verworfen hat, sodass die Pipeline auditierbar bleibt.
### Chunk-Graph und Routen-Erkennung
Eine moderne Anwendung liefert ein Einstiegs-Bundle und mehrere hundert lazy
geladene Chunks aus, deren URLs zur Laufzeit aus einem Manifest zusammengesetzt
werden, das der Bundler inline einbettet. Nichts verlinkt auf sie, sodass ein
Crawler sie nie sieht. `-G` rekonstruiert dieses Manifest
und gibt die vollständige Asset-Liste und die Client-Routentabelle aus:```console
$ jshunter -u https://target.example/_next/static/chunks/main-a1b2c3.js -G
[CHUNKS] https://target.example/...: next runtime, 214 chunks, 37 routes
[CHUNK] https://target.example/... https://target.example/_next/static/chunks/settings.11aa22bb33cc.js
[ROUTE] https://target.example/... /admin/users/:id
Unterstützte Runtimes: webpack 4 und 5 (__webpack_require__.u, miniCssF,
jsonpScriptSrc), Next.js-Build-Manifeste, Vite und Rollup (__vite__mapDeps,
__vitePreload), einfache dynamische import(), sowie Routentabellen von React Router,
Vue Router und Angular. Die Ausgabe ist tabulatorgetrennt und dedupliziert, sodass sie
direkt als Eingabeliste für einen Folge-Scan weiterverwendet werden kann:```bash
jshunter -u https://target.example/main.js -G -q | awk -F'\t' '/^[CHUNK]/{print $3}' > chunks.txt
jshunter -l chunks.txt -s -j > findings.json
### Professionelle HTTP- & Netzwerk-Suite
<details>
<summary><strong>Netzwerkkonfiguration auf Unternehmensniveau</strong></summary>
**Authentifizierung & Header:**
- **Benutzerdefinierte Header** (`-H`): Wiederholbare Authentifizierungs-Header und benutzerdefinierte Anfrage-Header
- **Cookie-Verwaltung** (`-c`): Sitzungs-Cookies für den Zugriff auf geschützte Ressourcen
- **User-Agent-Steuerung** (`-U`): Benutzerdefinierte UA-Strings oder dateibasierte Rotation für Stealth