day4

目录

总结反射型、存储型、DOM型XSS特点和区别

1. 反射型 XSS(Reflected XSS)

2. 存储型 XSS(Stored XSS)

3. DOM型 XSS(DOM-based XSS)

总结区别:

上网搜索一份XSS 的fuzz字典或字典生成工具

到XSS挑战靶场打靶(https://xss.tesla-space.com/)

level 1

分析

解决:简单xss直接注入

level 2

分析

解决:

level 3

分析

解决

level 4

分析

解决:

level 5

分析

解决

level 6

分析

解决

总结浏览器解析机制

浏览器解析机制总结

成功与不成功的原因分析(5条)

1. 例1

2. 例4

3. 例8

4. 例12

5. 例5


总结反射型、存储型、DOM型XSS特点和区别

1. 反射型 XSS(Reflected XSS)

特点:

  • 注入方式:恶意脚本通过用户输入(如URL参数、表单提交等)被发送到服务器,服务器响应时直接将这些未过滤的输入返回给用户。
  • 执行方式:脚本在响应时被执行,通常是用户点击恶意链接或提交表单后,恶意代码立即被反射到用户的浏览器并执行。
  • 持久性:非持久性,不会存储在服务器端。
  • 常见场景:搜索框、错误消息、URL 参数。
  • 攻击载体:通常通过社会工程学手段,如诱导用户点击恶意链接。

区别:

  • 反射型 XSS 是一次性的,不会在服务器端持久保存,用户访问特定恶意链接时才会被攻击。

2. 存储型 XSS(Stored XSS)

特点:

  • 注入方式:恶意脚本被存储在目标服务器的数据库中(如评论区、论坛帖子、用户简介等)。
  • 执行方式:每次用户访问包含恶意脚本的页面时,脚本都会自动加载并执行。
  • 持久性:持久性攻击,脚本存储在服务器端,影响所有访问该数据的用户。
  • 常见场景:社交媒体、留言板、在线聊天、博客评论等允许用户输入和展示内容的地方。
  • 攻击载体:脚本被存储后,无需用户特别交互即可执行,影响范围较广。

区别:

  • 存储型 XSS 攻击持续性更强,因为脚本被存储在服务器上,任何访问相关数据的用户都可能受影响。

3. DOM型 XSS(DOM-based XSS)

特点:

  • 注入方式:恶意脚本不通过服务器返回,而是直接在客户端的 JavaScript 执行上下文中被操纵(如 document.locationdocument.write 等)。
  • 执行方式:脚本通过 DOM 操作在客户端动态插入和执行。
  • 持久性:非持久性,完全在客户端执行,攻击代码未经过服务器的处理。
  • 常见场景:客户端代码未正确转义或过滤用户输入,导致脚本通过 DOM 操作被插入执行。
  • 攻击载体:依赖于客户端环境,攻击通常通过浏览器行为被触发。

区别:

  • DOM 型 XSS 完全在客户端发生,不涉及服务器对恶意脚本的存储或反射,攻击方式依赖于客户端 DOM 操作的漏洞。

总结区别:

  • 反射型 XSS 依赖于即时反射回来的脚本。
  • 存储型 XSS 依赖于服务器上存储的恶意脚本。
  • DOM 型 XSS 完全发生在客户端,通过客户端的 JavaScript 逻辑直接执行。

上网搜索一份XSS 的fuzz字典或字典生成工具

这是github上的一份XSSpayload字典。并且每一个可以注入成功之后都会alert不同的值。特别方便。

fuzzDicts/easyXssPayload/easyXssPayload.txt at master · TheKingOfDuck/fuzzDicts (github.com)

下面是字典截图

到XSS挑战靶场打靶(https://xss.tesla-space.com/

level 1

分析

url参数和界面同时出现相同字符串,考虑到xss

解决:简单xss直接注入<script>alert(1)</script>

level 2

分析

url参数和界面同时出现相同字符串,考虑到xss

直接注入没有反应

但是界面出现两个地方出现了对应字符串

  1. 注入点1是<h2>,不能注入
  2. <input>可以直接注入

解决:

很简单,闭合前面的双引号>就行了。

闭合之后这一段为(标红为payload

<input name="keyword" value=""><script>alert(1)</script>">

level 3

分析

和第二题类似也是

尝试注入之后发现有问题,就是我的双引号和>粘贴到vsc之后变成了html编码

所以思想就是尽量不用>",或者进行编码。这里可以不用>但是"必须要闭合。

但是 ---- 双引号 " 和 单引号 ' 在php是可以混合使用的,所以可以用 ' 进行闭合。

解决

构造下面payload 前面对value=" 闭合 ,后面对 " 进行闭合

<input name="keyword" value="' onmouseover=alert(9) '">

注:移动鼠标到元素上触发

level 4

分析

本来还在分析,以为会被过滤什么的。因为和第三题类似。

但是没想到双引号直接就成功了。

解决:

payload" onmouseover=alert(9) "

但是好像单引号'会被编码,和第三题相反。

level 5

分析

简单测试一下,发现双引号可以闭合,但是我的o被加了下划线。

思路就是绕开检测。

  1. 通过编码绕过,尝试无果。
    1. url编码,没有用,因为url解码之后得到o再给到js还是处理了。
    2. html编码,包含&#等字符,根本无法正常运行。
    3. unicode编码,这个o都不是js内部的脚本,而是html标签的属性,更不能解码
  1. 大小写绕过,无用,会被转为小写。
  2. 使用不包含o的payload
    1. 使用"><script>alert(1)</script><script>中的r被加了下划线。

解决

ifram标签

payload:"><iframe src=javascript:alert(197)>

level 6

分析

我的srcr竟然被加了下划线,

action也不行href也不行。

思路就是绕开

解决

大小写绕过

payload:"><a hRef=javascript:alert(200)>click

总结浏览器解析机制

浏览器解析机制总结

浏览器在解析网页时涉及多个解析器,包括 HTML、URL、JavaScript 解析器。每个解析器按照特定的状态机模型工作,将输入流中的字符解析为相应的输出。以下是各个解析器的简要说明:

  1. HTML 解析:处理 HTML 文档,将内容解析为 DOM 树。它会处理字符实体(如 &lt; 转换为 <),但不会解码特殊字符,如 <script> 内的字符。
  2. URL 解析:用于解析 URL,涉及识别协议、域名、路径等。如果 URL 中的协议部分被编码(如 %6a%61%76%61%73%63%72%69%70%74:),解析器可能无法正确识别和执行。
  3. JavaScript 解析:解析和执行 JavaScript 代码。它会对标识符和字符串中的 Unicode 转义序列(如 \u0061\u006c\u0065\u0072\u0074)进行解码。
  4. 解析流:多个解析器协同工作,解析顺序通常为 HTML、URL、JavaScript。如果某一部分需要多个解析器(如 href 中的 JavaScript: 协议),则解析顺序会依次进行。

成功与不成功的原因分析(5条)

1. 例1
 <a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>
    • 不执行
    • 先进行html解码,但是未进行html编码,所以不解码。
    • 然后进行url解码,但是不对协议解码,所以无法识别协议,所以无法执行。
2. 例4
<div>&#60;img src=x onerror=alert(4)&#62;</div>
    • 不执行
    • html解码不对"("")"进行解码
3. 例8
 <button onclick="confirm('8\u0027);">Button</button>
    • 不执行
    • ' "作为边界符时候,javascript解码不对 '"、进行解码。
4. 例12
<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>
    • 不执行
    • 全都可以解码,确实没错。
    • 但是解码之后变成了alert(12)12是字符串但是外面没有引号,语法错误
5. 例5
 <textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea>
    • 不执行
    • <textarea> </textarea>标签内只能是字符串,都不会执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值