waf处理逻辑
- 取得用户请求数据
- 将数据与异常请求判定的正则进行匹配
- 发现请求有异常就进行拦截动作
waf部署方式
- 通过部署反向代理服务直接取得用户请求的http数据
- 通过硬件设备直接读取网络层数据在解析出用户请求的HTTP数据
- 通关读取网卡流量取得用户数据
监测目标网站是否使用waf
在接收到有攻击倾向的请求之后,waf大致表现如下
- 在页面中出现明显的waf提示
- 出现异常的http响应码(403,303,501,404等)而正常的响应码应为200
- 网站停止对用户的请求进行响应。
nmap 测试 nmap -p 80,443 --script=http-waf-detect
实现思路
- 向目标发送一个正常请求A1
- 记录这个请求的回应B1
- 向目标发送一个攻击请求A2
- 记录这个请求的回应B2
- 比较B1和B2,如果两者相同,则没使用waf,否则则使用了waf
- 检测waf的工具:wafw00f url(kali中有)
云waf
用户将要被保护的网站域名解析权交给云waf系统,域名解析权移交完成后,所有针对被保护网站的请求,将会被dns服务器解析到指定云waf上。访问网站的流量会经过云waf。
攻击者获取真实ip即可绕过云waf
- 一些没有waf保护的子域名会泄露web服务器真实IP地址
- 一些IP数据库(如viewdns.info)往往会保存网站所使用过的域名解析记录
- 使用censys.io 或shodan.io的搜索引擎查找安装证书的源IP地址
- 执行一个操作,让站点连接某个地方,来显示站点IP源地址
- 利用SPF(Sender Policy Framework 的缩写,一种以IP地址认证电子邮件发件人身份的技术。 接收邮件方会首先检查域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录里面,如果在,就认为是一封正确的邮件,否则会认为是一封伪造的邮件进行退回)之类的DNS记录也有可能获得源IP地址
- 网站源代码中的超链接可能包含指向子域名的IP地址
- 检查公共源或日志文件,可能包含指向源的源IP地址或子域。
- ping 根域名扫c段,配置waf时,配置人员可能只把 www.xxx.com加入waf而未把根域名加入waf
防范:
- 使用云waf后,更换一个新的地址,使历史地址无效
- 在web服务器与外部的连接处使用防火墙进行访问控制,限制web服务器只接收来自云waf的流量。
理想的waf
- 对数据流量进行智能上下文检查,waf对数据流量进行完整的协议解析和评估。如当检测到一段数据流量是HTTP请求头部,按照这个格式进行解析。
- 实现难点:当前waf环境过于复杂,waf需掌握所有的协议实现细节。
绕waf情形
- waf误认为该攻击请求不在检查范围内
- 虽然对攻击请求进行了检查,但与服务器(服务器应用程序/语言解释器和数据库)使用了不同的解析方法,waf判断该攻击请求无害。当服务器使用了不同的解释方法时,就会产生危害
- 规则不完整
不在检查范围内
有些waf为减轻工作量,如果请求来自外部,才会检查,如请求来自可信地址则放行。HTTP头部字段
- x-forwarded-for 将该字段改为缓存服务器
- x-remote-IP 将字段值修改为代理服务器,或者同网段IP
- x-originating-IP 将该字段修改为服务器主机的IP或者127.0.0.1
- x-remote-addr 将该字段修改为内部ip
工具 :burpsuite插件:bypasswaf (github可下载)
waf与操作系统解析差异
很多linux采用bash作为默认shell。bash中含通配符
*:0到无穷多个任意字符
?:一定有一个任意字符
[]:一定有一个载括号内的字符(非任意字符)
[-]:若有减号在中括号内时,代表编码顺序内的所有字符
/:目录符号,用于路径分隔
用/???/?s代替 /bin/ls
攻击者获取目标服务器控制权限
- 编写木马文件,放置在自己服务器上
- 控制目标服务器,使用wget命令下载木马文件
- 控制目标服务器,使用chmod修改木马文件权限并执行
绕waf 分块编码
- 在头部加入Transfer-Encoding:chunked
- 每个分块包含十六进制的长度值和数据,长度值独占一行
- 最后一个分块的长度值必须是0