WEB easy tornado
打开链接是几个文件的列表,分别打开,关注url和内容
容易看出来,读文件的url就是,filename=(想读的文件名)加上一个签名,而签名是md5(cookie_secret + md5(filename))
问题就在于cookie_secret是什么。又看到Orz.txt里面有提示 render(),这个是生成模板的函数,于是想到模板注入STTI。
在读取文件失败的这个链接中,发现STTI漏洞:
但是发现有过滤,测试一下发现,过滤的特殊字符有:
结合Tornado框架,想到的是:
于是payload为:
得到cookie_secret,利用这个cookie_secret,可以写脚本,来获得相应文件的签名值。
ltshop
注册账号,进入系统,发现我们有¥20
看一下要求
看到第三个要求,很容易想到不是常规解法,可能会用到溢出。
但是问题在于就算是溢出,我们也应该至少能换一个辣条之王才行,但是我们只有20元,只能买4包辣条,一个辣条之王也换不了。
这里算是纠结了一下,最后想到利用条件竞争,试验发现一个账户的两个登陆同时买辣条,只会扣一次钱,却会得到两个辣条。利用burpsuite进行条件竞争:
这里多设置几个线程
看到已经购买到很多的辣条
再看此时的账户,已经有足够的辣条了。
下面考虑溢出:
**
**
但是要注意一点,这个题的逻辑是,numer*5<最大值
所以,其临界值应该为:18446744073709551615 / 5 == 3689348814741910323
于是尝试:3689348814741910323+1 == 3689348814741910324
溢出后的值比较小,在辣条的数量之内,从而兑换成功。
注意另一点,溢出的时候不能太大,因为太大导致溢出后的值过大而超过辣条的数量,出现这种情况
此时的账户:
再兑换flag,即可:
PWN
gettingstart
用 IDA 打开程序:
发现可以溢出 buf 从而修改掉 v7 和 v8 的值来通过验证,所以构造利用脚本:
得到 flag :flag{e47ba37e5e4fe4d6538f91955c63ef23}
Misc
迟来的签到题
提示xor,base64解码后异或
写个脚本爆破下
import base64
Crypto
fez
fez.py
fez.log
Feistel加密方法,轮函数也是异或
这里给出了print出的值,所以知道
**
**
test和用flag填充的m的长度都为54
加密使用的K值是不知道的,所以写不出解密函数,但可以通过给出的testans与ans异或使K消掉
记最后一轮flag加密后的为L7和R7,test加密的为tL7和tR7,初始test为tL0和tR0
则ai=tLi^Li=tRi+1^Ri+1^tLi+1^Li+1
而且Ri=Li+1
所以ai=ai+1^tLi+1^Li+1
最终得到L0和R0
exp
运行结果:
**λ python fez_exp.py
flag{festel_weak_666_lol88fj3820}叡↓泺y蝵:;铸醛o磋萸?**