知识铺垫
    
    
    WAF是什么
   
WAF,全称为:Web Application Firewall,即 Web 应用防火墙。对此,维基百科是这么解释的:Web应用程序防火墙过滤,监视和阻止与Web应用程序之间的HTTP流量。WAF与常规防火墙的区别在于,WAF能够过滤特定Web应用程序的内容,而常规防火墙则充当服务器之间的安全门。通过检查HTTP流量,它可以防止源自Web应用程序安全漏洞的攻击,例如SQL注入、跨站点脚本,文件包含和安全性错误配置。WAF具备以下特点:
- 全面检测WEB代码
- 深入检测HTTP/HTTPS
- 强大的特征库
- 网络层的防篡改机制
    更多细节参见
    
     Web 防火墙(WAF)是什么?和传统防火墙区别是什么?
    
   
一言蔽之,WAF就是部署在网站上的一个东东,之所以说它“东东”,是因为这玩意分好几种类型。
    
    
    主流WAF有哪些?
   
     
   
    
    
    WAF的分类
   
    WAF分为非嵌入型WAF和嵌入型WAF,非嵌入型WAF指的是硬件型WAF、云WAF、软件型WAF之类的;而嵌入型WAF指的是网站内置的WAF。非嵌入型WAF对Web流量的解析完全是靠自身的,而嵌入型WAF拿到的Web数据是已经被解析加工好的。所以非嵌入型的受攻击机面还涉及到其他层面,而嵌入型WAF从Web容器模块型WAF、代码层WAF往下走,其对抗畸形报文、扫操作绕过的能力越来越强。当然,在部署维护成本方面,也是越高的。
    
     
   
    
    
    软件型WAF
   
    以软件的形式安装在服务器上,可以直接检测服务器是否存在webshell,是否有文件被创建等
    
    
     D盾
    
    ,
    
     云锁
    
    ,
    
     网防G01
    
    ,
    
     安全狗
    
    ,
    
     护卫神
    
    ,
    
     智创
    
    ,
    
     悬镜
    
    ,
    
     UPUPW
    
    ,
    
     安骑士
    
   
    
    
    硬件型WAF
   
    以硬件的形式部署在链路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监听时只记录攻击,不拦截
    
    
     绿盟
    
    、
    
     安恒
    
    、
    
     铱迅
    
    、
    
     天融信
    
    、
    
     深信服
    
    、
    
     启明星辰
    
    、
    
     知道创宇
    
    、
    
     F5 BIG-IP
    
   
    
    
    基于云WAF
   
    一般以反向代理的形式工作,通过配置NS或CNAME记录,使得对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将被认为无害的请求报文再发送给实际网站服务器进行请求,可以认为是自带防护功能的CDN
    
    
     安全宝
    
    、
    
     创宇盾
    
    、
    
     玄武盾
    
    、
    
     腾讯云(T-Sec Web 应用防火墙)
    
    、
    
     百度云(应用防火墙 WAF)
    
    、
    
     西部数码
    
    、
    
     阿里云盾
    
    、
    
     奇安信网站卫士
    
   
    
    
    开源型WAF
   
    
     Naxsi
    
    、
    
     OpenRASP
    
    、
    
     ModSecurity
    
   
    
    
    网站内置的WAF
   
网站系统内置的WAF直接镶嵌在代码中,相对来说自由度高,网站内置的WAF与业务更加契合
    
    
    IPS与IDS,防火墙与WAF之间的比较和差异
   
    如果你在学习WAF的时候,常常对WAF、防火墙、IPS等概念感到费解,你可以直接查看我参考的
    
     原文
    
    (我这里重新排版了)
    
    首先明确一下缩写词汇:
   
IPS(Intrusion Prevention System) =入侵防御系统
IDS(Intrusion Detection System)  =入侵检测系统
WAF(Web Application Firewall)    = Web应用程序防火墙
    这些设备的拓扑如下
    
     
   
    
    
    防火墙功能
   
