Web安全
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入【1】
07SQL 注入【2】
08SQL注入 Labs
08SQL注入速查表
09XSS
09跨站脚本攻击【XSS】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
API 安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL【1】
11GraphQL【2】
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
小程序
小程序抓包
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
-
+
首页
09XSS Labs
实验室地址: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()函数对尖括号进行编码。发现当第一个参数是字符串时,该函数只会替换第一个出现的尖括号。我们只需在注释开头添加一组额外的尖括号即可利用此漏洞。这些尖括号会被编码,但后续的尖括号不会受到影响。
毛林
2025年9月6日 12:34
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码