CyberGame 2025 Web Writeup
coldflsh 发表于 广东 CTF 1570浏览 · 2025-06-09 16:13

[★★☆] Equestria - Door To The Stable

Points: 6

We are suspecting that the website on http://exp.cybergame.sk:7000/ is hiding something. We need to find out what is hidden in the website. We've gathered what seems to be a proxy configuration file from our trusted source.

nginx.conf

题目提供了一个nginx.conf

访问了以上所有路径其中root是静态页面,images可以访问到图像目录,结合题目描述目标目标应该是进入secretbackend,secretbackend需要提供账号密码,尝试一般的路径穿越找.htpasswd不成功

任意文件读取/目录遍历

题目给了nginx的配置文件,猜测是有和nginx有关的漏洞,找到了nginx反向代理不安全配置导致的任意文件读取/目录遍历

Nginx 不安全配置导致的漏洞 - zpchcbd - 博客园

这里的/images别名是/app/src/images/如果访问/images..那么实际访问的路径是/app/src/images/..

如果配置为/images/就不会有这个问题

访问

http://exp.cybergame.sk:7000/images../

路径穿越成功

image 1.png


http://exp.cybergame.sk:7000/images../secretbackend/

image 2.png


http://exp.cybergame.sk:7000/images../secretbackend/index.js

image 3.png


index.js中有进入secretbackend的账号密码cHIxbmNlc3M6U0stQ0VSVHswZmZfYnlfNF9zMW5nbGVfc2w0c2hfZjgzNmE4YjF9

base64解密得

pr1ncess:SK-CERT{0ff_by_4_s1ngle_sl4sh_f836a8b1}

得到flag

SK-CERT{0ff_by_4_s1ngle_sl4sh_f836a8b1}

[★★☆] Equestria - Shadow Realm

Points: 6

The secret website is protected by a login page. Can you find a way to get in?

条件竞争

pr1ncess:SK-CERT{0ff_by_4_s1ngle_sl4sh_f836a8b1} 登录后可以看到一些输入框,上面的是注册,下面的是登录

image 4.png


用上一题的任意文件读取查看index.js

查看login的流程,在login中如果用自己注册的用户登录会得到”The Dark Council has not approved you yet”的error,函数直接返回无法登录,这是因为user.verified在登录时为false

查看register,注册时数据首先会加入数据库,然后再经过了sendEmailToAdministrator之后vertified属性才被设置为false

而在db.js中初始化时这个值是设置为true的

注册之后在verified被修改之前立马登录即可,登录后没找到flag,查看login登录成功后的代码发现返回了一个环境变量中的LOGIN_WELCOME_MESSAGE可能包含提示

抓包查看

image 5.png


得到flag

SK-CERT{r4c3_4g41n5t_th3_l1ght_4nd_w1n_w1th_th3_p0w3r_0f_th3_n1ght}

[★★☆] Equestria - The Dark Ruler

Points: 6

There seems to be an endpoint that is only accessible by a privileged user. Can you find a way to access it?

JWT

根据题目描述应该是指的这个/api/secret-note只能被Dark Princess访问

req.user.is_d4rk_pr1nc3ss是从token里面解析出来的,但是不知道生成token所用的密钥

这里能往数据库插入数据但是没有什么用

image 6.png


这里有sql注入但是user_id是随机生成的无法控制

查看源码中jwt.js

JWT的格式是header.base64Payload.signature以.分隔开3个部分

JSON Web Tokens - jwt.io这是一个例子

image 7.png


而上面的verifyToken 函数用.把token分成了几个部分,return的payload是第2个部分,用于校验的payload则是倒数第二部分,正常情况下jwt只有3个部分返回的payload和用于校验的payload是一样的,而我们可以尝试构造以下token

先登录一个账号获得合法token,把自己构造的payload插入其中,evilpayload包含is_d4rk_pr1nc3ss 其他的不变

token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjA1Y2E2YTYxLTU1ZWYtNDhiOS1hMDIyLWFhNzkyMjgxMWE1ZCIsInVzZXJuYW1lIjoiMSJ9.9EmcLen454EZrGwS%2FeBFjMF57VvZBt9vQWH6qwn6uZE%3D

把中间一段拿出来base64解码

image 8.png


修改数据

重新编码后加入原来的token

image 9.png


token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjA1Y2E2YTYxLTU1ZWYtNDhiOS1hMDIyLWFhNzkyMjgxMWE1ZCIsInVzZXJuYW1lIjoiMSIsImlzX2Q0cmtfcHIxbmMzc3MiOjF9.eyJpZCI6IjA1Y2E2YTYxLTU1ZWYtNDhiOS1hMDIyLWFhNzkyMjgxMWE1ZCIsInVzZXJuYW1lIjoiMSJ9.9EmcLen454EZrGwS%2FeBFjMF57VvZBt9vQWH6qwn6uZE%3D

得到flag
image 10.png


SK-CERT{1_w1ll_rul3_th3_n1ght_4nd_th3_d4y}

[★★☆] JAILE - Calculator

Points: 6

You have found an exposed calculator program. It doesn’t seem to do anything useful beyond simple arithmetic operations. The source code is also available on GitHub. Can you make this application more useful? Python version is 3.12.3

Service: exp.cybergame.sk:7002

calc.py

Python Jail沙箱逃逸

breakpoint()绕过过滤,直接getshell

[★★☆] JAILE - User

Points: 6

That is interesting functionality. We can see that a separate user was created to run the calculator, but maybe the root user has more secrets that can be uncovered.

提权

flag在root里,需要提权

打开sh

sudo -l 查看可用的命令

可以利用 LD_PRELOAD 注入任意动态链接库到 netstat 中执行任意代码比如启动 shell

file /bin/netstat 查看netstat

显示dynamically linked 支持LD_PRELOAD 注入

shell.c如下,这里要用-i 启动交互脚本,不然用不了

编译共享库

执行,获取root

flag在/root目录下

SK-CERT{r007_u53r_pr3l04d3d_pr1v1l3635}

1 条评论
某人
表情
可输入 255