WEB安全
00-HTTP协议
01-前端基础【HTML】
02-前端基础【CSS】
03-后端基础【PHP速通】
04-后端基础【PHP面向对象】
05-MySQL基础操作
06-前后端联动【代码练习】
07-SQL注入
08-SQL注入 Labs
09-跨站脚本攻击【XSS】
09-XSS Labs
10-CSRF
11-SSRF
12-XML 外部实体注入【XXE】
13-代码执行漏洞
14-命令执行漏洞
15-文件包含漏洞
16-文件上传漏洞
17-反序列化漏洞
18-业务逻辑漏洞
19-未授权访问漏洞集合
20-跨源资源共享【CORS】
21-SSTI模板注入
22-并发漏洞
23-点击劫持【Clickjacking 】
24-请求走私
25-路径遍历
26-访问控制
27-身份验证漏洞
28-WebSocket
29-Web缓存中毒
30-HTTP 主机头攻击
31-信息泄露漏洞
32-原型污染
33-API概述
34-API分类类型
35-API交换格式
36-API身份验证
37-API常见漏洞
38-crAPI靶场
39-JWT
40-DVGA靶场
41-服务器端参数污染
42-API Labs
43-OAuth Labs
44-GraphQL API Labs
45-JWT Labs
46-小程序抓包
47-云存储
48-对象存储OSS
49-存储桶
50-存储桶漏洞
51-STS访问OSS
-
+
09-XSS Labs
浏览
1
实验室地址:https://portswigger.net/web-security/all-labs#cross-site-scripting ## 经典反射型XSS 直接在搜索框注入 ```javascript <script>alert(1)</script> ``` ## 典型的存储型XSS 在文章的评论中直接输入: ```javascript <script>alert(1)</script> ```   ## DOM型XSS【innerHTML】 1、在输入框中输入随机字符。  2、右键检查元素。  3、直接构造payload ```javascript <img src=1 onerror=alert(1)> ```   ## DOM型XSS【 jQuery 锚点 】 在提交反馈页面中存在一个基于 DOM 的跨站点脚本漏洞。该漏洞利用 jQuery 库的$选择器函数查找锚点元素,并href使用来自 的数据更改其属性location.search。 任务:返回cookie值。 1、点击反馈页面,发现returnPath参数跟着路径  2、将路径的值随便填写呢。  页面中没有回显。 3、右键检查元素,并且搜索关键词。  在href链接中 4、构造payload。 ```javascript javascript:alert(document.cookie) ```   按回车键,直接过关。【正常情况下,要点击Back按钮才能触发输入的payload】  ## DOM型XSS【hashchange 事件】 在 jQuery 中,hashchange 事件用于监听浏览器 URL 中哈希部分(即 # 后面的内容) 的变化。当 URL 的哈希值(如 http://example.com/#page1 中的 #page1)发生改变时,该事件会被触发。 已知:主页发现一个基于 DOM 的跨站脚本漏洞。jQuery 选择器接收器中使用 hashchange 事件的 DOM XSS。 任务:向受害者提供一个漏洞,以print()在其浏览器中调用该函数。 1、在主页中点击转到漏洞利用服务器。  2、构造payload并且查看漏洞。 ```javascript <iframe src="https://0afd006d0459d9af8007dfaa00ed008b.web-security-academy.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe> ```  4、返回漏洞利用服务器,点击Deliver exploit to victim  5、过关。  **payload解析** ```html <iframe src="https://目标域名/#" onload="this.src+='<img src=x onerror=print()>'" ></iframe> ``` 若目标页面(即 iframe 加载的页面)中存在 jQuery 监听 hashchange 事件并处理哈希值的代码,且处理逻辑不安全(未对哈希值进行过滤 / 转义),则会触发漏洞。 ## 反射型XSS【HTML 编码】 已知:一个反射型跨站脚本漏洞,该漏洞存在于搜索博客功能中,其中尖括号采用 HTML 编码。 1、输入img标签的payload,并没有弹窗。  2、输入的值在value中。  3、构造payload。 ```txt "onmouseover="alert(1) ``` 4、过关。  **解析payload** ```txt "onmouseover="alert(1) ``` 通过JS自带的事件型,nmouseover是 HTML 中的鼠标悬停事件属性,用户的鼠标指针移动到当前元素上时,会触发该属性中定义的 JavaScript 代码。 ## 存储型XSS【双引号 HTML 编码】 已知:评论功能中的一个存储型跨站脚本漏洞。 任务:提交一条评论,并在用户点击评论作者姓名时调用alert函数。 ## 反射型XSS【尖括号 HTML 编码】 已知:漏洞存在于搜索查询跟踪功能中,其中尖括号被编码。 1、输入随机字符,并且检查元素。   2、发现输入的字符在JavaScript中,构造payload。 ```txt '-alert(1)-' ```   ## DOM 型XSS【document.write】 已知:检查库存功能中基于 DOM 的跨站点脚本漏洞。该漏洞利用 JavaScript document.write函数将数据写入页面。该document.write函数调用时会使用数据location.search。 1、分析前端JavaScript。  这段JavaScript的核心功能是根据 URL 中的 storeId 参数,生成包含预设选项的下拉菜单  2、构造payload。 ```txt &storeId="></select><img%20src=1%20onerror=alert(1)> ```   ## DOM型XSS【双花括号执行】 已知:搜索功能中 AngularJS 表达式中基于 DOM 的跨站点脚本漏洞。 AngularJS 是一个流行的 JavaScript 库,它会扫描包含属性(也称为 AngularJS 指令)的 HTML 节点内容的**ng-app**。将指令添加到 HTML 代码中后,**可以在双花括号内执行 JavaScript 表达式**。 1、输入随机字符,查看页面源代码并观察您的随机字符串是否包含在ng-app指令中。  2、构造payload,输入 AngularJS 表达式。 ```txt {{$on.constructor('alert(1)')()}} ```   **payload解析** ```txt {{$on.constructor('alert(1)')()}} ``` ```txt $on:是 AngularJS 作用域($scope)中的一个内置方法,用于监听事件(语法:$on(eventName, handler))。它本质上是一个 JavaScript 函数。 $on.constructor:在 JavaScript 中,所有函数都是 Function 对象的实例,而 constructor 属性指向创建该对象的构造函数。 $on.constructor('alert(1)'):通过 Function 构造函数创建一个新函数,参数 'alert(1)' 是函数体,等价于 function() { alert(1); }。 ``` ## 反射型 DOM XSS 当服务器端应用程序处理来自请求的数据并在响应中回显该数据时,就会发生反射型 DOM 漏洞。然后,页面上的脚本会以不安全的方式处理反射数据,最终将其写入危险的接收器。 1、搜索框输入任意字符,检查元素,发现了js代码。  2、找到js源文件进行分析。  3、也可以通过burp查看,在 burp代理的http history中找到了相同的路径,并发现了以下关键函数。  4、关键函数进行分析。 ```javascript function search(path) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { eval('var searchResultsObj = ' + this.responseText); displaySearchResults(searchResultsObj); } }; xhr.open("GET", path + window.location.search); xhr.send(); ``` 核心功能是: - 创建 XMLHttpRequest 对象(XHR,用于发送异步 HTTP 请求); - 配置请求:以 GET 方式向 path + window.location.search 发送请求(path 为基础路径,window.location.search 是当前页面的 URL 查询参数。 https://0a1900470382f16980e54fac005800da.web-security-academy.net/?search=asdada - 监听请求状态变化(onreadystatechange):当请求完成(readyState == 4)且服务器返回成功(status == 200)时,使用eval函数解析响应文本并处理结果。 最关键的函数功能: ```javascript eval('var searchResultsObj = ' + this.responseText); eval(var searchResultsObj = this.responseText) ``` this.responseText:是 XMLHttpRequest 对象的属性,表示服务器返回的响应文本(字符串类型)。 eval(...) 会将拼接后的字符串当作 JavaScript 代码执行,searchResultsObj 并赋值为服务器返回的对象。 5、构造payload。 ```txt \"-alert(1)}// ```   **payload分析** ```txt \"-alert(1)}// ``` 注入了一个反斜杠,而网站没有对其进行转义,因此当 JSON 响应尝试转义开头的双引号字符时,它会添加第二个反斜杠。由此产生的双反斜杠实际上抵消了转义。这意味着双引号在处理时不会被转义,从而关闭了应该包含搜索词的字符串。 然后,在调用函数之前,使用算术运算符(在本例中为减法运算符)分隔表达式alert()。最后,用右花括号和两个正斜杠提前关闭 JSON 对象,并注释掉该对象的其余部分。 最终生成的响应如下所示: ``` {"searchTerm":"\\"-alert(1)}//", "results":[]} ``` ## 存储型 DOM XSS 已知:博客评论功能中一个存储型 DOM 漏洞。 1、直接发送一个经典的xsspayload。 ```txt <script>alert(2)<script> ```  2、检查元素,发现最后一个`<script>`被过滤了。  3、 ```txt <><f><g><> ```   5、经过系列猜测后开始构造payload。 ```txt <><img src=1 onerror=alert(1)> ```   该网站使用JavaScript replace()函数对尖括号进行编码。发现当第一个参数是字符串时,该函数只会替换第一个出现的尖括号。我们只需在注释开头添加一组额外的尖括号即可利用此漏洞。这些尖括号会被编码,但后续的尖括号不会受到影响。
毛林
2026年11月15日 18:27
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~