小言_互联网的博客

Web安全攻防:28---WAF(Web应用防火墙)

327人阅读  评论(0)

一、WAF简介

  • WAF (Web Application Firewall,Web应用用防火墙)
  • 这里利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS安全策略来专门为Web应用提供保护的一款产品

二、WAF分类

  • ①软件型 WAF:以软件形式装在所保护的服务器上的WAF,由于安装在服务器上,所以可以接触到服务器上的文件,直接检测服务器上是否存在WebShell 、是否有文件被创建等
  • ②硬件型WAF:以硬件形式部署在链路中,支持多种部署方式,当串联到链路中时可以拦截恶 意流量,在旁路监昕模式时只记录攻击不进行拦截。
  • ③云 WAF:一般以反向代理的形式工作,通过配置NS记录或CNAME记录,使对网站的请求 报文优先经过WAF主机,经过WAF主机过滤后,将认为无害的请求报文再发送给实 际网站服务器进行请求,可以说是带防护功能的CDN
  • ④网站系统内置的 WAF:网站系统内置的WAF也可以说是网站系统中内置的过滤,直接镶嵌在代码中, 相对来说自由度高。一般有以下这几种情况:
    • 输入参数强制类型转换(intval 等)
    • 输入参数合法性检测。
    • 关键函数执行(SQL执行、页面显示、命令执行等)前,对经过代码流程的输入注行检测
    • 对输入的数据进行替换过滤后再继续执行代码流程(转义/替换掉特殊字符等)

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

三、WAF判断

  • 可以通过以下几种方法来判断目标网站中是否存在WAF

①通过SQLMap判断

  • 使用 SQLMap 中自带的WAF识别模块可以识别出WAF 的种类,但是如果所安下面装的WAF并没有什么特征, SQLMap就只能识别出类型是Generic
  • 下面以某卫士官网为例,在SQLMap中输入以下命令,结果如下

  • 可以看到识别出WAF的类型为“XXX Web Application Firewall”

备注:

  • 想要了解详细的识别规则可以查看SQLMap的WAF目录下的相关脚本,也可以按照其格式自主添加新的WAF识别规则,写好规则文件后直接放到WAF目录下即可

②手工判断

  • 这个比较简单,直接在相应网站的URL后面加上最基础的测试语句,比如“union select 1,2,3%23”,并且放在一个不存在的参数名中。
  • 使用不正确的URL访问之后可能会触发WAF的防护,然后被拦截,拦截的表现为(增加了无影响的测试语句后):页面无法访问、响应码不同、返回与正常请求网页时不同的结果等
  • 例如下面选取了一个不存在的参数,不会对网站系统的执行流程造成任何影响,但是还是被拦截了,则可能存在WAF

四、WAF绕过方法

  • 下面介绍SQL注入漏洞的绕过方法,其余漏洞的WAF绕过方法原理差不多

①大小写混合

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

②URL编码

  • 极少部分的WAF不会对普通字符进行URL编码

  • URL二次编码:WAF一般只进行一次解码,而如果目标Web系统的代码中进行了额外的URL解码,即可绕过

③替换关键字

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

  • 上述命令将转换为如下所示的命令
ununionion selselectect 1,2,3,4,5

④使用注释

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

⑤多参数请求拆分

  • 对于多个参数拼接到同一条SQL语句中的情况,可以将注入语句分割插入
  • 例如请求URL时,GET参数为如下格式:

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

⑥HTTP参数污染

  • HTTP参数污染是指当同一参数出现多次,不同的中间件会解析为不同的结果
  • 具体如下表所示(例子以参数color=red&color=blue为例)

  • 在上述提到的中间件中,IIS比较容易利用,可以直接分割带逗号的SQL语句。在其余的中间件中,如果WAF只检测了同参数名中的第一个或最后一个,并且中间件特性正好取与WAF相反的参数,则可成功绕过
  • 下面以IIS为例,一般的SQL语句如下所示

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

⑦生僻函数

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

⑧寻找网站源码IP

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

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

  • 寻找网站的历史解析记录
  • 多个不同区域ping 网站,查看IP解析的结果
  • 找网站的二级域名、 NS、MX记录等对应的IP
  • 订阅网站邮件,查看邮件发送方的IP

⑨注入参数到cookies中

  • 某些程序员在代码中使用$_REQUEST获取参数,而$_REQUEST会一次从GET/POST/cookie中获取参数,如果WAF只检测了GET/POST而没有检测cookie,可以将注入语句放入cookie中进行绕过

转载:https://blog.csdn.net/qq_41453285/article/details/102476628
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场