Skip to main content

绕过应用头像GIF上传限制 Bypass the GIF Upload Restriction

想要实现在有GIF上传限制的应用绕过GIF限制,我们需要知道这个限制在那个环节,是怎么工作的。

限制的原理

一般上传头像的实现是客户端请求后端API发到远程服务器,然后服务器将GIF存到数据库中。

  1. 用户侧(web端、客户端和桌面端)
  2. 服务侧(后端)
  3. 数据库(RDB、对象数据库)

所以开发者可以在用户侧和服务侧增加对GIF的检测,或是将数据库配置为不允许存储GIF。

怎么判断一个图片是否是GIF呢?

  1. 检测后缀:检测是否是.gif的后缀

  2. 检测内容格式:检测是否有GIF的魔数

所以以下的场景是可以绕过的

  • 用户侧:没有检测后缀和内容格式,或者检测后缀但没有检测内容格式
  • 服务侧:
    • 没有检测后缀和内容格式,或者检测后缀但没有检测内容格式
    • 没有对图片做特殊处理,比如压缩
  • 数据库:允许存储GIF

绕过限制

所以要绕过限制,我们可以做以下的尝试

  1. 以web端为例,在检测GIF后缀的ifelse代码处打断点,更改变量或判断逻辑绕过后缀检测。
    1. 将GIF的后缀改成PNG,由于其文件格式仍旧是GIF且不会被服务端修改,在被客户端展示时仍旧是动图。
  2. 尝试找到上传API,复制好登录cookie后,尝试更改内容为想要的GIF后请求接口。
    1. 如果服务端有后缀的检测,可以尝试将GIF的后缀改成PNG,由于其文件格式仍旧是GIF且不会被服务端修改,在被客户端展示时仍旧是动图。