WAF识别软件(WAFW00F)以及WAF绕过

Posted ZRIP

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WAF识别软件(WAFW00F)以及WAF绕过相关的知识,希望对你有一定的参考价值。

责任声明:

本文章仅供学习交流使用,如有利用进行非法行为

上传者不承担任何责任,使用者后果自负

WAF防护分析

什么是WAF?
Web应用防护系统分为两种:软件与硬件

安全公司内部的为硬件,个人或小企业为软件,无论哪一种都是为web提供安全

存在WAF的网站,不要用扫描工具扫,会进行拦截拉黑,请勿未授权对网站进行渗透测试

WAFW00F探查 

软件下载地址:

GitHub - EnableSecurity/wafw00f: WAFW00F allows one to identify and fingerprint Web Application Firewall (WAF) products protecting a website.

mirrors / EnableSecurity / wafw00f · GitCode

 官方使用手册:.

Home · EnableSecurity/wafw00f Wiki · GitHub

环境配置:python3.0版本及以上

安装:

第一步:下载解压至python的lib文件夹

第二步:打开命令行窗口进入当前软件路径,进行安装 

.

 或者pip安装

进入Wafw00f文件路径运行main.py

 帮助文档

便携打开WAFw00f 

将以下代码复制到txt文档改成bat文件后缀,下次打开直接点击该bat文件就能直接使用

 代码中的进入的路径需要该当前进去wafw00f文件夹的路径 

D:
cd D:\\py\\pycharm\\PyCharm Community Edition 2022.2.2\\lib\\wafw00f-master\\wafw00f\\
python main.py
doskey wafw00f=python main.py $*
cmd \\k 

 简单测试能否使用

手工探查WAF:

使用F12network查看响应头

云盾:响应头包含yundun关键字;页面源代码有errors.aliyun.com
安全狗:响应头包含waf2.0、Safedog等字样
腾讯云:阻止响应页面,包含waf.tencent-clound.com
阻止响应代码405 method not allow
安全宝:恶意请求时返回405恶意代码 响应头包含X-Powered-by:Anquanbao
百度云加速:响应头包含Yunjiasu-ngnix
创宇盾:恶意请求时页面URL:365cyd.com、365cyd.net

waf绕过

不同的WAF产品会自定义不同的拦截警告页面

在日常渗透中我们也可以根据不同的拦截页面来辨别出网站使用了哪款WAF产品

从而有目的性的进行WAF绕过。

拦截原理

通过他的字典匹配当前输入的字符在字典里有没有存在,有即拦截

而我们想要绕过WAF,则是反向操作

避开字典库里面存在的字符但同时保证注入语句的正常使用

通俗来说检测你使用到了某字符就直接拦截,而你做的是不使用到字典的字符进行注入

提交方式绕过

在网站对其GET注入拦截,没有拦截post的策略下,我们可以更改提交方式为post,cookie、http头部等

前提条件:当前选择的提交方式当前网页代码支持该提交方式 

如果网站使用get只接受参数,用post提交是没有用,需要当前网页支持post提交方式

为什么利用改变提交方式也能绕过,因为部分在get提交的策略,在post上面没有限制

但同时两个都有WAF,则需要通过其他绕过方式,或post加其他

更改提交方式为post(我的靶场网页设置接受为request全接受)

数据提交绕过 

大小写:通过更改字符的大小写

加密解密:字符进行加密

编码解码:base64编码形式

等价函数:mid=ascii,eval=assert

同样执行功能的函数

特殊符号:根据当前数据库可以执行的符号

反序列化:数据通过反序列化格式提交(前提代码接受反序列化格式)

注释符混用:在编写代码的时候开发人员会添加一些注释符进行后续人员的理解

而我们可以利用注释干扰关键词匹配实现绕过

正常get提交页面

排查是哪个字符拦截

 

存在两个字符,拦截 

 存在union,不拦截

  存在select,不拦截

  由此得知拦截的是union select一个整句

-1/*%0a*/union/*%0a*/select/*%0a*/1,2,3#

增加各种干扰字符绕过拦截(增加干扰字符同时确保语句能正常使用)

大小写绕过

单纯的大小写还是会被拦截,这是因为WAF防护软件也会进行升级

