XSS跨站——WAF绕过及修复
XSS跨站——WAF绕过及修复
0.前言
XSS跨站漏洞的常规WAF绕过思路和其他漏洞基本上是差不多的,比如标签语法替换、特殊符号干扰、提交方式更改、垃圾数据溢出、加密解密算法以及结合其他漏洞类型绕过等等,我们依旧是以安全狗为例子
1.绕过方法——标签语法替换
我们可以用到不同函数进行语法的替换,比如使用herf函数来请求地址
,只是herf需要构造出一个合理的闭合语句,如下图
将多余的-号去掉,会显示被拦截,按我们就加入一些#等干扰符的代入
从防护的角度出发,由于攻击网站是无法预知的,所以一般检测是在于<>符号、herf函数等,我们可以尝试通过在前面加入/进行绕过,因为JavaScript的语句闭合特性。一般通过Fuzz进行查找能够通过的标签。
2.绕过方法——特殊符号干扰
首先输入跨站脚本的简单语句,通过修改判断检测的关键字符
可以看到,我们的输入被WAF安全狗拦截,当我们输入<script时却能够通过,这时候可以判断他的字符审核机制是检测<>的闭合,有的还拦截部分语句的关键词如onlink等,接下来就要做拆分工作,通过一点点的减少语句的内容,判断检测情况
可以看到,在减少的过程中,最后访问了相关的地址,但是地址后面出现了<h2,这是因为页面代码有这些修饰语句,如果我们没有>的闭合,就会导致表达语句的变化,但加上又会存在<>闭合的检测问题,所以这样子做没有太大的意义,
那就需要思考我们能不能以<>为起点做文章呢,显然是可以的,我们可以尝试加入单引号后再去掉>,最后进行数据上传
可以看到传送成功,最终访问了指定的地址,这是因为单引号将地址囊括起来,不会受到后面语句的影响。除了使用单括号以外我们也可以加入#或者是/后输入垃圾数据后再加#号进行规避
首先明确特殊符号根据语言和场景的脚本类型不同并不是固定的,#是只一种常见特殊符号,很多语言都通用,这些符号能够起到一些截断或者注释的作用。
3.绕过方法——提交方式修改
首先假设提交方式是以request作为提交方式
我们尝试提交简单脚本
可以看到一开始的提交是被拦截了的,但是当我们把提交方式变为post之后就能够成功执行简单脚本了。这是因为我们更换了提交方式,安全狗的WAF的检测有时候只是勾选了部分的提交方式。当我们使用不在名单之内的提交方式时,我们便能绕过拦截达到攻击目的
4.绕过方法——使用工具
有需求自然是有供应,为了实现自动化,有部分大佬写出了绕过工具,比如
- XWAF
XWAF是一个python3写的WAF自动绕过,上一个版本是bypass_waf,XWAF相比bypass_waf更智能,可无人干预,可自动暴破绕过WAF
https://www.uedbox.com/post/55926/
有条件的话可以尝试使用一下吧,至于能不能绕过新版本的WAF,我们保持一定的还与
- XSStrike
XSStrike是一种用于测试Web应用程序的漏洞扫描器。它专门针对跨站脚本(XSS)漏洞进行测试,旨在发现可能允许攻击者执行恶意代码或在Web应用程序中执行其他攻击的漏洞。
XSStrike使用各种技术来识别可能的XSS漏洞,包括注入恶意JavaScript代码、在输入字段中注入HTML标记和尝试通过构造特定的URL或表单参数来触发漏洞。
https://github.com/s0md3v/XSStrike
WAF显示offline是因为安全狗基本只在国内使用,所以检测困难,二下面的测试语句中,passed代表语句通过也就是能够注入,filtered表示有触发到过滤器,会被拦截。
5.绕过方法——使用Fuzz
之前有介绍过一个许多方面有关fuzz的github网址,这里就不加以描述更多,fuzz的使用基本是注入点的变化,其他的没有太大的差别,当我们需要使用到自己构造的fuzz字典时,按部就班即可
需要注意,有时候攻击失败并不是语句的问题,也有可能是Waf开启了CC流量攻击防护检测,所以如果开了CC流量攻击防护 的话,我们可以搭建一个基本相似的环境进行检测或者使用代理
6.XSS跨站的安全修复方案
开启httponly
输入过滤
输出过滤
由于语言的多样性,不管是之前的php还是现在的java语言编写,我们可以参考一些师傅提供的过滤思路: