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

发布于:2025-05-25 ⋅ 阅读:(26) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到