文章目录 [隐藏]
注意:题目中出现的链接需要替换后才能访问 redpacket.kaaass.net=>redpacket.kaaass.net/archived/2018/。
为了给大家在无聊的新年找点事玩,我在 BCPU 和另一个群发了个解谜红包。由于支付宝可以发口令红包,于是只用藏 8 位数字就行了。题目很简单:redpacket.kaaass.net。现在我就来讲讲怎么收这个红包吧 23333
Stage 1
首先就是看 redpacket.kaaass.net 啦,浏览器打开发现 “POST password!”。猜测应该是需要 POST 方法,并带上 param。那么 param 是啥?再看看 html:
<p>POST <a name="passwd" val="FOUND THAT TXT!!!">password</a>!</p>
那就是 passwd 了!随便 POST 一个,发现返回:“Param passwd should be a number!!!!”。那随便试试数字,得到返回:“What if the password isn’t here?”。根据提示,密码应该不在这个页面。注意到之前 val 处是 “FOUND THAT TXT!!!”,于是我们就得到了本关重点 “TXT”。很多人以为是文本文档,于是就疯狂的尝试,甚至 log 里还记录了 “/static/qaq.txt” 这样的请求。其实这个 TXT 指的是 DNS 的 TXT 记录。解析 redpacket.kaaass.net 的 TXT 记录得到 “a2FhYXNzLm5ldC9yZWRwYWNrZXQv”。这一串实际上是 base64,解码得到 “kaaass.net/redpacket/”。打开发现提示 “GET ttl”,联想之前的 POST,当然就是发一个 GET 请求并附上 ttl 了。不过 ttl 究竟是什么?很多人都以为是数据包的 ttl,然而其实是 TXT 记录的 TTL。GET 之后得到下一关链接 “redpacket.kaaass.net/welcomestage2/”。
Stage 2
如果使用浏览器打开,那整页只有一串 “6H/cane3=trkaEs?4Teeattc0pdts/ao4:p.stgd/aK.hee”。不过标题还有一个提示(其实是提示的提示):“I’m feeling HUNGRY!!!!! – Stage 2”。猜测和 COOKIE 有关,检查发现网页设置了 3 个 COOKIE。
hint1:2ab => a\nb => ab
hint2:3uuddlrlrbaba => uudd\nlrlr\nbaba\n => ulburadlbdra
hint3:4BcpuCheersUp => Bcp\nuCh\neer\nsUp => BuescCeUphrp
按照提示,前面的数字代表需要分的行数。分行后:
a
b => abuudd
lrlr
baba => ulburadlbdraBcp
uCh
eer
sUp => BuescCeUphrp
发现就是竖着读!回到我们的一大串字符。然而这一串字符有 46 字,并不能被 6 整除。这里是一个提示里没有包含的规则 —— 前几行可以多一个字符,不过是能推理出来的,理由如下:
- 读取方法为竖着读取。所以最后一列可以不填满。
- 可以猜测最后得到的是链接。由于第一位字母不会在变换中变动,所以第一位就是 H。考虑到是链接,猜测开头是 Http://。这样也可以分得出来。
总之最后得到:
6
H/cane3=
trkaEs?4
Teeattc0
pdts/ao4
:p.stgd
/aK.hee => HtTp://redpacket.Kaaass.nEt/thestage3?code=404
于是成功进入第 3 关!
P.S. 虾米音乐的 url 就是通过这种方式编码的。
Stage 3
当头就是 404。好像有一些人就放弃了 233333。不过仔细看页面里,有一句 “LEAVE me now!!!!!!”。这肯定是提示,不过暂时用不上。想到参数里有个 code,而且提交的就是 404…… 如果改掉这个呢?随便试一试就会发现,输入什么状态码就会返回什么!
那 “LEAVE me now!!!!!!” 呢?在 HTTP 状态码里,和 “LEAVE” 有关系的就是几个跳转的状态码。由于不是 POST 方法,所以只有 301 或 302 是可以的。跳转的网页提示 “What do you need if you want to drink a cup of tea? BTW, I know you already had had some COOKIEs :)”。emmmm……
没错,这就是我最喜欢的一个解谜了!答案就是一个神奇的 HTTP 状态码:“418 I’m a teapot”。这个状态码本来是一个愚人节玩笑。我之所以喜欢这个谜题还因为扯上了上一关的 COOKIE。返回里说 “I don’t think you could get the PA55W0RD.”。奇怪的拼写加上特异的大写,“PA55W0RD” 就是密码啦!不过仔细一看发现提示 “Repeat me 4 times.”,这里其实原本不是这样的,后文会说。那么这是什么密码呢?
还记得最开始的谜题吗?没错,我们回来了!不过 POST 之后发现 “PA55W0RDPA55W0RDPA55W0RDPA55W0RD” 是错的…… 提示还是 “Param passwd should be a number!!!!”,没错,密码就是 “550550550550”(o 和 O 在 Arial 等等字体里比较像,这里是个大坑 233333)。于是你进入了最后一关。
Stage 4
那一大串返回足足有 100 多 k。稍稍观察后,会发现这是 base64 编码的(尤其是观察最后的 ==,base64 中用于占位)。其实这是一张 base64 编码的图片。没错就是我独角兽老婆!
唯一的提示就是 “Unpack me”,扣屏幕当然是没用哒!那么如何 Unpack 这个礼物呢…… 猜测是压缩包?没错就是压缩包!不过其实这里还有一些理由。文件开头是 FF D8,推测这是 jpeg 格式文件。于是我们可以去寻找文件尾部 FF D9。找到后,观察 Offset 00013BD5 处是 50 4B 03 04,这事实上就是 zip 的文件头。到这里还不是很踏实,我们去找找 EOCD 的标志 50 4B 05 06。果然在 Offset 00014029 处找到了!没错这就是 zip 文件!接下来可以把这段复制出来,也可以直接把文件后缀改成 zip。对了,多说一句,@天台 dalao 从图片大小就看出问题了,好厉害。
然而有密码。不过好在有提示 “Password Is 3tDcpohertnesii”,眼熟不?解码得到 theDescription,那我们开开心心的 feed 进去…… 嗯?密码不对!没错,这是提示。然而压缩包的描述里啥都没有。那么所谓描述是什么呢?答案是 —— 图片描述(右击属性)。密码是:ILOVZ23!。
加压后我们得到了两个 script,分别是 python 和 java 语言编写的。内容相同,只不过为了让不懂 python 的人也能看懂,所以增加了 java 语言。取 python 脚本如下:
#!/usr/bin/env python # encoding: utf-8 def xor(a, b): return ''.join((lambda cur_char:[ chr(ord(x[0]) ^ ord(x[1])) for x in cur_char ])(zip(a, b))) if __name__ == '__main__': str = input('Guess a redpacket code: ') if (xor(str, 'ilovbcpu') == '[]XO[ZBG'): print('Congratulation!');
(求不轻喷 str 这个命名,python 渣)
因为 XOR 的特性,直接把 ilovbcpu 和 [] XO [ZBG 取异或就行。至此我们成功的解出了红包。服务器我暂时会保留,有兴趣的 dalao 可以走一遍流程。
P.S. 最后一关的设计来源于 @CancerGary dalao(博客见最后致谢),特此感谢!
一些有趣的事情
- 总共 3 位 dalao 解出了红包。不过 20 的拼手气红包最后退还了 12.4…… 虽然后来平分了余款
- 最开始 “重复 4 次” 的那个提示事实上原来是 “这就是密码”。至于为什么改掉了…… 因为有 dalao 暴力得到了密码(那时候密码只有 550 三位)。所以后来只能改成 550550550550 了 23333
- 为啥图片是独角兽?因为之前 30 勋章兑换我错!过!了!
- 为啥密码是 Z23?因为是真爱呀~PRPRPRPRPR
- 根据 log 显示,很多 dalao 卡在了 S3。看来 wiki 真的很重要。
- 询问我的,我只会把网页里的提示里重复一遍。
你以为就这样结束了?
不不不,我的确是说红包是 20 拼手气,但我有说只有一个么?dalao 们难道不觉得有些提示很没头没脑吗?
隐藏红包 1 – Stage3
最好想到的隐藏红包在 Stage3。至于这些隐藏红包的解法,我希望众 dalao 能自己尝试探索。我在这里设置了回复显示。
隐藏红包 2 – Stage2
既然有了一个,为什么不能有第二个呢?而且既然 Stage3 可以有,那 Stage2 为什么不能有?因为我把第二个隐藏红包的入口藏得很特别,所以隐藏红包 1 的存在很大程度上暗示了这个红包的存在。而且,暗示不仅仅只有这一个!老规矩,回复可见。不过先给想尝试的 dalao 留个提示:这个红包发在 BCPU 群里,本组织的主页可以看我博客右侧的友链第一个。
隐藏红包 3 – Stage1
这个红包最后没发(取消了),因为太简单。不过我也挂上去了。
P.S. 由于不可抗力,本文原文实际上已经丢失。其他部分通过 Google 快照找回,然而隐藏的部分实在是无能为力了…… 所以你现在看到的是我后来补写
(其实还没补)的内容,可能非常不连贯,还请多多理解!2018.7.26 22:16 – 一下午把整个过程都重新上线,又把隐藏关重写了一遍,虽然没人看,权当纪念了,如果你有缘看到这行字,不妨发个评论
(虽然不发评论也看不到这行字)。啥?你说为啥是今天填坑?(手动滑稽)
隐藏红包 1
不知道你看 wiki 的时候有没有注意到这个状态码:402 Payment Required。没错,这就是这个红包的入口了。其实我个人觉得这个提示还挺明显的,而且也确实有人想到了。输入之后,会提示 “Want to require a payment? What about the /secretstage”,于是我们就找到了隐藏关卡的入口。直接访问,提示 “GET me you feeling!”。嘛…… 虽然不知道提交什么,反正随便 GET 一个 feeling 先~提交后返回 “233 You Kidding Me”。这个结构…… 不就是状态码的结构吗?!于是回到第三关,输入 233,提示 “You could post you “feeling” now! :)”。这回可以顺利的 POST 了,成功后返回 “Thank you, and … LEAVE me now!!!!!!”。于是,回到 secretstage,再次 GET 提交与刚刚相同的 feeling 即可。
然后返回如下内容:
redpacket.kaaass.net/secretstage/question/?ind=1
redpacket.kaaass.net/secretstage/question/?ind=2
MERGE THEM
没错,这才是这关的本体!我们先来看问题 1。没错,现在开始才是真的纯解谜。第一关的谜题是 “OLD NEWS(旧新闻)”,正文只有 “M29 founded by Walter Colquitt & Luke Welsh.”,提示是 “abcdef => deab”。解题方法很简单,拖进百度搜一搜,第一条就是。没错,就是梅森素数。M29 指的就是第 29 个梅森素数,而根据提示的 6 位,我们取其 p110503 按照提示组合,得到 5011。
第二关的解谜是 “OLD DOCUMENT(旧文档)”,内容是:
Profile for Datagram Congestion Control Protocol (DCCP)
Congestion ID 4: TCP-Friendly Rate Control for Small Packets (TFRC-SP)
解法还是暴力百度,其实这就是 RFC 文档的标题。不过这次只搜第一行可不行,这文档标题其实有两行,是 RFC5622。于是拼接即可得到红包码 50115622。
有趣的事实
- 事实上,是现有 233 才有这个隐藏红包的。可以看到提交完的提示是 “LEAVE ME NOW”,这不仅是为了不让试出 233 的人知道隐藏红包的存在,更因为隐藏红包没有的时候这就被设计出来了。
- 再次输入 feeling 是防皮措施。事实上,确实有人试出来了 233。比如天台 dalao,而且后来的隐藏红包关,还忘记了 23333
- 本来梅森素数那个是设计成取梅森素数的第 xx 位的,但是考虑到实在没多少人发现隐藏关,能简单点就简单点好了。
隐藏红包 2
第二个隐藏红包藏得很深,需要隐藏红包 1 暗示其存在。其实说来也简单,Stage2 的那些提示难道什么用都没有吗?突破口在 BcpuCheersUp。没错,这里用到了 BCPU 的官网 bcpu.tech。本题地址就是 Bcpu.tech/CheersUp 了。(由于原站数据丢失,维护者 KAAAsS 特别懒的原因,bcpu.tech 已经迎来闭店之日,所以只能查看 redpacket.kaaass.net/CheersUp 了)打开之后,发现是一个要求输入神秘字符串的网页。
JS 用了 aaencode 进行编码,不过这种编码基本上就是卖个萌。JS 的大致内容就是记录键盘动作并保存,最后提交的时候一同提交,这算是一个提醒。再一个就是上一次已经用了一个 hint,还需要使用剩下的 hint。最后的提醒就是 input 的 name——contra(魂斗罗)。所以就要用到 hint2 了,按照 ulburadlbdra 的顺序输入,提交就能获得一串字符 “c6554e5d3be06a74f07a21a04a23e66c”。于是我们又是面对一串谜一样的字符串了。这个谜题骚就骚在,原本众 dalao 可能都在用 Postman 类的工具,很容易看出问题,而这里答案返回的形式是 ajax,于是很容易就会漏掉什么信息。没错,就是响应头!经过查看,这里多返回了两个自定义头:
X-Encoding-With: AES_ECB
X-Key-Length: 16