防火墙有几种类型,但最常见的是硬件网络防火墙。从拓扑图中可以看到,由于网络防火墙是网络安全的基石,因此在所有网络设计中都可以找到网络防火墙。
防火墙的核心功能是允许或阻止源主机/网络与目标主机/网络之间的通信。
    基本防火墙在OSI模型的第3层和第4层工作,即它们可以基于源/目标IP地址和源/目标TCP / UDP端口允许或阻止IP数据包。此外,网络防火墙是有状态的。这意味着防火墙会跟踪通过它的连接状态。
    
    例如,如果内部主机通过防火墙成功访问了Internet网站,则后者会将连接保留在其连接表内,从而允许来自外部Web服务器的答复数据包传递到内部主机,因为它们已经属于已建立的防火墙。连接。
    
    如今,下一代防火墙一直运行到OSI模型的第7层,这意味着它们能够在应用程序级别检查和控制流量。
   
    
    
    IPS入侵防御系统
   
     
   
    顾名思义,入侵防御系统(IPS)是一种安全设备,其主要任务是防止网络入侵。
    
    这就是为什么IPS与数据包流串联连接的原因。从上面的网络拓扑(带IPS的防火墙)可以看出,IPS设备通常连接在防火墙后面,但是位于通信路径的串联位置,该通信路径向内部网络/从内部网络传输数据包。
    
    为了使IPS设备在到达内部服务器之前立即阻止恶意流量,需要上述放置。
    
    通常,IPS是基于签名的,这意味着它具有已知恶意流量,攻击和利用的数据库,如果它看到匹配签名的数据包,则它将阻止流量。
    
    此外,IPS可以处理统计异常检测,管理员设置的规则等。
   
    
    
    IDS入侵检测系统
   
     
   
    IDS(入侵检测系统)是IPS的前身,本质上是被动的。如上图所示(带IDS的防火墙),该设备未与流量串联插入,而是并行(带外放置)。
    
    通过交换机的流量也同时发送到IDS进行检查。如果在网络流量中检测到安全异常,则IDS只会向管理员发出警报,但无法阻止流量。
    
    与IPS相似,IDS设备还主要使用已知安全攻击和漏洞利用的特征来检测入侵企图。
    
    为了将流量发送到IDS,交换设备必须配置一个SPAN端口,以便复制流量并将其发送到IDS节点。
    
    尽管IDS在网络中是被动的(即它不能主动阻止流量),但是有些模型可以与防火墙配合使用以阻止安全攻击。
    
    例如,如果IDS检测到攻击,则IDS可以向防火墙发送命令以阻止特定的数据包。
   
    
    
    WAF
   
     
   
    WAF(Web应用程序防火墙)专注于保护网站(或通常的Web应用程序)。
    
    它在应用程序层工作以检查HTTP Web流量,以检测针对网站的恶意攻击。
    
    例如,WAF将检测SQL注入攻击,跨站点脚本,Javascript攻击,RFI / LFI攻击等。
    
    由于当今大多数网站都使用SSL(HTTP),因此WAF还可以通过终止SSL会话并在WAF本身上检查连接内部的流量来提供SSL加速和SSL检查。
    
    如上图所示(带有WAF的防火墙),它被放置在网站的前面(通常)在防火墙的DMZ区域中。
    
    有了WAF,管理员可以灵活地限制对网站特定部分的Web访问,提供强身份验证,检查或限制文件上传到网站等。
   
    
    
    对比
   
    
    
    IPS与IDS
   
| 入侵防御系统 | 入侵检测系统 | |
|---|---|---|
| 网络布局 | 串联(串联)与网络流量 | 与流量并行(带外) | 
| 操作模式 | 活动设备。可以主动阻止攻击流量。 | 被动装置。无法阻止攻击流量,只能检测。 | 
| 检测机制 | 基于签名,基于规则,统计异常检测等 | 基于签名,基于规则,统计异常检测等 | 
| 封锁选项 | 在网络级别阻止数据包,重置连接,提醒管理员等 | 提醒管理员,发送重置连接请求。 | 
| 硬件功能 | 必须具有高性能才能执行深度数据包检查,并且不能减慢流量。 | 不需要非常高性能,因为它不会干预流量。但是,为了实时掌握流量,它必须能够处理线路带宽。 | 
    
    
    防火墙与IPS / IDS
   
| 防火墙功能 | 入侵防御/入侵防御 | |
|---|---|---|
| 网络布局 | 通常放置在网络的前端以控制流量。 | 防火墙后的线内或带外。 | 
| 主要用例 | 允许或阻止不同网络区域之间的流量。 | 专门检查网络数据包以使其与已知恶意攻击的特征进行匹配。然后,流量被阻止或发出警报。 | 
| 检测机制 | 通常适用于第4层,以允许或阻止IP地址和端口。 | 基于签名,基于规则,统计异常检测等 | 
| 封锁选项 | 在网络级别阻止或允许数据包。 | 检测攻击并直接阻止流量或发送警报。 | 
| 硬件功能 | 通常具有许多物理网络接口,以便将网络划分为不同的安全区域。 | 必须具有高性能才能执行深度数据包检查,并且不能减慢流量。 | 
    
    
    WAF与IPS / IDS
   
