当前位置: 首页 > news >正文

渗透测试靶场PortSwiggerLabs-xss(1-10)lab详解

Lab 1:将 XSS 反射到未编码的 HTML 上下文中

输入字符显示在页面上

<h1>test</h1>对于 html 标签没有编码,可执行

插入弹窗<script>alert(1)</script>

Lab 2:将 XSS 存储到 HTML 上下文中,无需任何编码

这关室存储型 xss,将 script 代码插入到数据库中,常见留言板功能

这样每次访问留言板都会弹窗

Lab 3:document.write使用源的接收器中的 DOM XSS location.search

当我们输入 相关字符搜索时,请求 urlhttps://0ac800bb03d854e5805403a5005900d2.web-security-academy.net/?search=bucket,search 传参

图中 javascript 代码定义query,通过window.location.search定位到?search=bucket

通过get('search')拿到我们输入的bucket,传递给query,即 query=bucket

之后通过 trackSearch(query)方法,定义了document.write()在页面写入一个img 标签同时请求一个链接,链接中拼接了query,就是我们输入的字符

当我们插入world" onload="alert(1)时触发弹窗

Lab 4:innerHTML使用源的接收器中的 DOM XSSlocation.search


当我们输入查询字符,值被赋给 query,然后执行doSearchQuery方法,将query的值通过innerHTML将参数值 query 插入到ID为 searchMessage 的HTML元素中
插入<img src=# onerror=alert(1)>

Lab 5:使用源在 jQuery 锚点href属性接收器中进行 DOM XSSlocation.search

$(function() { ... })表示 dom 加载完后自动执行内部函数
$('#backlink').attr("href",...)表示选中 ID 为 backlink的元素,并修改 href属性

于是点击 back 按钮就会访问网站根目录href="/"

于是我们直接输入javascript:alert(1),点击 back 按钮即可执行 javascript

也可直接输入一个网址,点击即可跳转

Lab 6:使用 hashchange 事件在 jQuery 选择器接收器中引发 DOM XSS

这段代码是一个基于jQuery的哈希变化监听器,用于在URL的哈希部分(#后面的内容)发生变化时,自动滚动页面到匹配的博客标题位置

但是当我们刷新页面时他不会再滚动,因为逻辑是当哈希发生变化时才执行视图滚动


window.location.hash.slice(1):获取哈希值并去掉开头的 #(例如 #标题1 → 标题1)。
decodeURIComponent:对哈希值解码,处理可能被编码的特殊字符(如中文或空格)。
$('section.blog-list h2:contains(...)'):在 section.blog-list 容器中查找 <h2> 标题内容包含解码后哈希值的元素
在利用时需要考虑如何让#后的数据发生变化,利用到

this.src+=
<iframe src="https://0a4600e8046d180080a08af4002b00f0.web-security-academy.net/#" onload="this.src+='<img src=# onerror=print()>'"></iframe>

这样会先请求https://0a4600e8046d180080a08af4002b00f0.web-security-academy.net/#
然后再请求 https://0a4600e8046d180080a08af4002b00f0.web-security-academy.net/#<img src=# onerror=print()>,就会执行我们的 javascript 代码

Lab 7:将反射式 XSS 注入带有尖括号的 HTML 编码属性

注入" onmouseover="alert(1)进行拼接,鼠标移动即可执行弹窗

Lab 8:存储型 XSS 到href带有双引号 HTML 编码的锚点属性中

测试留言板的位置,可以看到我输入的网址http://abc.com,这里是要求输入作者的名字和一个网址

点击作者名字即可跳转网址

插入javascript:alert(1)点击即可弹窗

Lab 9:将反射式 XSS 注入带有尖括号 HTML 编码的 JavaScript 字符串

输入的 script 标签被 HTML编码

使用';alert();'绕过,将;替换为+``*``-``/都可以

Lab 10:在select 元素中document.write使用源的 DOM XSSlocation.search

进来以后有个点击切换商店的功能,我们看下实现逻辑

var store = (new URLSearchParams(window.location.search)).get('storeId');用来在 url 中查找参数,找到storeId的值赋给store

document.write('<select name="storeId">')会在脚本执行位置插入一个<select>标签,用于表单提交时标识该字段(如提交到服务器时参数名为storeId)

如果存在store,就自动给下拉框加个选项

if(store) {document.write('<option selected>'+store+'</option>');
}

这段是便利商店列表,如果输入的 storeId在商店列表就回到循环开始,如果不存在, 则添加到下拉列表

最后document.write('</select>');闭合下拉框

for(var i=0;i<stores.length;i++) {if(stores[i] === store) {continue;}document.write('<option>'+stores[i]+'</option>');
}

此时我们已经知道我们可以控制的参数是storeId,直接输入<script>alert()</script>

直接执行了 javascript

http://www.xdnf.cn/news/637957.html

相关文章:

  • QTableWidgetItem函数的介绍
  • 新闻推荐预测系统实战指南
  • 【编程实践】利用open3d对点云进行聚类并可视化
  • 02.Embedding:数字变矩阵
  • Android-flutter学习总结
  • 计算机基础核心课程
  • Java线程同步:从多线程协作到银行账户安全
  • day28JS+Node-JS打包工具Webpack
  • 智能办公系统 — 审批管理模块 · 开发日志
  • Llama 4中文调优全流程解
  • Linux Kernel调试:强大的printk(三)
  • Kotlin Native与C/C++高效互操作:技术原理与性能优化指南
  • 论文审稿之我对SCI写作的思考
  • 聊一聊接口测试如何设计有效的错误响应测试用例
  • Multivalued Dependencies
  • CMake指令:find_package()
  • 【HarmonyOS5】DevEco Studio 使用指南:代码阅读与编辑功能详解
  • Java 接口
  • Flink 常用算子详解与最佳实践
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用图像类)
  • 运维Linux之Ansible详解学习(更新中)
  • 【linux篇】系统世界跳跃的音符:指令
  • SheetMetal_Unfold方法 FreeCAD_SheetMetal deepwiki 源码笔记
  • 【时时三省】Python 语言----牛客网刷题笔记
  • 【电路笔记】-音频变压器(Audio Transformer)
  • RAG系统构建之嵌入模型性能优化完整指南
  • 永磁同步电机控制算法--IP调节器
  • 前端面试热门知识点总结
  • MongoDB分布式架构详解:复制与分片的高可用与扩展之道
  • 【Vue3】(二)vue3语法详解:自定义泛型、生命周期、Hooks、路由