2023/03/18
WAF绕过技巧—背景知识
渗透测试-浅析WAF绕过_渗透绕waf_Tr0e的博客-CSDN博客
WAF全称Web Application Firewall WEB应用防护系统,WAF针对的是应用层,
WAF是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一种网络安全产品,增大攻击者的攻击难度和攻击成本
市场上的WAF分这集中:
- 基于硬件的WAF:绿盟WAF
- 基于软件的WAF:安全狗
- 部署在云端的WAF:百度加速乐,安全宝
1.大小写绕过:
大小写绕过用于只针对小写或大写的关键字匹配技术
z.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4
2. 替换关键字
- 关键字双写:
大小写无法绕过,正则表达式会替换,删除select,union关键字
z.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4
-
同价词替换
-
特殊字符拼接
把特殊字符拼接起来绕过WAF的检测,比如在Mysql中,利用注释/**/来绕过
3. 使用编码
- URL编码;
4. 使用注释
常用于注释的符号://,/**/,#,—+,—a
z.com/index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4
'union%a0select pass from users#
/**/
在构造得查询语句中插入注释,规避对空格的依赖或关键字识别。#、--+
用于终结语句的查询
相比普通注释,内联注释用的更多,它有一个特性/!**/
只有MySQL能识别(/*!*/
表示注释里面的语句会被执行)。
5.参数污染
6. 缓冲区溢出
缓冲区溢出用于对付WAF,有不少WAF是C语言写的,而C语言自身没有缓冲区保护机制,因此如果WAF在处理测试向量时超出了其缓冲区长度,就会引发bug从而实现绕过。
7. 性能因素:
- WAF在设计的时候都会考虑到性能问题,检测数据包的包长或检测数据流长度,有一个限制。因此在设计WAF的时候可能就有一个默认值,默认多少个字节的流大小,或是多少个数据包。此时可以向HTTP POST添加填充数据,达到一定数目之后,POST中的sql注入恶意代码没有被检测了,达到了bypass的目的。
- WAF的业务影响问题,一些传统硬件防护设备为了避免在高负载的时候影响用户体验,如延时等问题,会在高负载的时候关掉WAF防护功能,在低负载的时候又开启WAF功能。此方法,主要针对软件WAF——可将一个payload,使用脚本并发发送多次,发现有些通过了WAF,有些被WAF拦截了
WAF之HTTP参数污染HPP漏洞挖掘
Bypass WAF之HTTP参数污染(HPP)漏洞挖掘_J0hnson666的博客-CSDN博客
HPP是HTTP,Parameter Pollution的缩写,HTTP参数污染,注入型漏洞,攻击者通过在HTTP请求中插入特定的参数来发起攻击
1.漏洞原理:
浏览器与服务器进行交互时,浏览器提交GET/POST请求参数,参数会以‘名称-值对’的形式出现,HTTP协议中允许同样名称的参数出现多次
与服务器交互的过程中,HTTP协议允许GET/POST请求多次传同一参数值
2. HPP影响:
HTTP参数污染注入 源于网站对于提交的相同的参数的不同处理方式导致假设输入http://www.xxx.com/?id=1&id=union select 1,2,3,4 from table
,服务端就有可能会将 key 处理为 1 union select 1,2,3,4 from table
,从而导致SQL注入
HPP在WAF绕过,逻辑漏洞挖掘上的实例
1. SQL注入:
- 特定情况下,WAF对’union关键字’进行拦截
bbs=u&bbs=n&bbs=i&bbs=o&bbs=n&bbs=select 1,user(),3
由于HPP的特性,在后端又拼接成完整的union
- 常见的sql注入:
http://xxx/horse.php?id=7 union select 1,2,3,current_user
HPP绕过,将注入语句写到第二个参数位置,不会被WAF解析
http://xxx/horse.php?id=0&id=7%20union%20select%201,2,3,current_user
传递第二个参数时使用了”&”进行转移,含义就是‘&’
- 结合HPP参数污染进行注入
- mysql用&连接多个参数,只输出最后一个参数的结果
2. XSS绕过
- Apple Cups的Xss:
系统对kerberos进行了黑名单过滤,通过前置一个重复参数可以出发XSS
http://xxx/?kerberos=οnmοuseοver=alert(1)&kerberos=
HPP,该系统指接受第二个参数,第一个kerberos直到被用于构建HTML内容前都没有被验证,在web站点的上下文中javascript语句被执行
- URL重定向+HPP+XSS:
点击连接,用户重定向到一个页面:
http://host/xxx.aspx?dest=http://whitelistedWebsite.com
dest参数接受的协议有https://,ftp://,javascripts://,尝试构造xss:
dest=javascript://alert(document.domain)
3. 文件上传
HPP:双文件上传
filename参数写了两次,可能绕过一些上传限制
也可以同时上传一个正常图片文件+一个木马文件尝试绕过
4. 逻辑漏洞
- 篡改收账账户
- 恶意链接跳转
- 越权取消订阅
- 越权获取关注
正常的情况:
使得受害者成功关注了我:
后台对于actorld的鉴权操作是对第二个,关注操作取的确实第一个
- 越权编辑数据:
修复方案:
防范HPP漏洞:
- 设备层面:让WAF或其它网关设备如IPS在检查URL时,对同一个参数被多次赋值的情况进行特殊处理,由于HTTP协议允许相同参数在URL中多次出现,因此这种特殊处理需要注意避免误杀的情况;
- 代码层面:编写WEB程序时,要通过合理的
$_GET
方法获取URL中的参数值,而尝试获取 Web服务器返回给程序的其他值时要慎重处理,结合其他漏洞的产生进行组合排查。