反射XSS-Bypass
# 反射 XSS - 绕过防护或 WAF
# 等价替换
① alert() <---> (alert)() <---> alert`` <---> prompt() <---> a=alert;a() <---> (alert)``
② document.cookie <—> document[‘cookie’] <—> with(document)alert(cookie)
③ 双引号 <—> 单引号 <—> 反引号
# 过滤净化
某些特殊字符或关键字被过滤掉,无法反射出来
① 特殊字符【常见的有 %0d %00 %0a 等】 如: alert%0d() ale%00rt() onload%0a="alert%0d()"
② 特殊关键字【常见的有 script 或者 <script>
等】 如: aler<script>t()
**③ 过滤 \ : ** <s\c\r\i\p\t>a\l\e\r\t\(\d\o\c\u\m\e\n\t\.\c\o\o\k\i\e\)\<\/\s\c\r\i\p\t\>
# 参数为点
① 参数值与参数都有反射点 比如 url 处为 a=xxxx,响应为 “a”:“xxxx” 这样的,可以尝试在参
数本身插入 payload,得到 ayyyy=xxxx,得到 “ayyyy”:“xxxx”
② 有时候 waf 或防护会防御参数值处的反射处 但有可能会在参数本身没有 waf 或防护,用
url 为 a"-alert()-"=xxxx
成功触发
# 多余绕过
① 如 ** 标签过滤 <script>
的时候 :** 可以加多余内容到标签属性处(虽然攻击本身不需要) <script/xyz>alert()</script>
可以绕过简单的过滤;
② 如 一些防御机制是通过匹配 <>,然后提取内容,与黑名单校验,可以通过添加多余尖括
号来绕过 <<script>alert()<</script>
# 转义逃逸
转义符没有被转义而导致引号逃逸,完成前闭合
① 如果发现反射点在 <script>
标签内,例如: <script>var name="{反射点}";</script>
, 但是双
引号被转义:
② 那么 " 试试是否转义符也被转义,没有且注释符也没有被转义的话,可以引号逃逸,选择
注释后面,那么最终为 \";alert();//
- 反斜杠 (
\
) 是转义字符:- 在 JavaScript 中,反斜杠 (
\
) 是一个转义字符,用于表示特殊字符。例如,\n
表示换行,\t
表示制表符等。 - 当需要在字符串中插入一个特定字符(如引号
'
或"
)时,反斜杠用于 “转义” 这个字符,防止它被解释为字符串的结束符。
- 在 JavaScript 中,反斜杠 (
- 转义单引号 (
\'
):- 如果字符串是用单引号(
'
)包围的,比如:'Hello, world!'
,直接在字符串中插入一个单引号将会导致语法错误,因为它会被解释为字符串的结束。 - 为了在这样的字符串中插入一个实际的单引号,可以使用转义字符。例如:
'It\'s a nice day!'
。在这个例子中,\'
表示一个单引号字符,它不会终止字符串,而是作为普通字符被包含在字符串中。
- 如果字符串是用单引号(
- 双反斜杠 (
\\
) 的含义:- 在字符串中,单个反斜杠 (
\
) 被用作转义字符,但如果你需要在字符串中表示一个反斜杠本身,则需要用两个反斜杠(\\
)来表示。 - 因此,
\\
实际上代表一个单一的反斜杠字符。
- 在字符串中,单个反斜杠 (
综合解释 \\'
- 在
\\'
中,前两个反斜杠 (\\
) 表示一个实际的反斜杠字符,而\'
则表示一个转义后的单引号字符。 - 合在一起,
\\'
表示在字符串中插入一个反斜杠和一个单引号。
# 方法转换
GET 与 POST 两种请求方式进行互相转换,偶尔有奇效
① POST 型反射 XSS 有时候厂商是不收的,但可以通过 Burp 的 Change request method 很方便
地就把 POST 型改成 GET 型,发包后,有一定概率能成功,最后以 GET 型提交
② 假设失败,GET 型不存在反射 XSS 时,看是否有 CSRF,可以基于 CSRF 进行 POST 型反射 XSS
的利用,能使厂商接受报告的可能性增大很多
# 域名拆解
通过子域名的类似形式进行爆破 or 拆解,利用代码复用,变成赏金范围内的洞
① 先挖到了当当网 mtouch 子域的反射 XSS,然后想办法拆解子域 mtouch 为
touch.m.dangdang.com ,发现代码复用,同一路径的同一反射参数且同一 payload
② 搜狐的子域 d1.m.sohu.com 可以猜解为 (a-z)(0-9).m.sohu.com 最终发现 t3.m.sohu.com
可行
# 双重编码
现在一些搜索框已经进行 XSS 防护,有时候用双重 URL 编码可以成功绕过
① 常见特殊字符的双重 URL 编码:“%2522 ‘ %2527 < %253c> %253e / %252f
② 关键字有时候不需要进行此类编码,但有时也需要,随机应变
# 组合利用
反射 XSS 在国内很少有厂商收,建议挖国外,有时可利用组合拳提升危害
① 国内 SRC 的反射 XSS 赏金 VS 国外 HackerOne/BugCrowd 反射 XSS 赏金
② 常见组合拳: CORS / CSRF / 越权
之前写过一个 XSS 的文章:XSS - Fc04dB’s BLOG
# 一个靶场
打开输入 aaaaa
查看源代码搜索 aaaaa
确定了注入点
转义了 <script>
绕过: xxx<svg/onload=alert(1)>
- Title: 反射XSS-Bypass
- Author: Fc04dB
- Created at : 2024-09-05 15:52:00
- Updated at : 2024-09-06 16:45:06
- Link: https://redefine.ohevan.com/2024/09/05/反射XSS-Bypass/
- License: This work is licensed under CC BY-NC-SA 4.0.