xss-lab靶场详解
pass1-pass4在上一篇博客中已经写过,便不再赘述
1.pass 5
来到第五题,先直接输入测试语句:
<script " ' Oonn>
查看源码,发现两个标签中间被插入了字符,尖括号和引号都没有被过滤或转义,同时还可以看出语句了采用双引号闭合
所以我们构建payload时要先在开头加一个">将input标签的<给闭合掉,末尾也需要加一个<"把input剩下的尖括号闭合掉,中间加入我们正常的注入代码即可:
注意:script标签和onblur标签是无法使用的
"><a href="javascript:alert(/xss/)">click me!</a><"
成功注入
2.pass 6
依旧是先输入测试语句查看过滤逻辑:
仍然是两个标签中间被插入了字符,尖括号和引号都没有被过滤或转义,同时还可以看出语句了采用双引号闭合,继续使用上一关的a标签注入
发现href属性中间也插入了下划线,尝试使用大小写绕过:
"><SCript>alert(/zbpyy/)</SCript><"
注入成功
3.pass 7
继续使用测试语句注入:
script被过滤,同时on也被过滤了一次,尖括号,单双引号都没进行处理,同时语句采用双引号闭合
所以我们采用双写绕过:
"oonnmouseover="alert()
这里使用的是onmouseover 事件,这个事件发生在鼠标指针移动到元素或它的子元素上时
4.pass 8
输入测试语句:
结果在十七行发现尖括号被转义,双引号被转义,单引号没变,关键字没变,同时,语句采用双引号闭合方式
在二十行发现参数被传递到a标签的herf属性中,尖括号被转义回来,双引号还是被转义,关键字script和on被插入下划线,单引号依旧没变
所以我们尝试在标签a的herf属性中进行注入,由于herf标签会对script插入下划线,所以我们使用ASCII编码进行绕过
在这之前需要了解jsp的伪代码:
-
我们为<a>标签增加href属性,一般有两个目的:
- 跳转到指定的页面,也就是:link选择器可以选择到它
- 有href属性的<a>标签才有cursor:pointer的效果,特别实在低版本浏览器里面
-
下面是不想要<a>标签跳转到实际页面的几种方法:
-
<a href="#"></a>
点击这个链接后,会让页面跳到页面顶部,在location.href后面增加#号
-
<a href="#none"></a>
点击这个链接后, 如果页面里面有id为none的元素,会执行锚点机制跳转到这个元素上缘
-
<a href="###"></a>
不跳转,可以阻止默认的跳转行为,但是这个在后端代码中容易识别成注释
-
<a href=“javascript:”></a>
-
<a href=“javascript:;”></a>
是把javascript:后面的代码当JavaScript来执行,并将结果值返回给当前页面
-
所以我们要使用<a href=“javascript:”></a>来进行注入,构造payload:
javascript:alert(/zbpyy/)
注入成功
5.pass 9
依旧是注入测试语句,分析过滤原则
在第17行中发现,我们可以看到尖括号被转义,双引号被转义,单引号没事,关键字也没事,大写变小写,同时语句采用双引号闭合
在第20行中发现,参数被传递到herf参数中,但此处显示链接不合法,没有说具体怎么不合法,我们需要去试错
尝试使用上一关的payload注入查看回显
依旧显示链接不合法
由于回显中是链接不合法,所以尝试在前面加入http://
发现链接合法,输入的参数也赋给了herf,但是http在开头的话会导致我们的代码无法执行,所以尝试将其放在代码内部,构建payload:
javascript:alert('http://')
成功注入
6.pass 10
进入界面发现没有输入框进行注入,观察url,发现注入点为get直接传参,输入测试语句
发现第15行中的尖括号被转义,双引号被转义,单引号没事,关键字也没事,大写没有转化为小写,同时语句为双引号闭合
另外在第17,18,19行,发现另外三个隐藏输入参数,分别是:t_link,t_history,t_sort
分别将测试语句注入三个参数,观察过滤原则:
t_link,t_history两个值无法传入参数
t_sort中尖括号被过滤,其余没事,参数采用双引号闭合
由于<>被过滤,所以考虑不带尖括号的事件进行注入,构建payload:
"onmouseover="alert(/zbpyy/)
发现事件无法触发,导致注入失败,修改payload:
"type="button"onmouseover="alert(/zbpyy/)
加入"type="button"修改type属性为按钮方便事件触发
当光标移至按钮时,注入成功
7.pass 11
依旧是get传参,输入测试语句
发现第15行中尖括号和双引号都被转义、单引号没事、关键字没事,大写没有转化为小写,同时语句采用双引号闭合
另外在第17,18,19,20行,发现另外四个输入参数,分别是t_link、t_history、t_sort、t_ref
分别将测试语句注入四个参数,观察过滤原则:
当给t_link,t_history和t_ref三个值无法传入参数
t_sort中尖括号和双引号都被转义、单引号没事、关键字没事,大写没有转化为小写,同时语句采用双引号闭合
由于语句采用了双引号闭合和双引号过滤,所以没办法通过t_sort和keyword两个值进行注入
所以考虑其他值,由于直接传参不显示,可能是因为不是get传参,使用hackbar尝试post传参
尝试之后依旧无法显示,猜测可能是有可能是http的头部信息,所以使用burp抓包查看
在burp中host下加入一句referer:<script " ’ Oonn>,之后放包查看源代码
发现成功传入了t_ref的值,并且没有任何过滤,构建payload:
referer:"type="button" onmouseover="alert(/zbpyy/)
页面出现按钮,聚焦后成功注入
8.pass 12
输入测试语句
在第15行可以发现,尖括号和双引号被转义,单引号没事,关键字也没事,大写没有转化为小写,同时可以发现语句采用双引号闭合
在第17,18,19,20行发现四个输入参数,分别是t_link,t_history,t_sort,t_ua
由于语句也采用了双引号闭合和双引号过滤,所以猜测与上一题思路一致,同时看到t_ua后面的值,属于User-Agent参数,所以使用brup修改头文件来进行注入
修改http请求头消息,将拦截到的请求修改User-Agent参数为<script " ’ Oonn>,发送后查看源码
发现只过滤了尖括号,构建payload:
User-Agent:"type="button" onmouseover="alert(/zbpyy/)
页面出现按钮,聚焦后成功注入
9.pass 13
输入测试语句
在第15行中可以发现,尖括号和双引号都被转义,单引号和关键字没事,大写没有转化为小写,同时语句采用双引号闭合
在第17,18,19,20行发现四个输入参数,分别是t_link,t_sort,t_history,t_cook,
由于语句也采用了双引号闭合和双引号过滤,所以猜测t_cook参数应该是通过cookie进行注入
修改http请求头信息,将请求中cookie参数中的user值为<script" ’ Oonn>,发送后查看源码
发现还是只过滤了尖括号,构建payload:
user="type="button" onmouseover="alert(/zbpyy/)
页面出现按钮,聚焦后成功注入
10.pass 14
11.pass 15
输入测试语句
在16行中可以发现我们的值被传入到了<span>标签中,其中尖括号和双引号都被转义,单引号和关键字没事,大写没有转化为小写,同时语句采用双引号闭合
在<span>标签中,ng-include 指令用于包含外部的 HTML 文件,包含的内容将作为指定元素的子节点,ng-include 属性的值可以是一个表达式,返回一个文件名
我们可以尝试包涵第一关,输入语句:
要注意的是:ng-include,如果单纯指定地址,必须要加引号
?src='level1.php'
这里已经成功将第一关给包含进来了,那么就可以根据第一关来构建payload:
要注意的是span标签中的过滤原则
?src='level1.php?name=<img src=1 onmouseover=alert(zbpyy)>'
聚焦出现的图片成功注入
12.pass 16
输入测试语句
在15行中可以发现将将script替换成了空格,最后将空格给实体化了,同时大写变成了小写,其余符号没变
所以想到使用其余标签注入,构建payload:
?keyword=<img src=1 onmouseover=alert(/zbpyy/)>
由于这道题将空格给实体化了,所以我们需要将空格提前进行urrl编码来绕过实体化,也就是使用%20来代替:
?keyword=<img%20src=1%20onmouseover=alert(/zbpyy/)>
发现依旧被实体化了,所以想到空格可以用回车来代替,回车的url编码是%0a,继续改进payload:
?keyword=<img%0Asrc=1%0Aonerror=alert(1)>
注入成功
13.pass 17
由于edge浏览器不支持flash插件,所以我们这里采用修改后端代码的方式来解决。将后端第十七关的代码(level17.php)指向的swf文件改为index.png,就可以正常显示了
输入测试语句
在17行中发现,传入的参数都出现在了embed标签中,并且将双引号和尖括号进行了转义,其他没变,构建payload:
?arg02= onclick=alert(/zbpyy/)
点击后出现弹窗,注入成功
14.pass 18
源码跟上一关差别不大,就是换了个swf文件,构建payload
?arg02= onclick=alert(/zbpyy/)
出现弹窗,注入成功