震惊,YAK-JWT靶场的通关方式竟然是...

心中无爱人,工作自然神

图片

图片

图片

图片

打开jwt靶场是一个登录页面

图片

尝试弱口令admin/admin成功登录。

图片

通过抓包可以看到,整个登录过程主要是3个请求:

第一个页面:https://127.0.0.1:8080/jwt/unsafe-login1 (GET请求)

这个页面是登录首页,通过localStorage从会话中读取VULINBOX_JWT变量,如果存在则通过这个jwt请求/jwt/unsafe-login1/profile,获取用户信息并展示。否则显示登录页面。

图片

第二个页面:https://127.0.0.1:8080/jwt/unsafe-login1 (POST请求)

同在/jwt/unsafe-login1页面,通过POST请求发送认证信息,如果成功则返回jwt,否则返回认证失败的错误

图片

图片

第三个页面:https://127.0.0.1:8080/jwt/unsafe-login1/profile

通过Authorization将jwt传递给后端,如果验证成功则返回用户信息,否则返回认证失败的提示

图片

图片

图片

用户首先通过用户名密码向后端请求得到jwt,再通过jwt向后端请求得到完整用户信息,并将信息展示在前端。

图片

图片

首先打开JWT的登录(未验证算法)案例,在这个案例中,后端未校验加密算法,将根据用户传递的加密算法解密验证jwt。

如图是正常的jwt结构。可以看到在header中存储了用户名,根据页面提示,游戏目标是为用户信息添加flag字段。所以我们的目标就是修改jwt内的header,并绕过后端的校验。

图片

首先了解一下jwt结构:jwt由3部分组成,使用.连接,第一部分是header信息,第二部分是Claims信息,第三部分是签名。

如果使用node方式生成jwt那header部分和Claims部分都是直接通过base64编码,签名为空,那可以编写脚本:

header = codec.EncodeBase64(json.dumps({        "age": 25,        "alg": "none",        "kid": 1,        "typ": "JWT",        "username": "admin",        "flag":1,    }))claims = codec.EncodeBase64(json.dumps({ }))println("%s.%s."%[header,claims])

通过webfuzzer将刚生成的jwt发送到/jwt/unsafe-login1/profile接口,发现这次返回值只有一个flag

图片

通过mitm抓包改包修改jwt可以看到通关页面

图片

图片

打开案例:登录(错误中泄漏key)

和案例1相同的页面,发现获取用户信息的接口改为了/jwt/unsafe-login2/profile。尝试使用案例1的手段发现报错:

图片

可以看到原因是禁用了none的认证方式:'none' signature type is not allowed,但从错误中可以看到泄漏的key。

key是一个byte数组,所以可以编写yak代码,通过泄漏的key生成修改后的jwt:

key = []byte{100,89,84,117,75,83,66,116,72,120,88,98,73,109,110,70,99,74,97,75}jwtStr = jwt.JWTGenerateEx("HS256", {        "flag":1,    },{}, key)~println(jwtStr)

将生成的jwt应用到/jwt/unsafe-login2/profile接口,得到返回数据

图片

从前端页面可以看到修改成功

图片

END
YAK官方资源

Yak 语言官方教程:
Yak:致力于安全能力融合的语言 | Yak Program Language
Yakit 视频教程:
YakProject的个人空间-YakProject个人主页-哔哩哔哩视频
Github下载地址:
GitHub - yaklang/yakit: Cyber Security ALL-IN-ONE Platform
GitHub - yaklang/yaklang: A programming language exclusively designed for cybersecurity
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
下载安装与更新配置 | Yak Program Language
Yakit使用文档:
Yakit: 集成化单兵安全能力平台 | Yak Program Language
常见问题速查:
FAQ | Yak Program Language

### DVWA 靶场YAKIT 平台上通关教程 #### 安装与启动环境准备 为了顺利使用DVWA靶场,在YAKIT平台上需先完成一系列准备工作。确保已安装并运行PHPStudy或PHPStudy_pro,这一步骤对于提供必要的Web服务至关重要[^1]。 #### 设置代理工具 浏览器应设置为通过Burpsuite进行流量代理,以便于后续的安全测试操作。此过程允许拦截和修改HTTP/HTTPS请求响应数据流,从而更深入地了解应用程序行为及其潜在漏洞。 #### 调整安全级别 访问`DVWA Security`选项卡来设定不同挑战项目的难度等级。这一功能使得学习者可以根据自身的技能水平选择合适的练习模式,逐步提升对各类攻击手法的理解掌握能力。 #### 开始闯关之旅 针对每一个具体的模块,如SQL注入、XSS跨站脚本攻击等,按照由浅入深的原则依次尝试破解。利用之前配置好的中间人工具(例如Burp Suite),分析目标网站的工作机制,并探索可能存在的安全隐患点。 ```bash # 启动 PHP Study 的 Apache 和 MySQL 服务 phpstudy start apache mysql ``` #### 实战演练建议 - **熟悉环境**:花时间去理解每个组件的功能以及它们之间如何交互工作。 - **查阅文档**:遇到困难时不要急于求成,多参考官方说明或其他社区资源获取灵感和支持。 - **实践为主**:理论固然重要,但实际动手解决问题才是提高技术水平的关键所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值