| WAF | 入侵防御/入侵防御 | |
|---|---|---|
| 网络布局 | 放置在网站/ Web应用程序的前面 | 防火墙后的线内或带外。 | 
| 主要用例 | 专用于仅检查HTTP Web流量并防止Web特定攻击。 | 专门检查所有网络数据包,以使其与已知恶意攻击的特征进行匹配。然后,流量被阻止或发出警报。 | 
| 防范这些安全攻击(示例) | SQL注入,跨站点脚本,GET / POST攻击,会话操纵攻击,javascript,LFI / RFI等 | 针对Web服务器,SMTP,RDP,DNS,Windows OS,Linux OS等服务的利用。 | 
    
    
    WAF检测
   
检测WAF的方法较多,可以通过NMAP、wafw00f、检查响应标头,检查响应正文等方式
    
    
    手工检测
   
    譬如,我这里直接来个XSS
    
     
   
     
   
    这个时候你可以直接看到被WAF拦截了,WAF是华为云。你也可以通过响应头看到WAF
    
     
   
     
   
    
    
    工具检测WAF
   
    
    
    wafw00f
   
    检测WAF的方法
    
    wafw00f是一个Web应用防火墙(WAF)指纹识别的工具。
    
    下载地址:
    
     https://github.com/EnableSecurity/wafw00f
    
    
    wafw00f的工作原理:
   
- 发送正常的HTTP请求,然后分析响应,这可以识别出很多WAF。
- 如果不成功,它会发送一些(可能是恶意的)HTTP请求,使用简单的逻辑推断是哪一个WAF。
- 如果这也不成功,它会分析之前返回的响应,使用其它简单的算法猜测是否有某个WAF或者安全解决方案响应了我们的攻击。
    kali上内置了该工具:
    
     
   
    wafw00f支持非常多的WAF识别。要查看它能够检测到哪些WAF,请使用-l 选项。
    
    简单使用如下:wafw00f
    
     https://www.xxx.com/
    
    
     
   
    
    
    sqlmap
   
如果网站存在WAF,sqlmap会有提示。
sqlmap --batch --identify-waf --random-agent -u "http://www.test.com"
     
   
    
    
    nmap
   
nmap检测waf
nmap -p 80 443 --script http-waf-detect <目标>
     
   
nmap识别waf指纹
nmap -p 80 443 --script http-waf-fingerprint <目标>
     
   
    
    
    WAF进程与拦截页面
   
此处大量引用了网络上的图片
    
    
    D盾
   
服务名:d_safe
进程名:D_Safe_Manage.exe、d_manage.exe
     
   
    
    
    云锁
   
服务端监听端口:5555
服务名:YunSuoAgent/JtAgent(云锁Windows平台代理服务)、YunSuoDaemon/JtDaemon(云锁Windows平台守护服务)
进程名:yunsuo_agent_service.exe、yunsuo_agent_daemon.exe、PC.exe
     
   
    
    
    阿里云盾
   
服务名:Alibaba Security Aegis Detect Service、Alibaba Security Aegis Update Service、AliyunService
进程名:AliYunDun.exe、AliYunDunUpdate.exe、aliyun_assist_service.exe
     
   
    
    
    腾讯云安全
   
进程名:BaradAgent.exe、sgagent.exe、YDService.exe、YDLive.exe、YDEdr.exe
     
   
    
    
    腾讯宙斯盾
   
     
   
    
    
    360主机卫士
   
服务名:QHWafUpdata
进程名:360WebSafe.exe、QHSrv.exe、QHWebshellGuard.exe
     
   
    
    
    奇安信网站卫士
   
     
   
    
    
    网站/服务器安全狗
   
服务名:SafeDogCloudHelper、Safedog Update Center、SafeDogGuardCenter(服务器安全狗守护中心)
进程名:SafeDogSiteApache.exe、SafeDogSiteIIS.exe、SafeDogTray.exe、SafeDogServerUI.exe、SafeDogGuardCenter.exe、CloudHelper.exe、SafeDogUpdateCenter.exe
     
   
    
    
    护卫神·入侵防护系统
   
服务名:hws、hwsd、HwsHostEx/HwsHostWebEx(护卫神主机大师服务)
进程名:hws.exe、hwsd.exe、hws_ui.exe、HwsPanel.exe、HwsHostPanel.exe/HwsHostMaster.exe(护卫神主机大师)
     
   
    
    
    网防G01政府网站综合防护系统(“云锁”升级版)
   
