i春秋CTF题库最值钱的题库地方不是题量,是题库它把Web、逆向、题库Pwn、题库杂项这些方向按真实比赛节奏拆成了可刷的题库关卡。我去年带新人时做过统计,题库一个零基础的题库人从题库第一页刷到Web进阶区,平均要卡在SQL注入第7关——不是题库不会union,是题库不知道过滤了空格和逗号之后还能用`/**/`和`join`绕过。这种细节在普通教程里很少讲透,题库但i春秋的题库题目描述里会给一句模糊提示,逼你自己翻源码找入口。题库
题库的题库Web方向占了将近四成,其中命令执行和文件包含的题库变种最多。有一道叫“简单包含”的题库题,表面看是`?file=flag.php`直接读,实际提交后返回空白。抓包发现响应头里藏了`hint: php://filter`,但很多人只试`php://filter/read=convert.base64-encode/resource=flag.php`就以为结束了。真正卡住的地方是题目对`resource`后面的路径做了正则,必须用`/./`或`//`来混淆。这种设计在真实CTF里常见,i春秋把它做成了固定关卡,刷多了会形成条件反射。
逆向区题目偏重Android和Windows PE。Android题里有个“easy-apk”我印象很深,用jeb反编译后能看到一个native方法,但so文件里字符串被异或了0x33。直接搜flag搜不到,得手动写个python脚本跑一遍。有意思的是,这题在题库里难度标的是“入门”,但评论区一半人卡在so加载失败——因为模拟器架构是x86,而so只编了arm。这种坑不写在题面上,得自己看logcat报错。i春秋的评论区比题解有用,经常有人贴出自己踩过的环境问题。
Pwn方向对新手不太友好,但题库里有一道“栈溢出入门”设计得挺巧。程序开了NX但没开PIE,给了`system`地址和`/bin/sh`字符串。正常思路是覆盖返回地址到`system`,但题目把`pop rdi; ret`的gadget藏在了`__libc_csu_init`里。很多人用ROPgadget搜不到就放弃了,其实得手动算偏移。我见过一个解法是先用`write`泄露libc,再二次溢出——但题目只允许一次输入。最后发现是`read`函数读入长度没限制,可以覆盖到bss段写shellcode。这种非预期解在题库里不少,官方不禁止,反而会加精。
杂项区是最杂的。有题给了一张纯黑图片,binwalk跑出来一个zip,解压要密码。密码提示是“图片的拍摄时间”,但exif被清空了。得用stegsolve看LSB,发现最低位藏了一串base64,解出来是“2020:07:15 13:14:15”。这种题就是纯体力活,但i春秋把它放在“杂项入门”第一页,摆明了告诉新人:别总想着秒题,该翻的二进制位一个都不能少。
题库的排行榜有个隐藏机制:同一道题提交超过20次错误flag会锁IP十分钟。我见过有人写脚本爆破,结果被封了三天。官方论坛的解释是“防止自动化,鼓励手工分析”。这规矩挺烦人,但确实逼着人去看代码而不是瞎试。另外,每道题的“通过率”是公开的,Web题平均通过率42%,Pwn只有18%——这个数据比任何教程都直观地告诉你哪个方向更难。
刷i春秋题库别按顺序从头刷到尾。我的建议是先按通过率从高到低排,把60%以上的题过一遍,再回头啃30%以下的。因为高通过率的题往往考的是工具使用和基础漏洞,低通过率的题才涉及自定义加密或环境对抗。另外,每道题做完后把WP(Writeup)链接贴到自己的笔记里,下次遇到类似过滤规则可以直接翻。题库本身不提供官方题解,但用户上传的WP质量参差不齐,有些甚至是错的——得交叉验证两三个版本再信。
最后说个观察:i春秋的题目更新速度不算快,但老题会不定期改环境。比如去年Web区有一道“文件上传”题,原本只检查Content-Type,后来突然加了后缀黑名单。没看公告的人按老WP打会一直失败。所以刷题前先看题目最后修改时间,超过半年的题先搜一下最近有没有人吐槽环境变了。这比闷头硬刚省时间。