再次循环 

加密解密绕过(前提网页有该加密方式)

对使用的字符进行加解密

编码解码()

注释符干扰

#a换行()在url中%23为#,a,%0a为换行

?id=-1%20union%23a%0D%0Aselect%201,2,3#

利用多个注释以及换行干扰 (在mysql中换行不影响代码实现)

-1 union/*//------//*//*
*/select 1,2,3#
?id=-1%20union/*//------//*//*%0a*/select%201,2,3#

?id=-1%20union/*/%27%20%27/*%20//*%0a*/select%201,2,3#

 相当于

 -1 union/*/' '/*//*
*/select 1,2,3#

 %27为单引号

 参数污染

HTTP参数污染:?id=1&id=2&id=3

 

总而言之,进行了参数污染过后,php+apache他会接受最后一个参数 id=-1

但在安全狗中,id=1后面部分已经被注释了,不会对其检测拦截

参数污染漏洞(HPP)挖掘技巧及实战案例全汇总 - 腾讯云开发者社区-腾讯云 (tencent.com)

 其他

FUZZ模糊测试

 类似爆破,脚本通过更换提交数据,对其获取到没有被拦截的

部分网站会ban用IP处理,谨慎使用

.windows使用phpstudy环境安装Apache版安全狗找不到服务名 

参考: Fuzz脚本的编写_合天网安实验室的博客-CSDN博客


伪造白名单绕过

前提条件:
条件1:知道对方白名单内有哪些ip
处理方法:可以通过使用对方网站ip地址,达到伪造网站本地地址访问网站
条件2:在修改http的header进行绕过时,如果网站获取ip是通过tcp网络层是伪造不了,如果获取电脑ip可进行伪造

X-forwarded-for
X-remote-IP
X-originating-IP
x-remote-addr
X-Real-ip 

静态资源

伪造数据传参到了图片文件,文本文件,当注入语句传参到文件,WAF防护是不会对部分静态资源进行识别

(通过解码2进制文件,然后将注入语句编写到二进制文件内)

常见文件后缀,txt,jpg,img,swf,jpeg,css

http://1.1.1.1/sql.php/?id=1

http://1.1.1.1/sql.php/1.jpg?id=1

url白名单

在进行访问admin,manager,system等后台敏感数据,会设置白名单防止误拦
我们可以对其进去注入,它是属于白名单列

http://1.1.1.1/sql.php/admin.php?id=1

爬虫白名单

部分WAF拥有爬虫白名单,而我们将自己伪造成爬虫进行访问,不会被当成攻击进行拦截
识别爬虫的方法:
修改数据包头的伪造成搜索引擎进行爬虫

后续更新其他

简单bypass SQL--绕过waf

注入点识别

+  -  *  /  %  《   》   ||

也可以用and替换为or  &&   ||

可以不使用and , or;直接用异或截断:1^1^0;1^0^0

可以用{``operation}来识别注入点:select * from users where id=1 and {``1=1}

 

 

绕过

1、大小写绕过:只针对于小写或大写的关键字匹配技术;对于正则表达式匹配时大小写不敏感便无法绕过

And 1=1    ;  UniOn   SeLeCt 1,2,3,4    ;

2、替换关键字:大小写转化无法绕过而且正则表达式会替换或删除关键字

如果正则只匹配1次则容易绕过

AandnD 1=1    ;  UniuNioNOn   SseleLecTeCt 1,2,3,4    ;

3、URL编码:在Chrom浏览器中输入一个链接非保留字的字符浏览器会进行URL编码;如空格会变成%20,单引号变成%27,左括号%28,右括号%29

普通的URL编码可能无法绕过;但是存在某种情况下URL编码只进行一次解码过滤的话就可以用2次编码绕过

 

以上是关于WAF识别软件(WAFW00F)以及WAF绕过的主要内容,如果未能解决你的问题,请参考以下文章

wafw00f及identYwaf的安装和简单使用

wafw00f及identYwaf的安装和简单使用

绕过waf

简单bypass SQL--绕过waf

一些注入绕过的姿势以及函数利用

sqlmap 出现 waf/ips,请各位大师帮忙求解?