服务端监听端口:5555
服务名:YunSuoAgent、YunSuoDaemon(不知是否忘了替换了!)
进程名:gov_defence_service.exe、gov_defence_daemon.exe
     
   
    
    
    UPUPW安全
   
     
   
    
    
    宝塔
   
     
   
    
    
    智创防火墙
   
     
   
    
    
    创宇盾
   
     
   
    
    
    玄武盾
   
     
   
    
    
    西数WTS-WAF
   
     
   
    
    
    Naxsi WAF
   
     
   
    
    
    百度云
   
     
   
    
    
    
     华为云
    
   
    **
     
   
    
    
    网宿云
   
     
   
    
    
    铱讯WAF
   
     
   
    
    
    安域云WAF
   
     
   
    
    
    长亭SafeLine
   
     
   
    
    
    安恒明御WAF
   
     
   
    
    
    WAF绕过
   
网站存在WAF,意味着我们不能使用安全工具对网站进行测试,因为一旦触碰了WAF的规则,轻则丢弃报文,重则拉黑IP。所以,我们需要手动进行WAF的绕过。
    WAF的工作原理放到这里说一下,WAF的主要难点是对入侵的检测能力,尤其是对Web服务入侵的检测,WAF最大的挑战是识别率。对于已知的攻击方式,可以谈识别率,但是对于未知的攻击手段,WAF是检测不到的。目前市面上大多数的WAF都是基于规则的WAF。即WAF对接数据收到的包进行正则匹配过滤,如果正则匹配到与现有漏洞知识库的攻击代码相同,则认为这个恶意代码,从而对于进行阻断。所以,对于基于规则匹配的WAF,需要每天都及时更新最新的漏洞库。对于这种WAF,它的工作过程是这样的:**解析HTTP请求——>匹配规则——>防御动作——>记录日志 **
    
    具体实现如下:
   
- 解析http请求:协议解析模块
- 匹配规则:规则检测模块,匹配规则库
- 防御动作:return 403 或者跳转到自定义界面,或者不返回任何数据,或者拉黑IP
- 日志记录:记录到elk中
    从WAF工作的过程我们可以看到,要想绕过WAF,我们只有在 WAF解析HTTP请求 或 WAF匹配规则 两个地方进行绕过。因为第三、四步是WAF匹配到攻击之后的操作,这时候WAF已经检测到攻击了。
    
    【绕WAF这个事,可以说,方式的很灵活的,写起来很杂,以后再积累更新】
    
    
   
    
    
    域名转换为ip
   
    有些WAF设置的是针对域名的防护,在有些时候,我们可以尝试将域名改成ip地址有可以绕过WAF的防护。
    
    (小声bb,其实这很鸡肋,一般来说,规则是不会匹配host是域名还是ip,除非是为了避免误报才可能匹配host)
   
    
    
    分块编码(Transfer-Encoding)绕过WAF
   
这种绕过方法利用的是WAF在解析HTTP协议的过程,既然WAF连我们的攻击代码都没有解析完全,那么第二步的正则匹配也就匹配不到我们的攻击代码了,自然就可以绕过了。
    相关文章:
    
    
     在HTTP协议层面绕过WAF
    
    
    
     利用分块传输吊打所有WAF
    
    
    
     [技术]编写Burp分块传输插件绕WAF
    
    
    
     HTTP 协议中的 Transfer-Encoding
    
   
    
    
    对抗规则绕过
   
    
    
    对关键字进行不同编码
   
select * from zzz = select * from  %257a%257a%257a  //url编码
单引号 = %u0027、%u02b9、%u02bc   // Unicode编码
adminuser = 0x61646D696E75736572 // 部分十六进制编码
空格 = %20 %09 %0a %0b %0c %0d %a0  //各类编码
这种方式实用价值一般,譬如检测xss的时候,我会加一条逻辑与来匹配编码
pcre:"/(txtName|mtxMessage)[\s=]+?.+?(%3C|\x3c|<).+?(%3E|\x3E|>)/iP"
    
    
    对关键字进行大小写变换
   
Union select = uNIoN sELecT
    这种方式实用价值很低,我们写正则的时候,一般都会设置正则的标志位为
    
     i
    
    ,即,不区分大小写
   
    
    
    通过其他语义相同的关键字替换
   
