如有侵权,请联系删除
简介
WAF,俗称”狗“。就是看门狗的狗。主要功能就是保护web应用不受黑客的入侵。
WAF主要有一下几类:
- 软件型。就是在Web服务器上的一个应用程序,和服务器上的文件直接接触,时刻检查是不是有Webshell之类的文件。
- 硬件型。这个比较高级啊,是放在链路中,是硬件,可以监控恶意流量什么,很高级的样子。
- 云WAF。类似一种CDN,在转发之前先将请求报文进行过滤。
- 网站系统内置的WAF。通常网站都会做这种处理,比如什么黑名单白名单,编码绕过,双写绕过,绕的都是这些。
WAF判断
Sqlmap
Sqlmap中的--identify-waf
可以识别有没有WAF。
sqlmap -u "http://www.xxx.com" --identify-waf --batch
如果安装的WAF没什么特征,那么识别出的类型就是Generic
。
手工判断
比如一条网址正常是127.0.0.1/test.php
,那么你就127.0.0.1/test.php?aaaaa=11111 union select 1,2,3%23
,大概就这种感觉,因为这个请求根本不存在,按理说不会管。但是里边的词却有可能被WAF拦截,所以此时如果被拦截就说明有WAF。
绕过
感觉书中的真的是抛砖引玉,很多在之前都已经说的老掉牙的了。这里之写我不太熟悉的,其实这些绕过真的是比较重要,关于这些应该关注一些大佬的博客,或者大佬的公众号,学。
使用注释
这个和内联注释多多少少有点区别的还是。
内联注释是因为当中间有!
,后边内容就会执行。这里的注释指的是,WAF可能会将注释符连带中间的内容全部换成空,这样就会有效避免内联注释那种绕过方式了。
但是假如payload是这样union /*d*/ select /*b*/1,2,3#
,WAF那条傻狗过滤完正好变成union select 1,2,3#
。
多参数请求拆分
以sql注入为例,GET请求中的a=1 & b=2
传到sql语句时会变成and,就像这样and a=1 and b=2
。
所以,可以利用这一特性绕过。比如a=union & b=select 1,2,3#
,但是这样还不可以,因为这样可能可以绕过WAF,到是没有意义,因为变成sql语句是and a=union and b=select 1,2,3#
。
所以我们要a=unino/*&b=*/select 1,2,3#
,这样变成sql语句就是这样了,and a=union/*and b=*/select 1,2,3#
,也就是,and a=union select 1,2,3#
。
寻找网站IP
当我们使用ip直接访问网站的时候,是不会经过云WAF的。
至于怎么找到网站ip在之前信息收集那里说过了。
HTTP参数污染
以color=red&color=bule
为例
HTTP参数污染表
服务器中间件 | 解析结果 | 举例说明 |
---|---|---|
ASP.NET / IIS | 所有出现的参数值用逗号连接 | color=red,bule |
ASP / IIS | 所有出现的参数值用逗号连接 | color=red,bule |
PHP / Apache | 仅最后一次出现参数值 | color=blue |
PHP / Zeus | 仅最后一次出现参数值 | color=blue |
JSP, Servlet / Apache Tomcat | 仅第一次出现参数值 | color=red |
JSP, Servlet / Oracle Application Server 10g | 仅第一次出现参数值 | color=red |
JSP, Servlet / Jetty | 仅第一次出现参数值 | color=red |
IBM Lotus Domino | 仅最后一次出现参数值 | color=blue |
IBM HTTP server | 仅第一次出现参数值 | color=red |
mod_perl, libapreq2 / Apache | 仅第一次出现参数值 | color=red |
Perl CGI / Apache | 仅第一次出现参数值 | color=red |
mod_wsgi(Python) / Apache | 仅第一次出现参数值 | color=red |
Python / Zope | 转化为List | color=[‘red’,‘blue’] |
所以,假如中间件是一个IIS,那么我们的payload可以由union select 1,2,3
变为union/*&inject=*/select/*&inject=*/1&inject=2&inject=3
,这样经过IIS之后,就会变为union/*,*/select/*,*/1,2,3
这里确实说的只是一些再基本不过的了,实战中根本没这么容易。可以说,我在实战中真的基本没怎么绕成功过…
而通常绕WAF是一切的开始,我们需要判断出绕过的规则才能写相应的脚本来进行渗透测试。这部分绝不是上边说的那么简单。
大家还是得多看大牛的文章,别老看我的这这些入门TIPS!