江鸟's Blog

浅析文件上传

字数统计: 770阅读时长: 2 min
2019/07/10 Share

有关文件上传的学习内容

文件上传

本质

​ 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。显然这种漏洞是getshell最快最直接的方法之一,需要说明的是上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。

​ 本质其实也是POST传输的一种特殊形式。

常见效验方法

  • 客户端效验

    使用js来效验上传文件的后缀是否合法。

    判断方法:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。

  • 服务端效验

    1. 校验请求头 content-type字段,例如用PHP检测

    1
    2
    3
    if($_FILES['userfile']['type'] != "image/gif"){
    ....
    }

    2. 白名单检测

    3. 文件加载检测:一般是调用API或函数去进行文件加载测试,例如图像渲染测试,当测试结果正常的时候才允许上传

    4. 后缀名的黑名单白名单

    5. WAF检测

对应校验的绕过方法

客户端:修改js 或者 抓包修改请求内容

服务端:

  1. 校验请求头content-type字段绕过

通过抓包来修改Http头的content-type即可绕过,也肯定是可以绕过这种检测

  1. 过文件头检测,可以使用图片马

  2. 文件加载检测也可以使用图片马

  3. 后缀名检测

    • 黑名单检测

    • 常见方法:大小写绕过,可以被解析的拓展名绕过

    • ​ jsp jspx jspf

    • ​ asp asa cer aspx

    • ​ php php php3 php4 pht

    • ​ exe exee

    • 白名单检测

    • 截断

      test.php(0x00).jpg
      test.php%00.jpg
    • 解析漏洞:这类漏洞是本身服务器的中间件产生的,例如apache,nginx都被爆出过存在解析漏洞,存在解析漏洞的话,上传的安全性几乎就完全失去了,下面再详细分析。

  4. 操作系统相关的绕过

    • 上传不符合windows文件命名规则的文件名

    • 某些版本的windows系统自动去掉不符合规则符号后面的内容。

常见waf绕过

  1. 大小上限:WAF对校验的用户数据设置大小上限,此时可以构造一个大文件的木马,前面都是填充的垃圾内容

  2. filename:针对早期版本的安全狗,可以多加一个filename来绕过,

    绕过waf通常只能靠大量的实验或者依靠最新的漏洞

木马的使用

https://lddp.github.io/2018/07/23/%E4%B8%80%E5%8F%A5%E8%AF%9D%E6%9C%A8%E9%A9%AC/

CATALOG
  1. 1. 文件上传
    1. 1.1. 本质
    2. 1.2. 常见效验方法
    3. 1.3. 对应校验的绕过方法
    4. 1.4. 常见waf绕过
    5. 1.5. 木马的使用