xss-靶场

一、环境地址

XSS Game - Learning XSS Made Simple! | Created by PwnFunction

二、案例复现

案列1------Ma Spaghet!

复制代码
<!-- Challenge -->
<h2 id="spaghet"></h2>
<script>
    spaghet.innerHTML = (new URL(location).searchParams.get('somebody') || "Somebody") + " Toucha Ma Spaghet!"
</script>

这个脚本的功能是将页面中 ID 为 spaghet<h2> 元素的 innerHTML 设置为一个字符串,该字符串由 URL 查询参数 somebody 的值和文本 "Toucha Ma Spaghet!" 组合而成。如果 somebody 参数不存在,则使用默认值 "Somebody"。具体来说:

  1. new URL(location).searchParams.get('somebody'):获取 URL 查询参数 somebody 的值。
  2. || "Somebody":如果没有该查询参数,则使用默认值 "Somebody"。
  3. spaghet.innerHTML = ...:将拼接后的字符串赋值给 <h2> 元素的 innerHTML 属性。

element.innerHTML - Web API | MDN (mozilla.org)

解法

所以这道题的解法就很明了了,原因由上所说

https://sandbox.pwnfunction.com/warmups/ma-spaghet.html?somebody=\<img src=1 οnerrοr="alert(1337)">

本题应注意innerHTNL与innerText的区别

案例2------Jefff

复制代码
<!-- Challenge -->
<h2 id="maname"></h2>
<script>
    let jeff = (new URL(location).searchParams.get('jeff') || "JEFFF")
    let ma = ""
    eval(`ma = "Ma name ${jeff}"`)
    setTimeout(_ => {
        maname.innerText = ma
    }, 1000)
</script>

这个脚本的作用是将页面中 ID 为 maname 的 <h2> 元素的文本设置为 "Ma name " 后跟 URL 查询参数 jeff 的值,或者在没有该参数时使用默认值 "JEFFF"。具体步骤如下:

let jeff = (new URL(location).searchParams.get('jeff') || "JEFFF"):获取查询参数 jeff 的值,若不存在则使用默认值 "JEFFF"。

eval(ma = "Ma name {jeff}"):使用 eval 动态创建字符串 "Ma name {jeff}" 并将其赋值给变量 ma。

setTimeout(_ => { maname.innerText = ma }, 1000):在 1000 毫秒(1秒)后将 ma 的值设置为 <h2> 元素的文本内容,只执行一次

解法1

用分号;分割

https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aaa";alert(1337);"https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aaa";alert(1337);"[https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aaa";alert(1337);"](https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aaa";alert(1337);" "https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aaa\";alert(1337);\"")

解法2

用js中的特殊连接符(-)

https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aaa"-alert(1337);-"https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aaa"-alert(1337);-"[https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aaa"-alert(1337);-"](https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aaa"-alert(1337);-" "https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aaa\"-alert(1337);-\"")

案例3------Ugandan Knuckles

复制代码
<!-- Challenge -->
<div id="uganda"></div>
<script>
    let wey = (new URL(location).searchParams.get('wey') || "do you know da wey?");
    wey = wey.replace(/[<>]/g, '')
    uganda.innerHTML = `<input type="text" placeholder="${wey}" class="form-control">`
</script>

这个脚本的作用是将页面中 ID 为 uganda<div> 元素的内容设置为一个 <input> 元素。具体步骤如下:

  1. let wey = (new URL(location).searchParams.get('wey') || "do you know da wey?"):获取 URL 查询参数 wey 的值,如果没有则使用默认值 "do you know da wey?"
  2. wey = wey.replace(/[<>]/g, ''):从 wey 字符串中移除所有 <> 字符,以防止潜在的 HTML 注入。
  3. uganda.innerHTML = <input type="text" placeholder="${wey}" class="form-control">``:将 div 元素的 innerHTML 设置为一个 <input> 元素,其 placeholder 属性的值为处理后的 wey

解法

这道题的解法在于input的onfocus与autofocus属性(作用是聚焦,不过一个是手动对焦,一个是自动对焦)

案例4------Ah That's Hawt

javascript 复制代码
<!-- Challenge -->
<h2 id="will"></h2>
<script>
    smith = (new URL(location).searchParams.get('markassbrownlee') || "Ah That's Hawt")
    smith = smith.replace(/[\(\`\)\\]/g, '')
    will.innerHTML = smith
</script>

这个脚本的作用是将页面中 ID 为 will 的 <h2> 元素的 innerHTML 设置为一个处理过的字符串。具体步骤如下:

smith = (new URL(location).searchParams.get('markassbrownlee') || "Ah That's Hawt"):

从 URL 查询参数 markassbrownlee 中获取值。如果该参数不存在,则使用默认值 "Ah That's Hawt"。

smith = smith.replace(/[\(\)\]/g, '')`:

使用正则表达式从字符串 smith 中移除所有的 (、`、)、\ 字符(注,这里的符号我用逗号分隔的注意分辨)。这一步主要是为了清理字符串,以防止潜在的 HTML 注入或其他不安全字符。

will.innerHTML = smith:

将处理后的字符串 smith 赋值给 <h2> 元素的 innerHTML 属性。这将更新该 <h2> 元素的内容为 smith 的值。

解法

这道题过滤括号,反引号,反斜杠,采取location和编码绕过,%25url编码为%,%28编码为(,剩下的同理

https://sandbox.pwnfunction.com/warmups/thats-hawt.html?markassbrownlee=\<img src=1 οnerrοr=location="javascript:alert%25281337%2529">

相关推荐
2501_915918411 小时前
Web 前端可视化开发工具对比 低代码平台、可视化搭建工具、前端可视化编辑器与在线可视化开发环境的实战分析
前端·低代码·ios·小程序·uni-app·编辑器·iphone
程序员的世界你不懂2 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
索迪迈科技2 小时前
网络请求库——Axios库深度解析
前端·网络·vue.js·北京百思可瑞教育·百思可瑞教育
gnip2 小时前
JavaScript二叉树相关概念
前端
attitude.x3 小时前
PyTorch 动态图的灵活性与实用技巧
前端·人工智能·深度学习
β添砖java3 小时前
CSS3核心技术
前端·css·css3
空山新雨(大队长)3 小时前
HTML第八课:HTML4和HTML5的区别
前端·html·html5
猫头虎-前端技术4 小时前
浏览器兼容性问题全解:CSS 前缀、Grid/Flex 布局兼容方案与跨浏览器调试技巧
前端·css·node.js·bootstrap·ecmascript·css3·媒体
阿珊和她的猫4 小时前
探索 CSS 过渡:打造流畅网页交互体验
前端·css