当前位置: 首页 > 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

相关文章:

  • Windows 11 [close recent file browsing history]
  • SQL每日一练(7)
  • clickhouse-1-特性及docker化安装
  • Ubuntu 22.04 高效Python依赖管理指南
  • 工作流长任务处置方案
  • SQL 每日一题(6)
  • Nature图形解析与绘制—热图的绘制及深入解析
  • 【Excel VBA 】窗体控件分类
  • C++引用以及和指针的区别
  • 《数据结构》系列笔记|附扫描手写笔记 1.0开篇-数据结构在学什么?
  • 数据结构第2章 (竟成)
  • Java基础 Day20
  • 【爬虫学习】Python数据采集进阶:从请求优化到解析技术实战
  • 二叉树--OJ2
  • 【数据结构】线性表之“双链表(带头循环双向链表)”
  • 这个方法关闭PowerBI账户的安全默认值
  • 【Android】基于SurfaceControlViewHost实现跨进程渲染
  • IEEE链接Overleaf
  • 代码随想录第43天:图论4(最小生成树、拓扑排序)
  • 代码随想录算法训练营 Day53 图论Ⅳ 字符串接龙 有向图 岛屿周长
  • 自己做网站 服务器/优化工具箱下载
  • 做磁力搜索网站好吗/外链怎么做
  • 网站留言怎么做/最近几天的新闻大事
  • 做网站基本教程/搜索引擎优化师工资
  • 企业简介 网站建设/经典软文案例200字
  • 广州一起做网站/门户网站软文