1.上传漏洞
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力,这种攻击方式是最直接和有效的,文件上传本身是没问题的,有问题的是文件上传后,服务器怎么处理,解析文件。通过服务器的处理逻辑做的不够安全,则会导致上传漏洞。
2.漏洞条件

  • 文件可上传
  • 知道文件上传路径
  • 上传文件可以被访问上传
  • 文件可以被执行

全局数组$_FILES
image.png
案例:
image.png
相关函数
image.png

DVWA分析

image.pngimage.png
修改文件类型后上传成功

上传漏洞利用框架

1.收集可测试点
常见的可测试点包括以下几个方面:
1.应用程序上传功能(上传头像、附件上传等)
2.用户可控的输入点或者参数(页面POST表单部分、URL)
可以使用漏洞扫描工具进行扫描或者手动测试
2.判断上传漏洞类型
image.png
3.选取合适的绕过方法
image.png

上传漏洞种类与绕过方式

客户端校验-使用JS来判断后缀名
通过javascript来校验上传文件的后缀是否合法,可以采用白名单和黑名单的方式判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。
绕过方式:

  1. 禁用JS
  2. Brupsuite抓包修改

案例:
image.png
在前端验证的时候,可以添加或者修改js进行上传

服务器端校验-对数据包的MIME进行检查

MIME:web服务器使用MIME来说明发送数据的种类,web客户端使用MIME来说明希望接收到的数据种类。例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是JPG文件。
image.png
绕过方式:

  1. Brupsuite抓包修改

    服务器端校验-后缀名黑名单校验

    image.png
    绕过方式:

  2. 上传特殊可解析后缀。例如:.phtml.php2

  3. 利用.htaccess文件将jpg文件解析为php

下方代码即可将目录下evil.jpg解析成evil.php

  1. 大小写绕过
  2. 点绕过
  3. 使用Windows文件流特性烧过evil.php:SDATA
  4. 双写烧过
  5. %00截断(PHP版本小于5.3.4,PHP的magic quotes apc为OFF状态)
  6. 截断绕过(使用Brupsuite的Hex,将对应空格处的20改为00)
  7. 配合解析漏洞

    服务器端校验-后缀名白名单校验

    image.png
    绕过方式:

  8. %00截断(PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态)

  9. 截断绕过(使用Brupsuite的Hex,将对应空格处的20改为00)

    服务器端校验-突破文件头检查

    相关函数:getimagesize()、exif_imagetype()
    绕过方式:
    GIF图片格式:GIF89a<?php phpinfo();?>.gif后缀上传即可
    JPG图片格式:
    准备一个一句话,一个jpg图片
    使用:copy 1.jpg/b + 2.php/a evil.jpg生成一个带有一句话的jpg
    PNG图片格式:和JPG一样的操作

    服务器端校验-二次宣染

    就是根据用户上传的图片,新生成一个图片,将原始图片删除,将新图片添加到数据库中。比如一些网站根据用户上传的头像生成大中小不同尺寸的图像。
    绕过方式:
    GIF图片格式:寻找到一个演染后没有发生变化的部分,将恶意代码插入
    JPG图片格式:这里可以直接用国外的脚本
    PNG图片格式:直接使用国外的脚本

    服务器端校验-条件竞争

    后台逻辑:将上传的文件上传到Web目录,然后检查文件的安全性,如果发现文件不安全就马上通过unlink()将其删除。
    image.png
    绕过方法:在上传完成和安全检查完成并删除它的间隙,攻击者通过不断地发起访问请求的方法访问了该文件,该文件就会被执行,并且在服务器上生成一个恶意shell。这时候shell已经生成,文件被删除就无所谓了。

    其他的上传漏洞

    image.png

    ZZZPHP 1.6.1

    设置新的恶意文件
    image.png
    image.png
    输入文本位置
    image.png
    显示上传的文本位置
    image.png
    显示成功
    源码分析:
    image.png
    image.png
    查看调用点
    image.png

    image.png

    上传漏洞修复建议

    文件校验的几点建议:
    文件扩展名服务端白名单校验。
    文件内容服务端校验。
    上传文件重命名。
    隐藏上传文件路径。
    修复服务器容器各种解析漏洞