掌控安全CTF - 第七届封神台CTF(Web方向)

宁睿  论坛元老 | 2025-2-15 08:48:24 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 2013|帖子 2013|积分 6049

很久没更新了,水一篇
  1. welcome_to_zkaqctf

没啥好说的,是原题。给了一个附件,重要代码如下:
  1. const {promises: fs} = require('fs');
  2. const fastify = require('fastify');
  3. const flag = process.env.FLAG || 'zkaq{do_you_believe_this_is_flag?}';
  4. const app = fastify();
  5. app.get('/', async (_, res) => {
  6.     res.type('text/html').send(await fs.readFile('index.html'));
  7. });
  8. app.post('/', (req, res) => {
  9.     if (typeof req.body === 'object' && req.body[flag] === true) {
  10.         return res.send(`OhoUhOu~ flag is ${flag}`);
  11.     }
  12.     return res.send(`emmmmmmmwmwmwmwm NO...`);
  13. });
复制代码
关键代码如下:
  1. if (typeof req.body === 'object' && req.body[flag] === true) {
  2.         return res.send(`OhoUhOu~ flag is ${flag}`);
  3. }
复制代码
起首判断 req.body 是否为 Object 对象,没啥限制,包满意的。其次对于req.body[flag] === true,这句话将 flag 的值作为 Object 对象的键,阅读上下文,可知 flag 的值来自于process.env.FLAG,但我们是不知道 flag 的值(知道flag还做个屁的题),没办法满意这个条件。那么好,有个小 trick ,我们可以传入 null 值,使其报错,如下:
FLAG:
  1. zkaq{S0metime_Empty_1s_FU11}
复制代码
2. 科目四

科目四答题,直接根据页面关键词定位到详细的JS代码。
下个断点,同时可以看到通关乐成会给 flag 。

先正常答题,待 debug 卡住时再使用浏览器 console 调用 d 函数。
调用 d 函数。

FLAG:
  1. ZKAQCTF{d0_y0u_think_netw0rk_security_imp0rtant?}
复制代码
3. 诗和远方


没啥好说的,又是原题,参考:UIUCTF 2024 - Fare Evasion: Written by Jay 17 ,这边简朴过一遍做题流程,起首点击 我是乘客 按钮,会发送一个哀求。
Cookie 处一眼 JWT ,同时相应包中也提供了一个 JWT secret ,先把 JWT 丢到 jwt.io 解码,如下:
没啥思绪,在前端发现了关键线索。

这里给了一个 SQL 语句,单单看这个 SQL语句 是没办法注入的,但是可以观察到上边有段话,最关键的是将 MD5 转换为十六进制字符串,懂得都懂,在 PHP 中,对于 md5() 函数我们也可以指定其效果是否转换为十六进制,客长请看:

那么这时候就不得不提下 MD5 全能暗码了:ffifdyop ,如下:

此时就可以共同这个完成 SQL 注入了,回到之前的 JWT ,我们也拿到了 JWT secret ,这个时候只必要令 kid 字段的值为 ffifdyop 就行了。

拿到新的 JWT ,传参。

乐成拿到了司机角色的 JWT secret,重新构造 JWT ,其他都不变,换下 secret 就行了,如下:
替换 JWT ,拿到 flag 。

FLAG:
  1. zkaq{DuduDu_1etS_9o_to_P0etry_@nd_distance!}
复制代码
4. 为了部落!

没啥好说的,又双叒叕是原题,参考:JuniorCTF - Pizzagate,起首由 Django 报错找到 /foobarbaz 路径。

必要认证,但用户名处存在 SQL 注入,如下:

乐成登录。

后台有个注册功能,注册用户。

正常注册的话,功能是不全的,观察到哀求包中存在role=user字段,根据前端提示,将其修改成role=dev,如下:

后续可以创建军队和购买军队,由前端提示得知还提供Archery Queen可以购买,但是余额不敷。

这个地方利用逻辑毛病在创建军队时将兵种代价设置成负数,如许在购买时就能负负得正了。

前端有检测,必要抓包修改。

创建乐成。

购买刚才创建的军队。
余额来到了两千多,可以购买了。

购买Archery Queen兵种。

购买完成后,跳转到如下页面。

同样在 html 页面中找到线索,存在着一些隐蔽参数。

构造传参,发现缺少 xml 参数。

联想到XXE,构造 Payload 如下:

其实完备的构造出 XML 数据即可,跟 XXE 没啥关系。

FLAG:
  1. ZKAQCTF{Clash_0f_C1ans_1s_a_v3ry_classic_9am3}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表