文章目录[隐藏]
注意:题目中出现的链接需要替换后才能访问redpacket.kaaass.net=>redpacket.kaaass.net/archived/2018/。
为了给大家在无聊的新年找点事玩,我在BCPU和另一个群发了个解谜红包。由于支付宝可以发口令红包,于是只用藏8位数字就行了。题目很简单:redpacket.kaaass.net。现在我就来讲讲怎么收这个红包吧23333
首先就是看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/”。
如果使用浏览器打开,那整页只有一串“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 => ab
uudd
lrlr
baba => ulburadlbdra
Bcp
uCh
eer
sUp => BuescCeUphrp
发现就是竖着读!回到我们的一大串字符。然而这一串字符有46字,并不能被6整除。这里是一个提示里没有包含的规则——前几行可以多一个字符,不过是能推理出来的,理由如下:
总之最后得到:
6
H/cane3=
trkaEs?4
Teeattc0
pdts/ao4
:p.stgd
/aK.hee => HtTp://redpacket.Kaaass.nEt/thestage3?code=404
于是成功进入第3关!
P.S.虾米音乐的url就是通过这种方式编码的。
当头就是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)。于是你进入了最后一关。
那一大串返回足足有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(博客见最后致谢),特此感谢!
不不不,我的确是说红包是20拼手气,但我有说只有一个么?dalao们难道不觉得有些提示很没头没脑吗?
最好想到的隐藏红包在Stage3。至于这些隐藏红包的解法,我希望众dalao能自己尝试探索。我在这里设置了回复显示。
既然有了一个,为什么不能有第二个呢?而且既然Stage3可以有,那Stage2为什么不能有?因为我把第二个隐藏红包的入口藏得很特别,所以隐藏红包1的存在很大程度上暗示了这个红包的存在。而且,暗示不仅仅只有这一个!老规矩,回复可见。不过先给想尝试的dalao留个提示:这个红包发在BCPU群里,本组织的主页可以看我博客右侧的友链第一个。
这个红包最后没发(取消了),因为太简单。不过我也挂上去了。
抱歉! 需要 评论本文 才能阅读隐藏内容。
到截止时间,彩蛋里收到了这些留言:
都是卖萌(←好啦你最萌!)。
希望大家玩的开心!祝大家新年快乐!
SuperFashi dalao:看了dalao的博客里关于2016年红包的想法才有了这次红包
CancerGary dalao:最后一关创意来自dalao
天台 dalao:感谢dalao辣么认真的解谜QAQ