接下来,用 AES 解码就没问题了…… 吗?密钥是啥?其实这里提示还是很多,一个是 X-Key-Length 说明 Key 长度是 16。另一个就是,只剩下 hint1 没有用到了。所以密钥就是 ab 了,这里注意前往别用网上的解码,要么是错的,要么结果 base64。解码得到红包码:86774122。
有趣的事实
- 最开始连 Bcpu 都强制要求 B 大写,不过后来发现有 BUG,于是就取消了。
- 原本的密码只有 bbaa,但是我后来感觉一是提示只有 contra,不明显,二是太短容易被暴力过。于是就出现了第一版,那时是点按方向键会直接打出对应的箭头。然而,我又觉得提示过于明显,所以增加了一层解谜,即不同的方向键点按会出现另一些方向符号。然而,这一次又设计的太难了。于是最后折衷,就决定闷声大记录,
这是坠吼的。 - 只有天台 dalao 最终到达了这里
隐藏红包 3
最后一个红包真的太简单了哈哈哈哈。还记得第一关让你 GET tll 吗?那就老老实实发个 GET tll 咯。返回的内容很长:
2.3
0.3
2.5
2.1
2.5
1.9
0.6
0.5
0.1
2.3
1.9
0.0
0.6
0.9
0.2
2.4
0.3
2.8
0.5
0.1
1.9
2.6
2.1
0.0
一串小数,结合 ttl 的另一个意思 ——TTL 电平。没错,大于 2.4V 就是高电平 1,低于 0.4V 就是低电平 0,一组合就得到了二进制数字:101111000110000101001110。转为十进制得到 12345678,因为我并没有发这个红包,权当娱乐啦 23333
有趣的事实
- 原本每一行最后都有 V,重写文章的时候我删掉了
- 这关坑在入口,其实本身可以说是三关最简单的了
- 本来想在二进制上做手脚,但是真的想不出来了,时间有限 QAQ
- 悄悄放个卫星,新一年的红包我有脑洞了
还有些有趣的事情
到截止时间,彩蛋里收到了这些留言:
- I’m so weak. By Terrace
- 233
- I’m KAAAsS lol
- WTF
都是卖萌(←好啦你最萌!)。
最后
希望大家玩的开心!祝大家新年快乐!
致谢
SuperFashi dalao:看了 dalao 的博客里关于 2016 年红包的想法才有了这次红包
CancerGary dalao:最后一关创意来自 dalao
天台 dalao:感谢 dalao 辣么认真的解谜 QAQ
沙发!
dalao 写的好,走心了。
天台 dalao 的流程:
https://blog.terracecn.cn/archives/7/
那个暴力猜出密码的就是我 23333
思路比较不一样,结果就是直接从 S1 跳到了 S4
试图玩今年隐藏关的我回来看去年的了 2333
今年的更魔幻 xd
莫非要点了 “抱歉! 需要 评论本文 才能阅读隐藏内容。” 里的评论本文才能看见吗…
还是看不见…
修复了…… 原来 wp 现在评论没有 cookie 记录了(也有可能我干了啥整没了)
嗯现在可以看到了,有个问题。。是不是有个关于四暗刻单骑的隐藏关 ***,以及随处可见的麻将痕迹是怎么回事 23333(这个是上面那位 ressed 发现的)
那是今年的隐藏啦,这篇是去年的。https://blog.kaaass.net/archives/1085
关于那个 Ressed 和我交流了,不过那并不是全部 w
emmmm 你现在能看到了吗,反正我还是点不开…