Single

[BSidesCF 2019]Mixer1 min read

不难看出需要让is_admin?这里等于1。f12试过了不好使(哈。

登录成功后会疯狂的暗示:

And you can safely ignore the rack.session cookie. Like actually. But that other cookie, however….

随意输入东西点击login抓包,会产生Cookie:

如果修改了user(仅替换部分字符)里的输入会产生如下报错:

经过数次替换发现user是这么加密的:

{“first_name”:”something”,”last_name”:”something”,”is_admin”:0}

试着改了rack.session一个字符,整个都变了。。

可以猜测,user使用的是ECB 加密,因为如果是 CBC 的话, 前面也会变成乱码。

ECB 加密是 16 位一组, 并且每组互相独立, 加密后每组为 32 位。又因为在JSON 中1.0 = 1,所以如果替换成这样:

第一个块

{“first_name”:”A

第二个块
1.00000000000000

第三个块
“,”last_name”:”1

第四个块
231″,”is_admin”:

第五个块
0}

加密后的第32位到第64位整块都是1啦!这样我们就知道加密后的1是多少,把它加到is_admin,也就是第四个块的后面。

前四个块都不用动了(32*4)复制第二个块到第五个块前面:

替换后获得flag。学到很多。

⚪参考:

https://guokeya.github.io/post/9q5WhONzV/