[BSidesCF 2019]Mixer
刚进入页面,提示我们要使自己为admin
但is_admin选项是灰色的,我们修改js
然后随便输入个账号进行登录,发现登录后依旧提示我们不是admin,我们猜测cookie被重置了
我们将is_admin
设置为1
,抓个包看一下
果然,存在个set-cookie,我们将回显页面刷新,重新抓取数据包
我们再将user的前三个字符修改为111,看看回显
成功得到了报错内容,因为只改了开头,所以只有后半部分完整
我们以相同的方式在最后的三个位置修改为111,得到了session的解密
1 | {"first_name":"first","last_name":"last","is_admin":0} |
这里我们需要了解一下分组密码工作模式
本题也就是每块内容被分成固定的大小块单独加密,推测为CBC模式
CBC是16字节一个块,每组相互独立,加密后每组为32位,尝试整块替换,并且在json中1.00 == 1
首先构造被加密的字符串
1 | {"first_name":"A1.00000000000000","last_name":"last","is_admin":0} |
我们可以将字符串拆成5组,也就是
1 | # 第一组 |
我们将加密后的第二组放到第四组的后面,构成
1 | "is_admin":1.00000000000000 |
完成了构造,那么就需要加密后的cookie,因为没有加密所需的key,所以通过原页面完成,构造登录内容
1 | first name = A1.00000000000000 |
提交表单后,我们得到了user的值
1 | 4877c6993a88a12b920dd6044f5b7535943f6c9cc87a3d2ecc6fae7ef3a62340fcb7226588a4001f7d7ce2b8ebc3b5078679c68a27c7de7ee67515bb01ab6e610395f3b0776d474b5a5f6ad104768390 |
前四组不要动,也就是到128位之前,我们将32到64位作为第二组内容取出,并拼接到第四组后
1 | s = "4877c6993a88a12b920dd6044f5b7535943f6c9cc87a3d2ecc6fae7ef3a62340fcb7226588a4001f7d7ce2b8ebc3b5078679c68a27c7de7ee67515bb01ab6e610395f3b0776d474b5a5f6ad104768390" |
得到构造好的user
1 | 4877c6993a88a12b920dd6044f5b7535943f6c9cc87a3d2ecc6fae7ef3a62340fcb7226588a4001f7d7ce2b8ebc3b5078679c68a27c7de7ee67515bb01ab6e61943f6c9cc87a3d2ecc6fae7ef3a623400395f3b0776d474b5a5f6ad104768390 |
我们将user修改为构造好的,刷新一下页面,得到flag