Waf那些事

介绍waf

Waf是Web应用防火墙通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品

Waf通常有以下几类:

软件型waf

以软件形式装在所保护的服务器上的waf,由于安装在服务器上,所以可以接触到服务器上的文件,直接检测服务器上是否存在webshell,是否有文件被创建等。

硬件型waf

以硬件形式部署在线路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监听模式时只记录攻击不进行拦截。

云waf

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

网站系统内置的waf

网站系统内置的waf可以说是网站内置的过滤,直接镶嵌在代码中,相对来说自由度高,一般有以下几种情况:

  • 输入参数强制类型转换
  • 输入参数合法性检测
  • 关键函数执行前,对经过代码流程的输入进行检测
  • 对输入的数据进行替换后在继续执行代码流程

网站系统内置的waf与业务更加契合,在对安全与业务都比较了解的情况下,可以更少的收到误报与漏报。

waf判断

判断网站是否存在waf主要有下面几种方法:

sqlmap

使用sqlmap自带的waf识别模块可以识别出waf的种类,想要了解详细的识别规则可以查看sqlmap的waf目录下的相关脚本,也可以按照其格式自主添加新的waf识别规则,写好规则文件后直接放到waf目录下即可

手工判断

这个也比较简单,直接在相应网站的URL后面加上最基础的测试语句,比如union select 1,2,3%23 ,并且放在一个不存在的参数名中。

被拦截的表现为:页面无法访问,响应码不同,返回与正常请求网页时不同的结果等。

一些waf的绕过方法

大小写混合

在规则匹配时只针对了特定大写或特定小写的情况,在实战中可以通过混合大小写的方式进行绕过(现在几乎没有这样的情况)

URL编码

  • 极少数的waf不会对普通字符进行URL解码
  • 还有一种情况就是URL二次编码,waf一般只进行一次解码,如果目标web系统的代码中进行了额外的URL解码,即可进行绕过。

替换关键字

waf采用替换或者删除select/union这类敏感关键词的时候,如果只匹配一次则很容易绕过。

使用注释

注释在截断sql语句中用的比较多,在绕过waf时主要使用其代替空格(/**/),适用于检测过程中没有识别注释或者替换掉了注释的waf。

多参数请求拆分

对于多个参数拼接到同一条sql语句中的情况,可以将注入语句分割插入。

生僻函数

使用生僻函数替代常见的函数,例如在报错注入中使用polygon()函数替换常用的updatexml()函数

寻找网站源站ip

对于有云waf防护的网站而言,只要找到网站的ip地址,然后通过ip访问网站,就可以绕过云waf检测

常见的寻找网站ip的方法如下:

  • 寻找网站的历史解析记录
  • 多个不同区域ping网站,查看ip解析结果
  • 寻找网站二级域名,NX,MX记录对应的ip
  • 订阅网站邮件,查看邮件发送方的ip
坚持原创技术分享,您的支持将鼓励我继续创作!