SJTU-CTF 2025部分Writeup
rickroll
题目如下:
<?php highlight_file(__FILE__); $password = "Never gonna give you up," . "Never gonna let you down," . "Never gonna run around and desert you." . "Never gonna make you cry," . "Never gonna say goodbye," . "Never gonna tell a lie and hurt you."; assert(strlen($password) === 172); if (isset($_GET["input"])) { $input = $_GET["input"]; // try to input something with the same hash $input_hash = password_hash($input, PASSWORD_BCRYPT); if (strlen($input) < strlen($password) / 2) { // but shorter if (strpos($input, "cry") === false) { // and don't cry if (password_verify($password, $input_hash)) { echo 'impossible!' . PHP_EOL; include 'rickroll.php'; echo $flag; die(); } } } echo 'hello hacker'; } ?>
一道经典的入门级Web题,这类简单条件的验证题往往考察函数的特性,但2025年经常会被大模型秒掉。正常情况下,需要给定的$password和输入的$input的散列值匹配,但$password有172字符长,$input需要小于86字符,看似需要进行密码爆破,但难度可想而知。
查阅PHP文档可知,”使用PASSWORD_BCRYPT做算法,将使password_hash()的password参数最长为72个字节,超过会被截断“。因此题目会拿$password的前72个字符和$input_hash($input前72个字符的散列值)匹配。所以最终只需往input参数传入$password的前72<=n<86个字符即可拿到flag。
需要注意,$password的前72个字符是“Never gonna give you up,Never gonna let you down,Never gonna run around ”,结尾是空格,直接输入空格结尾的网址会被浏览器自动忽略,因此需要手动添加%20,或者再增加”and desert yo“的一部分。
IP Hunter 24
此题灵感源自作者看到Hackergame 2021的题目FLAG助力大红包,原题要求在10分钟内攒齐全部256个/8网段的请求,题解是常见的使用X-Forwarded-For请求头进行IP欺骗。
作者认真思考了真实请求IP能够包含多少个/8网段后,编写了此题,希望让选手了解代理的基础知识。使用32个不同/8网段的IPv4地址访问任务网址可以获得flag1,使用128+1个不同/8网段的IPv4地址访问任务网址可以获得flag2。
很多选手第一时间也认为是请求头伪造IP的考点,但和FLAG助力大红包对比可知,本题是公网部署,且非限时实例,而且网页注释也提醒了”You really need to collect these IP blocks, it's no use playing tricks.“,所以就要考验选手获取不同IP地址的技能。
最便捷的方法是使用网站测速工具,这类工具会使用全球多个地点的服务器访问指定网址,来检测网址的连通性和延迟。一些节点较多的测速网站可能含有超过129个/8网段的IP地址。此方法只需在测速网站输入任务网址即可。
另一种方法是使用公开的代理池访问任务网址,这就需要让大模型写一个脚本来爬取代理池的代理,并访问任务网址。也有选手使用了Tor的代理池解题。
为了给新手一些鼓励,题目设置了两个flag。最终65人拿到flag1,41人拿到flag2。一些选手也是通过各类VPN节点拿到了32个/8网段。
非预期:有些测速网站会将测速报告保留,因此有些选手能通过题目网址搜到其他选手的测速报告,拿到其他选手的任务网址并获取flag。有些搜索引擎甚至直接索引了部分任务网址及flag内容。题目设计时将查看链接和收集链接分开更为合理些。
flag1:0ops{M055_550W_D1g1t4L_L1f3_rev}
flag2:0ops{HELL0_FR0M_CNGI-SH-IX-AS-AP_nofollow}
其中最后一个下划线后的部分是发现非预期解之后,在数据库中删除了能搜索到任务id后,更新的flag。
CNGI-SH-IX-AS-AP是CERNET2上海交通大学核心节点(AS24364)的缩写,交大拥有近一百万个公网IPv4地址。