WEB漏洞-XSS跨站之WAF绕过及安全修复
常规 WAF 绕过思路
标签语法替换/垃圾数据溢出
开启waf访问
判断拦截字符,
<script
未拦截,<script>
被拦截,则拦截关键词:<script>
写入XSS平台代码(被拦截)
逐步去掉
>
和后面的,发现向XSS平台发送数据包,但是XSS报错,但是加上>
又会被拦截
将
'
替换>
来闭合语句
状态码200,发送成功
将语句替换为
<a href=
,发现不行
在
<a / href
,绕过检测,但是没有数据包发送,/
在JavaScript表示结束
利用报错事件
在img前面加入
/
特殊符号干扰
在后面填充数据绕过检测
注意最后要加
#
,不然无法绕过,#
属于特殊符号,#
在web里面通常用作注释,还有如//
等,可以一一尝试
提交方式更改
修改代码为request方式
改为post提交
原因:安全狗为URL(get)检测
加密解密算法
网上的绕过方法
原理:1.利用率/2.利用率特殊字符#3.利用率编码(前提条件:要确定网站能够识别的加解密的方式)
鼠标点击,会跳转
自动化工具说明(XSStrike)
XSStrike 主要特点反射和 DOM XSS 扫描;多线程爬虫;Context 分析;可配置的核心;检测和规避 WAF;老旧的 JS 库扫描;智能 payload 生成器;手工制作的 HTML & JavaScript 解析器;强大的 fuzzing 引擎;盲打 XSS 支持;高效的工作流;完整的 HTTP 支持;Bruteforce payloads 支持;Payload 编码
需要python3环境
用fuzzer扫描,offline为waf的状态,这里离线是英文工具为外国开发,没有识别安全狗,passed为没有拦截,filtered为有过滤
对结果进行测试
<test x>
没有被拦截
<a href=x//
被拦截
直接进行测试(去掉fuzzer)
在浏览器进行尝试(这里应该是识别为cc攻击)
重启网站(发现没有拦截),对于拦截,请求频繁被cc攻击拦截后,重启phpStudy即可,对于现实,可以现在本地搭建环境,测试那些语句不会拦截在进行漏洞测试,还有一种方法:用代理(比较麻烦)
换一条语句
<A%09OnmouSeOvEr%0A=%0A(prompt)``%0Dx>v3dm0s
,这里出现弹窗,但是我不知道啥意思
更换语句,弹出111
XSStrike相关的命令
- -h,--help : 显示帮助信息
- -u,--url : 指定目标 URL
- --data : POST 方式提交内容
- -v,--verbose : 详细输出
- -f,--file : 加载自定义 paload 字典
- -t,--threads : 定义线程数
- -l,--level : 爬行深度
- -t,--encode : 定义 payload 编码方式
- --json : 将 POST 数据视为 JSON
- --path : 测试 URL 路径组件
- --seeds : 从文件中测试、抓取 URL
- --fuzzer : 测试过滤器和 Web 应用程序防火墙。
- --update : 更新
- --timeout : 设置超时时间(防止cc拦截)
- --params : 指定参数
- --crawl : 爬行
- --proxy : 使用代理
- --blind : 盲测试
- --skip : 跳过确认提示
- --skip-dom : 跳过 DOM 扫描
- --headers : 提供 HTTP 标头
- -d,--delay : 设置延迟
配合字典进行fuzz模糊测试
- https://bbs.pediy.com/thread-250852.htm
- https://xssfuzzer.com/fuzzer.html
- https://github.com/TheKingOfDuck/fuzzDicts
- fuzzDicts-master.zip
- https://github.com/3xp10it/xwaf
- xwaf-master.zip
抓取数据包
将
name=1
设置为变量,跑字典
载入字典
结果(查看返回的字节长度,来判断安全狗有没拦截,这里被拦截的字节数为:5336,即只要不为5336即可)
浏览器访问
<svg><animate onbegin=alert(11) attributeName=x dur=1s>
,但是有个问题,这里很难输入XSS平台的XSS代码,应该也要和XSStrike的fuzzer功能类似,要通过它提供的语句来修改,而且也可以多跑几个字典
关于 XSS 跨站安全修复建议测试
- 可以在
php.ini
文件内修改,可以在代码里添加httponly
,还可以在输入输出进行关键字、大小写、特殊符号过滤等等。其中,主要是htmlentities()
和htmlspecialchars()
这两个函数 - 这是一个Apache开发的安全组件,首先应当配置过滤器(注意在过滤器中chain.doFilter(..)方法中的Request对象进行包装,在包装类中对请求参数进行筛选操作)
- 其次将过滤器注册到web.xml文件中,最后配置Request的包装类,在其中对请求信息进行过滤
0 条评论