XSS
免责声明
本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
相关文章
相关案例
[BugBounty] XSS with Markdown — Exploit & Fix on OpenSource - markdown xss 案例
相关工具
s0md3v/XSStrike - XSS 检测工具,效果一般
依赖安装
faizann24/XssPy - Web 应用 XSS 扫描器
XSS Fuzzer - payload 生成器
hahwul/dalfox - 一款基于 Golang 开发的 XSS 参数分析和扫描工具
xss 平台
开源平台
firesunCN/BlueLotus_XSSReceiver - XSS 平台 CTF 工具 Web 安全工具
keyus/xss - php 写的个人研究测试用的 xss cookie 攻击管理平台
ssl/ezXSS - ezXSS is an easy way for penetration testers and bug bounty hunters to test (blind) Cross Site Scripting.
在线平台
http://xssye.com/index.php
beef
相关文章
默认端口为 3000,默认路径是
/ui/authentication,默认用户名和密码 beef
在线测试
http://demo.testfire.net/
https://juice-shop.herokuapp.com/#/search
https://xsschop.chaitin.cn/demo/
靶场
XSS 挑战-WalkThrough
payload
cujanovic/Markdown-XSS-Payloads - XSS payloads for exploiting Markdown syntax
Tips
Firefox 关闭 xss 过滤器
about:config 把 rowser.urlbar.filter.javascript 改为 false
chrome 关闭 xss 过滤器
带参数启动 --args --disable-xss-auditor
基础
什么是 XSS
跨站点脚本 (XSS) 攻击是一种注入,Web 程序代码中对用户提交的参数未做过滤或过滤不严,导致参数中的特殊字符破坏了 HTML 页面的原有逻辑,攻击者可以利用该漏洞执行恶意 HTML/JS 代码、构造蠕虫、篡改页面实施钓鱼攻击、以及诱导用户再次登录,然后获取其登录凭证等。
XSS 攻击有 3 种类型:
反射型 XSS : 通过网络浏览器从另一个网站运行恶意脚本的攻击
存储型 XSS : 存储型是将注入的脚本永久存储在目标服务器上的攻击
基于DOM的XSS : 一种在 DOM 结构中而不是在 HTML 代码中触发的 XSS。
XSS Payload
最基础的
在标签内部的
示例1
示例2
示例3
示例4
通过注释转义的
在 script 中
示例
在 script 中,但输出在字符串分隔值内,引号被反斜杠转义
示例
一行 JS 内多个值
示例
条件控制语句内的值
示例
反引号内的值
示例
用在其他功能点
文件名
exif 数据
SVG
markdown
xml
pyscript
https://github.com/pyscript/pyscript
绕过技巧
使用无害的 payload,类似
<b>,<i>,<u>观察响应,判断应用程序是否被 HTML 编码,是否标签被过滤,是否过滤<>等等;如果过滤闭合标签,尝试无闭合标签的 payload
<b,<i,<marquee观察响应;
长度限制
绕过长度限制
内容检测
换行
过滤空格,用 / 代替空格
过滤关键字,大小写绕过
不闭合
拼接
双写关键字
有些 waf 可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过
替换绕过
过滤 eval 用 Function 代替
过滤 ('') 用 `` 代替绕过
过滤 alert 用 prompt,confirm,top'alert' 代替绕过 过滤空格 用 %0a(换行符),%0d(回车符),/**/ 代替绕过 小写转大写情况下 字符 ſ 大写后为 S(ſ 不等于 s)
利用 atob 绕过
利用 eval
利用 top
%00截断绕过
其它字符混淆
有的 waf 可能是用正则表达式去检测是否有 xss 攻击,如果我们能 fuzz 出正则的规则,则我们就可以使用其它字符去混淆我们注入的代码了,举几个简单的例子
可利用注释、标签的优先级等
通过编码绕过
过滤双引号,单引号
过滤括号
过滤url地址
javascript 伪协议绕过
无法闭合双引号的情况下,就无法使用 onclick 等事件,只能伪协议绕过,或者调用外部 js
输入会被大写化
先把纯文本字符转换为 HTML 实体字符, 然后对其进行 URL 编码, 最后用 SVG 标记的 onload 参数输出
U+2029 XSS
段落分隔符,即 U+2029,是用于字符分隔的 Unicode 值,但它是一个在网络上不常使用的字符。