该题,参考
https://github.com/beerpwn/ctf/tree/master/2019/BSidesSF_CTF/web/mixer
打开题目,是一个登录框
提示的大致意思就是“签名”和“ rack.session” cookie并不是该题的考察点
这儿需要我们登录,根据题目提示,我们需用admin登录就能拿到flag,我们先随便登录一下试试
返回了一串cookie user,应该是某种加密
但是题目并没有提示,尝试解码也并没有特别明显的线索,后来随便改一下user的值,发现报错,并且返回,发现后面的部分发生了乱码
我们这儿猜测是ECB加密,因为更改前面的密文完全不影响后面的解密。
根据题目我们知道,解码应该为
{"first_name":"ma","last_name":"jian","is_admin":0}
但是题目有个较特殊的性质,只需要将0改为1即可,而且1.00000000 == 1
所以我们可以尝试整块替换
最终构造这个样子,我们知道一般cbc是16字节为一个块的
{"first_name":"A
1.00000000000000
","last_name":"p
aww","is_admin":
0}
所以我们可以分为5块,而加密后是以16进制表示的,所以我们需要的第二块就在32-64,我们把这块加在倒数第二块。
第二块的值为1.00000000000000
最后一块为0},所以结合起来就是
1.000000000000000},再与之前的结合
整体就是
{"first_name":"A1.00000000000000","last_name":"paww","is_admin":1.000000000000000}
我们以账号A1.00000000000000 xxxx登录
得到的cookie为
4b53df97f4941ae9d1f2d1ec8086ce7faec363ec4880cb7538cfbfa565993c6bb06f8f2498d1eb663dab96494bed3b69990235ff0c2f29e285db8dbc0ec32986883a58f9f11c94d4408517899462359e
我们提取第二块加在倒数第二块
cookie_new=cookie[:-32]+cookie[32:64]+cookie[-32:]
得到
4b53df97f4941ae9d1f2d1ec8086ce7faec363ec4880cb7538cfbfa565993c6bb06f8f2498d1eb663dab96494bed3b69990235ff0c2f29e285db8dbc0ec32986aec363ec4880cb7538cfbfa565993c6b883a58f9f11c94d4408517899462359e
替换原来的cookie