xss复现

目录

复现DOM型xss

进入靶场  Challenges (pwnfunction.com)

1.Ma Spaghet!

2.Jefff

3.Ugandan Knuckles

4.Ricardo Milos

5.Ah That's Hawt​

思路一 

 思路二

6.Ligma

7.Mafia

法一 

法二

法三

8.Ok, Boomer


复现DOM型xss

进入靶场  Challenges (pwnfunction.com)

1.Ma Spaghet!

分析源码:

在script标签里边,使用get传参的方式给somebody传一个值,如果没有传值,默认传Somebody+Toucha Ma Spaghet!,然后赋值给spaghet,放在h2标签中。但是我们不能直
使用<script>标签,因为官方认为这不安全,可是却只对这一个标签进行了过滤,所有我们只需要换一个标签即可

 这里我们使用 

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

即可成功绕过

2.Jefff

分析源码:

这里首先使用get传参的方式,给jeff一个值,将值传给let jeff,变量ma然后执行Ma name +jeff传入的值,setTimeout是延时执行ma,这里的ma带了一个ineerText的属性

所有我们不能使用第一题标签的方法,转变思路看能不能直接闭合ma然后执行代码

显然我们用 "; 直接闭合了前面的ma,在分号后面插入执行代码即可

3.Ugandan Knuckles

分析源码:

还是使用get方式传参;首先是传给wey一个值,然后赋值给变量let wey,然后这里过滤了<>尖括号,最后将我们的变量wey内容传给Uganda,显示在输入框中,Uganda也带一个inner HTML的属性,所以我们不能使用script标签,那就看看其他的思路,由此我们无法闭合<input>标签,我们可以使用onclick函数加入一个点击事件,一点击就可以触发。可是问题又来了,游戏规则上说了我们不能使用与用户交互的方式,那有没有在input标签里面不和用户交互也可以触发的方式呢?onfocus
可以产生焦点,同时还有另一个autofocus可以自动对焦,两者结合即可自动触发。

4.Ricardo Milos

分析源码:

使用get方式传参;传一个值给Ricardo,这里的submit是提交,意思是将我们传入的值过两秒传给Ricardo。action是他接受的一个伪协议。伪协议事件是一种利用action属性中的特殊协议(如javascript:)来执行JavaScript代码的技术。所以我们可以使用JavaScript来绕过。

5.Ah That's Hawt
思路一 

源码分析:
这里主要是过滤,将()\ 和反引号过滤 ;会将这些符号转化为空还有inner HTML,所以script也不能用了不妨试一下用img的报错实现,因为我们的括号被过滤,那么我们可以试下使用实体编码进行绕过

可以看到使用了html实体替换()没起作用,我们的img标签也没了。这是因为url传参时会解码特殊字符,所以我们要对实体再编码一次。

思路二

延续之前的方法,onerror进行报错正常%2528 %2529不会被解析,那+location会不会不一样呢?

6.Ligma

代码分析:

这里看到过滤了数字和字母,基本上除了编码 没有其他解法,可以使用jsfuck。

在使用url解码

 即可完成

7.Mafia

法一 

分析源码:

这里还是get方式传参,但是限制我们传入的参数长度最大为50个字节,而且过滤了一大堆东西,最后执行mafia,很明显上一关的方法就不行了,代码漏洞,他过滤了符号和alert函数,但是没有过滤confirm 函数,但是很明显不可能这么简单只是作者忘记过滤了。所以我们使用匿名函数

 使用Function()()来执行函数也行,但是alert被过滤掉了,而且js中又区分大小写所以我们使用(ALERT(1337)/.source.toLowerCase())()来转换小写并执行即可绕过。

法二

alert使用parseint函数转换成了30进制的一个整数,toString()是返回一个函数的字符串,内容是函数的源码=> eval(8680439..toString(30))(1337)

法三

就是使用eval(location.hash.slice(1))#alert(1337)
location.hash时取出全部后面跟的值,而slice则是截取第一个值,并且hash后面的值不会认为是maifa的传参不会被过滤

8.Ok, Boomer

DOMPurify这个过滤框架由安全团队cure53开发过滤能力很强,基本不用考虑绕过,只能考虑setTimeout入手

 

可以看到没有成功的原因应该是javascript被过滤了,所以就得使用它框架允许的进行替换 

这个框架有个白名单我们替换一下

成功绕过

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值