题目是xor?
下载下来之后是一串字符串
AAoHAR0jJ1AlVVEkU1BUVCAlIlFTUVUiUFRTVFVeU1FXUCVUJxs=
题目的思维是异或
这个靠点脑洞,经过多次尝试发现了
这里是考爆破,我就写了个脚本爆破了一下
主要思维就是先解base64然后再爆破异或的内容
因为解base64有不可见字符,所以写脚本好一点
import base64 task="AAoHAR0jJ1AlVVEkU1BUVCAlIlFTUVUiUFRTVFVeU1FXUCVUJxs=" s="" c="" a=base64.b64decode(task) for k in range(0,200): for i in a: c= (ord(i)^k) s=s+chr(c) print s
最后发现了flag
flag{EA6C37B5622FCD7573D6252385716C2A}
WEB easy tornado首先我们注意到
http://49.4.79.129:30452/error?msg=error
msg这里可以改内容会输出在屏幕上,当时只知道这一点
可以写个脚本测试过滤内容
import requests import re r=requests.get("http://49.4.79.129:30452/error?msg=OrzOrz") for i in range(32,126): url="http://49.4.79.129:30452/error?msg="+chr(i) r=requests.get(url) if (re.findall(r.content,'Orz')!=[]): print chr(i)
测出来过滤掉了这些东西
当时卡在这里就没有思路了
不知道怎么构造 md5(cookie_secret + md5(filename)) 赛后看WP才知道这里这个
这是个Tornado框架的注入, 参考文档
所以payload为
http://49.4.79.129:30452/error?msg={{handler.settings}}
得到了cookie_secret就可以构造签名读取flag了
ltshop登入账户后我们发现只有20¥
但是
这里条件竞争可以多买辣条

当时试过溢出但是不知道溢出点在哪里参考了WP之后才明白了溢出的方式
这个有点像逻辑漏洞里面的,真的蛮有意思的题
溢出的总结
下面考虑溢出:
int: 2**32-1 = 4294967295
long: 2**63 -1 = 9223372036854775807
longlong: 2**64-1 = 18446744073709551615
但是要注意一点,这个题的逻辑是,numer*5 最大值>所以,其临界值应该为 18446744073709551615 / 5 == 3689348814741910323
于是尝试 3689348814741910323+1 == 3689348814741910324
溢出后的值比较小,在辣条的数量之内,从而兑换成功。
所以我们兑换3689348814741910324个大辣条即为溢出点
可得到flag
总结这次护网杯的题目质量算是蛮好的,WEB的思路为不全是脑洞,涉及到了很多细的知识点。在做CTF过程中,以后不要老局限于以前会的攻击方式,应该去看看一些平时不是经常接触的内容,发现新的内容应该勇于尝试,如tornado这个题,就需要快速学习能力,去看看开发手册,抓重点,WEB题在做的时候应该要多百度多google多看看文档,不要死磕在瞎测试。