DASCTF_GFCTF_2024
DASCTF X GFCTF 2024|四月开启第一局
Web
cool_index
先看看附件,逻辑并不复杂
import express from "express"; |
一来就看到了ejs
的3.1.9
版本,这个是有一个不算漏洞的漏洞的,因为作者不认为他是一个漏洞,如果有如下的渲染参数,则可以RCE:
app.post('/', (req, res) => { |
可通过传参
settings[view%20options][closeDelimiter]=1")%3bprocess.mainModule.require('child_process').execSync('calc')%3b// |
或者
settings: { |
回到题目,有render()
的地方只有一个,就是/
路由的用户名那里,但是!!,用户名并不是像漏洞渲染的那样接受全部的参数的,而是经过了jet
的验证后传出来的,所以这里不能使用这个打法了
接着往下看题目,也可以顺着题目逻辑来获取flag的,那就是通过/register
路由来注册一个premium
身份的账号,然后在/article
路由才能选择id=7
来获得flag,但是注册premium
身份的账号要指导FLAG + JWT_SECRET
,这又是不可能的事
最后也之恶能在传参index
上下手了,可以看到index
从请求体中传过来后,还会经过一个index = parseInt(index);
才会取文章。并且在解析后还进一个判断Number.isNaN(index) || index > articles.length - 1
,要求一定是数字并且不能溢出数组才通过
parseint()
就是将字符串解析成数字,在文档中看到一个用法

在parseint
之前几次数值的比较,例如decoded.subscription !== "premium" && index >= 7
,我们去试试带着别的字母会不会影响比较:

不影响,那就直接改参数传入7a
之类的

EasySignin
先看题目,可以注册登录,在注册的时候就能发现已经有admin
账户了,随便注册一个账户进去可以看到有查看图片,修改密码,退出登录的几个功能

改密码改包能修改admin
的密码

使用修改的密码来登录admin
账户就能查看图片了,查看图片的url
长这样
/getpicture.php?url=https://tvax3.sinaimg.cn//large/0072Vf1pgy1foxkjfmwohj31kw0w0x2o.jpg
传了一个url
参数,可能存在ssrf
的,尝试一下file
协议

base64解码是nonono
,经过尝试flag
、file
、etc
、dict
等都会返回nonono
,但是还有一个gopher
能用,扫了一下目录有一个.DS_store
文件,但是并没有什么用
经过多次尝试发现有3306
端口是可以通过本地访问的gopher://127.0.0.1:3306
gopher通过ssrf打mysql有工具生成payload的,猜测无需密码的mysql账户时root
,尝试直接读文件