除了通过编码等价替换等方式绕过检测,我们还能配合目标特性实现绕过检测
And = &&
Or = ||
等于 = like 或综合<与>判断
if(a,b,c) = case when(A) then B else C end
substr(str,1,1) = substr (str) from 1 for 1
limit 1,1 = limit 1 offset 1
Union select 1,2 = union select * from ((select 1)A join (select 2)B;
hex()、bin() = ascii()
sleep() = benchmark()
concat_ws() = group_concat()
mid()、substr() = substring()
@@user = user()
@@datadir = datadir()
    
    
    配合Windows特性
   
注意,是在cmd下执行,在powershell中是不行的
ipconfig <=> ((((ipc^o^nf""ig))))      //利用符号分割字符执行ipconfig
     
   
ipconfig <=> set a=123ipconfig456&& %a:~3,8%	利用变量分割关键字执行ipconfig
     
   
    解释:
    
    set a=123ipconfig456 //设置了一个变量a
    
    echo %a:~3,8% //取出变量a的第3位开始共计8个字符(加了个echo是为了看看取的内容)
    
    %a:~3,8% //执行取出的值
    
    把上面内容合体就是set a=123ipconfig456&& %a:~3,8%
    
     
   
    
    
    配合linux特性
   
whoami <=> w'h'o'a'm"i"  //单引号或双引号连接符,需要闭合
     
   
Cat /etc/passwd <=> cat /?t*/??ss**  //?,*通配符 
whoami <=> /b[12312i]n/w[23sh]oa[2msh]i //[] 通配符,匹配【】中的字符
    上面的这个说白了就是利用了linux能够识别正则。
    
     
   
Whoami <=> a=who&&b=ami&&$a$b     //当然linux下也可以变量拼接
     
   
cat /../../etc/passwd =cd ..&&cd ..&&cd etc&&cat passwd  //目录穿越
     
   
    
    
    http协议绕过
   
    
     Content-Type绕过
    
    
    有的waf 识别到Content-Type类型为multipart/form-data后,会将它认为是文件上传请求,从而不检测其他种类攻击只检测文件上传,导致被绕过。
   
application/x-www-form-urlencoded è multipart/form-data
    
     HTTP请求方式绕过
    
    
    waf在对危险字符进行检测的时候,分别为post请求和get请求设定了不同的匹配规则,请求被拦截,变换请求方式有几率能绕过检测
    
    Ps:云锁/安全狗安装后默认状态对post请求检测力度较小,可通过变换请求方式绕过
    
    
     参数污染绕过
    
    
    由于http协议允许同名参数的存在,同时waf的处理机制对同名参数的处理方式不同,造成“参数污染”。不同的服务器搭配会对传递的参数解析出不同的值。配合waf与中间件对参数解析位置不同,可能绕过waf。
   
提交的参数为:?id=1&id=2&id=exp
asp.net+iis:id=1,2,exp
asp+iis:id=1,2,exp
php+apache:id=exp
    
     解析特性绕过
    
    
    原理:利用waf与后端服务器的解析不一致。
    
    Iis5.0-6.0解析漏洞
   
.asp --> /xx.asp/xx.jpg  //.asp,.asa目录下的文件都解析成asp文件
.asp --> xx.asp;.jpg     //服务器默认不解析;号后面的内容
Iis7.5解析漏洞(php.ini开启fix_pathinfo)
.php --> /xx.jpg         //上传.jpg一句话,访问时后面加上/xx.php
apache解析漏洞
.php --> /test.php.php123     //从右往左,能别的后缀开始解析
nginx解析漏洞(php.ini开启fix_pathinfo)
.php --> xxx.jpg%00.php      //Nginx <8.03 空字节代码执行漏洞
    
     解析兼容性绕过
    
    
    在http协议中,标准的文件名的形式为filename=”1.php”,但是web容器会在解析协议时做一些兼容,文件上传时,有的waf只按照标准协议去解析,解析不到文件名,从而被绕过。
    
    
     keep-alive(Pipeline)绕过
    
    
    原理:http请求头部中有Connection这个字段,建立的tcp连接会根据此字段的值来判断是否断开,我们可以手动将此值置为keep-alive,然后在http请求报文中构造多个请求,将恶意代码隐藏在第n个请求中,从而绕过。
   
    
    
    更多
   
    先知白帽大会有一期的内容是关于WAF,内容生动有趣,可以看
    
    
     没有绝对的waf防御.pdf
    
   
    
    
    参考
   
Web渗透测试:信息收集篇
Web 防火墙(WAF)是什么?和传统防火墙区别是什么?
IPS与IDS,防火墙与WAF之间的比较和差异
WAF、流控设备、堡垒机
看图识WAF-搜集常见WAF拦截页面
常见WAF拦截页面
常见WAF进程/服务与WAF识别总结
实战技巧 | WAF绕过入狱指南
WAF的工作原理和绕过浅析
绕过网站WAF(图片绕过)
waf绕过拍了拍你
 
