反射XSS-Bypass

Fc04dB Lv4

# 反射 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();//

  1. 反斜杠 ( \ ) 是转义字符
    • 在 JavaScript 中,反斜杠 ( \ ) 是一个转义字符,用于表示特殊字符。例如, \n 表示换行, \t 表示制表符等。
    • 当需要在字符串中插入一个特定字符(如引号 '" )时,反斜杠用于 “转义” 这个字符,防止它被解释为字符串的结束符。
  2. 转义单引号 ( \' )
    • 如果字符串是用单引号( ' )包围的,比如: 'Hello, world!' ,直接在字符串中插入一个单引号将会导致语法错误,因为它会被解释为字符串的结束。
    • 为了在这样的字符串中插入一个实际的单引号,可以使用转义字符。例如: 'It\'s a nice day!' 。在这个例子中, \' 表示一个单引号字符,它不会终止字符串,而是作为普通字符被包含在字符串中。
  3. 双反斜杠 ( \\ ) 的含义
    • 在字符串中,单个反斜杠 ( \ ) 被用作转义字符,但如果你需要在字符串中表示一个反斜杠本身,则需要用两个反斜杠( \\ )来表示。
    • 因此, \\ 实际上代表一个单一的反斜杠字符。

综合解释 \\'

  • \\' 中,前两个反斜杠 ( \\ ) 表示一个实际的反斜杠字符,而 \' 则表示一个转义后的单引号字符。
  • 合在一起, \\' 表示在字符串中插入一个反斜杠和一个单引号。

# 方法转换

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

image-20240905193804556

查看源代码搜索 aaaaa

image-20240905193902591

确定了注入点

image-20240905194216370

转义了 <script>

绕过: xxx<svg/onload=alert(1)>

image-20240905194359448

  • 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.
Comments