绕过应用头像GIF上传限制 Bypass the GIF Upload Restriction
想要实现在有GIF上传限制的应用绕过GIF限制,我们需要知道这个限制在那个环节,是怎么工作的。
限制的原理
一般上传头像的实现是客户端请求后端API发到远程服务器,然后服务器将GIF存到数据库中。
- 用户侧(web端、客户端和桌面端)
- 服务侧(后端)
- 数据库(RDB、对象数据库)
所以开发者可以在用户侧和服务侧增加对GIF的检测,或是将数据库配置为不允许存储GIF。
怎么判断一个图片是否是GIF呢?
-
检测后缀:检测是否是
.gif
的后缀 -
检测内容格式:检测是否有GIF的魔数
所以以下的场景是可以绕过的
- 用户侧:没有检测后缀和内容格式,或者检测后缀但没有检测内容格式
- 服务侧:
- 没有检测后缀和内容格式,或者检测后缀但没有检测内容格式
- 没有对图片做特殊处理,比如压缩
- 数据库:允许存储GIF
绕过限制
所以要绕过限制,我们可以做以下的尝试
- 以web端为例,在检测GIF后缀的ifelse代码处打断点,更改变量或判断逻辑绕过后缀检测。
- 将GIF的后缀改成PNG,由于其文件格式仍旧是GIF且不会被服务端修改,在被客户端展示时仍旧是动图。
- 尝试找到上传API,复制好登录cookie后,尝试更改内容为想要的GIF后请求接口。
- 如果服务端有后缀的检测,可以尝试将GIF的后缀改成PNG,由于其文件格式仍旧是GIF且不会被服务端修改,在被客户端展示时仍旧是动图。