WEB漏洞-XSS跨站之WAF绕过及安全修复

b7608b98f847ec4a18f41b4ca1893564.png

常规 WAF 绕过思路

标签语法替换/垃圾数据溢出

开启waf访问

QQ截图20220124100255.jpg

判断拦截字符,<script未拦截,<script>被拦截,则拦截关键词:<script>

QQ截图20220124100343.jpg

写入XSS平台代码(被拦截)

QQ截图20220124100411.jpg

逐步去掉>和后面的,发现向XSS平台发送数据包,但是XSS报错,但是加上>又会被拦截

QQ截图20220124100443.jpg

'替换>来闭合语句

QQ截图20220124100512.jpg

状态码200,发送成功

QQ截图20220124100542.jpg

将语句替换为<a href=,发现不行

QQ截图20220124100613.jpg

<a / href,绕过检测,但是没有数据包发送,/在JavaScript表示结束

QQ截图20220124100643.jpg

利用报错事件

QQ截图20220124100706.jpg

在img前面加入/

QQ截图20220124101216.jpg

特殊符号干扰

在后面填充数据绕过检测

QQ截图20220124101745.jpg

注意最后要加#,不然无法绕过,#属于特殊符号,#在web里面通常用作注释,还有如//等,可以一一尝试

QQ截图20220124103739.jpg

提交方式更改

修改代码为request方式

QQ截图20220124105049.jpg

改为post提交

QQ截图20220124105118.jpg

原因:安全狗为URL(get)检测

QQ截图20220124105313.jpg

加密解密算法

网上的绕过方法

QQ截图20220124105401.jpg

原理:1.利用率/2.利用率特殊字符#3.利用率编码(前提条件:要确定网站能够识别的加解密的方式)

QQ截图20220124105637.jpg

鼠标点击,会跳转

QQ截图20220124110322.jpg

自动化工具说明(XSStrike)

XSStrike 主要特点反射和 DOM XSS 扫描;多线程爬虫;Context 分析;可配置的核心;检测和规避 WAF;老旧的 JS 库扫描;智能 payload 生成器;手工制作的 HTML & JavaScript 解析器;强大的 fuzzing 引擎;盲打 XSS 支持;高效的工作流;完整的 HTTP 支持;Bruteforce payloads 支持;Payload 编码

需要python3环境

QQ截图20220124111019.jpg

用fuzzer扫描,offline为waf的状态,这里离线是英文工具为外国开发,没有识别安全狗,passed为没有拦截,filtered为有过滤

QQ截图20220124111133.jpg

对结果进行测试

  • <test x>没有被拦截

QQ截图20220124111152.jpg

  • <a href=x//被拦截

QQ截图20220124111207.jpg

直接进行测试(去掉fuzzer)

QQ截图20220124111457.jpg

在浏览器进行尝试(这里应该是识别为cc攻击)

QQ截图20220124111622.jpg

重启网站(发现没有拦截),对于拦截,请求频繁被cc攻击拦截后,重启phpStudy即可,对于现实,可以现在本地搭建环境,测试那些语句不会拦截在进行漏洞测试,还有一种方法:用代理(比较麻烦)

QQ截图20220124111701.jpg

换一条语句<A%09OnmouSeOvEr%0A=%0A(prompt)``%0Dx>v3dm0s,这里出现弹窗,但是我不知道啥意思

QQ截图20220124111919.jpg

更换语句,弹出111

QQ截图20220124111953.jpg

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模糊测试

抓取数据包

QQ截图20220124113315.jpg

name=1设置为变量,跑字典

QQ截图20220124113345.jpg

载入字典

QQ截图20220124113410.jpg

结果(查看返回的字节长度,来判断安全狗有没拦截,这里被拦截的字节数为:5336,即只要不为5336即可)

QQ截图20220124113445.jpg

浏览器访问<svg><animate onbegin=alert(11) attributeName=x dur=1s>,但是有个问题,这里很难输入XSS平台的XSS代码,应该也要和XSStrike的fuzzer功能类似,要通过它提供的语句来修改,而且也可以多跑几个字典

QQ截图20220124113537.jpg

关于 XSS 跨站安全修复建议测试

  1. 可以在php.ini文件内修改,可以在代码里添加httponly,还可以在输入输出进行关键字、大小写、特殊符号过滤等等。其中,主要是htmlentities()htmlspecialchars()这两个函数
  2. 这是一个Apache开发的安全组件,首先应当配置过滤器(注意在过滤器中chain.doFilter(..)方法中的Request对象进行包装,在包装类中对请求参数进行筛选操作)
  3. 其次将过滤器注册到web.xml文件中,最后配置Request的包装类,在其中对请求信息进行过滤

QQ截图20220124133128.jpg

QQ截图20220124133154.jpg