⛏️portswigger-XSS靶场专家关卡
2022-11-19
| 2022-11-18
0  |  0 分钟
type
status
slug
tags
category
icon
password
Property
Nov 18, 2022 01:00 PM
date
summary

前言

闲来无事刷一下burp官网的靶场,感觉还挺有意思的。尤其是专家关卡这边就记录一下专家关卡

0x01

 
难点-只能使用部分标签 -所有事件都被屏蔽
 
notion image
 
 
 
关键就在于animate这个标签
如下代码 svg 和circle 会在页面画一个圆⭕️
 
notion image
 
 
其中svg为画一个框框 circle为绘制一个圆,cx 为 x轴位置 xy 为y轴的位置 r为半径
 
这时候圆是不会动的,可以通过animate标签动态改变circle 的属性
 
 
animate 可以动态改变
 
attributeName 这个标签定义了改变哪个值,
values定义了从什么改变到什么
dur 变化时长
fill 结束后保持在第一帧还是最后
repeatCount 循环次数
notion image
 
 
了解了上面的特定我们就可以利用这个特性来构造xss了
 
动态改变a标签的href属性 变为payload
 
改造一下
 
 

0x02

这关非常有趣就在于反射查询框存在xss
 
notion image
 
为啥还能查询到正确的文章,因为mysql会将id 字符串强制转成int
 
notion image
 
有意思地方就是xss位置在href属性 ,而单引号地方使用的是url编码,要知道我们在地址栏位置是默认url编码解码的
尝试payload
 
所以我们尝试直接使用单引号跳出,可以看到下面报错了,就代表跳出了原有的位置
notion image
 
 
直接按照传统方式呢?可以看到过滤了 括号空格等字符 ()
notion image
 
url编码-也是没法
 
notion image
 
所以这里没法使用括号,跳出 所以的必须在fetch函数内
 
 
这里我也不懂 直接上正解,不过可以解释一下具体含义
 
notion image
 
其实可以适当精简下
 
变换一下使用 valueOf
 
 
 
notion image
 
 
参考链接
全面分析 toString 和 valueOf | 前端随笔 FE-Essay
在 JavaScript 中,有两个内置 API 是非常特殊的: 它们几乎出现在所有类型对应的内置对象的原型上(除了 null 和 undefined),它们的出现也是为了解决 JavaScript 的值运算问题,同时也给广大 jser 同胞带来了无比头痛的隐式转换的问题。 以下所有为自我总结经验,未必正确,请理性学习。 返回一个表示当前值的特殊字符串,当对象表示为文本值或以期望字符串的形式被引用时,toString 方法会被自动调用。 我们尝试声明几种不同类型的变量,并且分别调用以下变量对应的 toString 方法。 我们可以看到不同类型的变量调用 toString 方法输出的字符串是不同的,这是因为这些变量对应的内置原型对象并没有继承来自 Object 原型上的 toString 方法,而是各自实现。 同时我们发现,当变量类型为对象的时候,调用 toString 时输出的是一个包含当前类型的字符串。 基于以上发现,我们可以使用这种方式来实现最精确的类型判断。 当我们在进行操作符运算的时候,如果符号其中一侧为复杂类型,则会先调用 toString 进行隐式转换,然后在进行操作。 基于以上的特性,我们可以重写 toString 这个方法。 返回当前包装对象的原始值。 这个 API 通常是由 JavaScript 引擎内部调用,开发者一般情况下不会使用,其功能和 toString 大同小异。 共同点:两者都是在值运算的时候会自动调用,从而触发隐式转换 不同点:默认返回值不同,并且存在调用优先级关系 在二者并存的情况下, 数值运算 时优先使用 valueOf
 

0x03

3-4关都是关于AngularJS 这个谷歌开发的一个js框架
 
第三关主要就是沙箱逃逸
 
 
notion image
 
 

0x04

这个是有关AngularJS框架使用ng-focus绕过CSP,这样就不会触发CSP内联检查
 

0x05

 
5-6关卡都是关于csp的
 
 
存在xss漏洞但因为有CSP 没法执行js脚本
notion image
 
这关攻击有点复杂了 需要用xss把csrf的token带出来然后用csrf改邮箱
用到了 window.name 属性
 
利用xss构造一个a标签
 
 
注意base标签里面的target属性 会被带出保存在window.name 属性里面
这里便包含了csrf 参数
notion image
 
 
获取到csrf后然后构造payload
 
notion image
 
 
再次发送点击即可
 

0x06

这关就比较简单了
主要就是响应头注入绕过CSP
 
正常payload 会触发CSP保护
 
notion image
 
token位置存在请求头注入,注入CSP位置允许加载内联脚本
 
 
notion image
 
成功执行
 
学习思考
  • vulnerability
  • XSS
  • 条件竞争漏洞Notion搭建个人博客
    目录