dasctf_gfctf四月赛复现

WEB

cool_index

这道题当时看了看,以为是jwt伪造,结果发现不能改token,因为动token会导致系统执行res.clearCookie("token");,因此伪造方面只能放一放

这里主要分析/article,它是读取flag的关键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
app.post("/article", (req, res) => {
const token = req.cookies.token;
if (token) {
try {
const decoded = jwt.verify(token, JWT_SECRET);
let index = req.body.index;
if (req.body.index < 0) {
return res.status(400).json({ message: "你知道我要说什么" });
}
if (decoded.subscription !== "premium" && index >= 7) {
return res
.status(403)
.json({ message: "订阅高级会员以解锁" });
}
index = parseInt(index);
if (Number.isNaN(index) || index > articles.length - 1) {
return res.status(400).json({ message: "你知道我要说什么" });
}

return res.json(articles[index]);
} catch (error) {
res.clearCookie("token");
return res.status(403).json({ message: "重新登录罢" });
}
} else {
return res.status(403).json({ message: "未登录" });
}
});

其实你把整个server.js看完之后,感觉没有利用点,因为开发者对token进行了严格地检查,防止攻击者利用token来绕过管理员的权限读取flag

不过注意到index = parseInt(index);parseInt()用于将字符串转换为数字

转换原理跟php差不多,就不赘述了

由于这一句是放在检测身份和页面之后的,因此可以直接传入含数字的字符串来访问flag

EasySignin

注册一个账号登录进去,修改密码时抓包,把username改为admin

重新登录后查看图片,注意到url那一栏可以利用SSRF

试了一下,本地文件是读不了的,因此没法用file://,那就试试gopher://

发现可以打3306,即mysql的默认端口

用gopherus打一下

得到的payload进行二次编码,因为这里面有的字符解码后是个乱码,服务器在将其经过解码后可能会出现payload失效的情况

解码后得到flag

SuiteCRM

提示已经说了是CVE-2024-1644,跟着复现就好了

由于环境修改了upload目录的上传权限,我就用最近才学的pear文件包含来执行命令

直接读取flag

web1234

这题附件不知道跑哪去了,只能看看wp了

作者

Ins0mn1a

发布于

2024-04-22

更新于

2024-07-31

许可协议

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...