XSS-labs靶场通关

目录

level 1

​level 2 

level 3

level 4

level 5

level 6

level 7

level 8

level 9

level 10

level 11

level 12

level 13

level 14

level 15

level 16

level 17

level 18


今天就要开始打xss-labs靶场了,点击图片开始吧

XSS-labs靶场通关_第1张图片

level 1

XSS-labs靶场通关_第2张图片

查看源码发现没有做任何的过滤

XSS-labs靶场通关_第3张图片直接在url处输入name的参数即可

payload: 

XSS-labs靶场通关_第4张图片level 2 

XSS-labs靶场通关_第5张图片

我们输入一些简单的赋值,如“666”啥的,都只会回显“没有找到和什么什么相关的结果”

查看源码:

XSS-labs靶场通关_第6张图片

分析:输入keyword后,会有两次输出,第一次.htmlspecialchars()所过滤,所以才只输出“没有找到和什么什么相关的结果,而第二次在表单中input输出,没有进行过滤,因此,可以在第二次的输出插入xss语句。

解题:

方法一:不逃逸input标签闭合前边的双引号加个事件触发xss

payload:" οnmοusemοve="alert(1)

然后鼠标移动到搜索框

XSS-labs靶场通关_第7张图片

方法二:逃逸出input标签执行另外的标签触发xss

闭合标签1">

payload:1">

XSS-labs靶场通关_第8张图片

level 3

XSS-labs靶场通关_第9张图片

用第二关的方法发现不行

查看源码:

XSS-labs靶场通关_第10张图片分析:这次它将两个输出都做了htmlspecialchars()转义,那么双引号和尖括号就没有效果了,但是单引号在这个函数中如果没做特殊的改动,而且源码中的value是用单引号,看来本体题的解法就从用单引号闭合标签入手。

每关的解法都不唯一,这里演示两种 

方法一:payload:' οnmοuseοver='alert(1)

然后鼠标移动到搜索框(第二关的方法一把双引号换成单引号)

XSS-labs靶场通关_第11张图片

方法二:payload:' onclick ='javascript:alert(1)'

然后鼠标点一下搜索框

XSS-labs靶场通关_第12张图片

level 4

XSS-labs靶场通关_第13张图片

直接看源码吧:

XSS-labs靶场通关_第14张图片

分析:本关将<和>都替换成了空格,第一个str输出也用.htmlspecialchars()做了过滤,但不影响用''进行闭合

解法:上一关将所有的单引号变为双引号

XSS-labs靶场通关_第15张图片

XSS-labs靶场通关_第16张图片

level 5

XSS-labs靶场通关_第17张图片

查看源码:

XSS-labs靶场通关_第18张图片

分析:这次对on进行了过滤,但是没有对<>进行过滤,strtolower()的存在让输入的量全转为了小写,因此无法实现大小写的绕过,那就跳出input标签即可。

解法:构造a标签,利用a标签的href属性执行javascript

补充知识:href属性的意思是当标签被点击的时候,就会触发执行转跳,例如转跳到一个网站,我们因此可以触发执行一段js

payload:">asd(不唯一)

再点一下asd

XSS-labs靶场通关_第19张图片

level 6

XSS-labs靶场通关_第20张图片

查看源码:

XSS-labs靶场通关_第21张图片

分析:把刚才的很多解法都过滤了,但与上关不同的是,没有用strtolower()将输入的量全转为小写,因此可以使用大小写绕过

payload:"> <"(<"可省略,不唯一)

XSS-labs靶场通关_第22张图片

level 7

XSS-labs靶场通关_第23张图片

看源码看源码:

XSS-labs靶场通关_第24张图片

分析:很好,大小写过滤也不好使了,但是我们可以进行双写绕过嘿嘿

payload:"> xxx

再点一下xxx

XSS-labs靶场通关_第25张图片

或者payload:"> alert(1)

XSS-labs靶场通关_第26张图片

level 8

XSS-labs靶场通关_第27张图片

还是看源码:

XSS-labs靶场通关_第28张图片

分析:代码先是将字符转换为小写,然后过滤特殊字符和双引号,最后又加了一个转义函数输出,所以按常规方法绕过几乎不可能成功,代码处的添加友情链接是突破点,在input框中输入字符提交之后,在友情链接处会载入一个拼接后的a标签,javascript被过滤,所以可对其进行编码绕过。

我们这里把href的内容变成javascript:alert(1),而不涉及标签的修改,所以直接编码绕过

unicode解码工具直接上百度搜就行

选择Unicode转换ASCII

XSS-labs靶场通关_第29张图片

所以payload为:javascript:alert(1)

添加完点击“友情链接”即可 

XSS-labs靶场通关_第30张图片

level 9

XSS-labs靶场通关_第31张图片 查看源码: 

XSS-labs靶场通关_第32张图片

分析:这次在上一题的基础上加入了strpos()函数,如果在url中找到'http"那么会返回找到位置的位数,自然不会返回0也就不会等于false,那么输入框必须要输入合法的url即带有http的字符串,就可以绕过了。

补充知识:

XSS-labs靶场通关_第33张图片

payload:

javascript:alert(1)//http://

添加完点击“友情链接”XSS-labs靶场通关_第34张图片

level 10

XSS-labs靶场通关_第35张图片

查看源码:

XSS-labs靶场通关_第36张图片

前端代码:

XSS-labs靶场通关_第37张图片

分析:这里有三个标签的话,也就意味着是三个参数

看看哪一个标签能够被突破

构造payload:

?keyword=&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"

XSS-labs靶场通关_第38张图片

从页面响应来看,有一个标签的状态可以被改变。这个标签就是名为t_sort标签,之前都是隐藏状态,但是通过构造参数响应发现只有它里面的值被改变了。

因此可以从该标签进行突破,尝试能不能在url注入恶意代码进行弹窗。

payload:

?keyword=&t_sort=" type="text" οnmοusemοve="alert('xss')

然后鼠标移动到搜索框

XSS-labs靶场通关_第39张图片

或者:

?keyword=&t_sort=" type="text" οnclick="alert('xss')

然后鼠标点一下搜索框

XSS-labs靶场通关_第40张图片

level 11

XSS-labs靶场通关_第41张图片

先来看下前端源代码,又有四个货隐藏了

XSS-labs靶场通关_第42张图片

可以看到如同第十关一样有隐藏的表单,不同的是多了一个名为t_ref标签。

尝试用上一关的方法看看能不能从这几个标签进行突破注入代码。

构造payload:

?keyword=good job!&t_link="type="text&t_history="type="text&t_sort="type="text&t_ref="type="text

XSS-labs靶场通关_第43张图片

页面没有反应,下面的标签的状态也没有显现出来

再查看源码:

XSS-labs靶场通关_第44张图片

分析:原来t_sort仍然是接受参数值的,但是里面的双引号被编码了

这样浏览器只能正常显示字符但是却无法起到闭合的作用了。

再分析,先获得请求头的Refererer,然后过滤了尖括号后输出在了value处,我们还是闭合value然后使用onmouse或onclick值进行alert弹窗,hidden隐藏了表单,str与str00都被做了转义,可以对输出的$str33写xss语句

bp抓包

XSS-labs靶场通关_第45张图片

可以看到在原始的请求数据包中并没有referer这个请求头,那么我们可以自己给它加上

构造payload:referer:"type="text" οnclick="alert('xss')

XSS-labs靶场通关_第46张图片接着将这个请求的响应放行到浏览器试试。

 鼠标点一下搜索框

XSS-labs靶场通关_第47张图片

level 12

XSS-labs靶场通关_第48张图片

先看前端源码:

XSS-labs靶场通关_第49张图片

发现第4个标签是t_ua这样一个标签,并且其中的value属性的值怎么看起来那么像抓取数据包中User-Agent头的值?

查看源码验证一下:

XSS-labs靶场通关_第50张图片

果然,这就好办了,与上关不同的是,这次需要修改的是user-agent的值

bp抓包并在User-Agent作出如下修改

payload:"type="text" οnclick="alert('xss')

XSS-labs靶场通关_第51张图片

然后放包,点一下搜索框 

XSS-labs靶场通关_第52张图片

level 13

XSS-labs靶场通关_第53张图片

查前端代码:

XSS-labs靶场通关_第54张图片

这次又换了一个t_cook这个标签,我们猜测它应该还是跟http请求头有关

直接bp抓包,send to Repeater,发现它和cookie有关

又好办了,直接在cookie后面插入xss

payload:" οnfοcus=alert(/xss/) type="text

XSS-labs靶场通关_第55张图片

然后放包,记得点击搜索框

XSS-labs靶场通关_第56张图片

level 14

本关因iframe调用的文件地址失效,无法进行测试。

XSS-labs靶场通关_第57张图片

所以就不用浪费时间了。。。

level 15

XSS-labs靶场通关_第58张图片

直接看源码:

XSS-labs靶场通关_第59张图片

分析:此处用了ng-include指令的话,先了解一下其具体的用法。

1、ng-include 指令用于包含外部的 HTML文件。

2、包含的内容将作为指定元素的子节点。

3、ng-include 属性的值可以是一个表达式,返回一个文件名。

4、默认情况下,包含的文件需要包含在同一个域名下。

特别值得注意的几点如下:

1.ng-include,如果单纯指定地址,必须要加引号

2.ng-include,加载外部html,script标签中的内容不执行

3.ng-include,加载外部html中含有style标签样式可以识别

既然这里可以包含html文件,那么也就可以包含之前有过xss漏洞的源文件(我们可以包涵第一关并让第一关弹窗

payload:?src='level1.php?name='

XSS-labs靶场通关_第60张图片

level 16

XSS-labs靶场通关_第61张图片

查看源码:

XSS-labs靶场通关_第62张图片

分析:过滤不全面很好绕过

1.将参数值中的script替换成空格HTML实体

2.将参数值中的空格也替换成 空格HTML实体

3.将参数值中的/符号替换成 空格HTML实体

4.将参数中的空格替换成空格HTML实体

但是空格可以用回车来代替绕过,回车的url编码是%0a

payload:?keyword=img%0asrc="0"%0aοnerrοr=alert(1)>

XSS-labs靶场通关_第63张图片

level 17

XSS-labs靶场通关_第64张图片

什么b玩意儿,吓我一跳

看看源码看看源码:

XSS-labs靶场通关_第65张图片

提到了embed,它是什么?

XSS-labs靶场通关_第66张图片

其他可以传入的值都被做了实体化转义,无法闭合标签。但标签就是引入一个swf文件到浏览器端,并且它的src属性值没有添加引号,所以不用闭合

那么问题就在于embed标签本身可以在arg01或者arg02中加入事件去触发。对比发现,传入的参数都出现了embed标签上,所以就可以构造payload了:

payload:?arg01=a&arg02= οnmοuseοver=javascript:alert(1)

再动一下鼠标就行了

XSS-labs靶场通关_第67张图片

level 18

怎么进入18关?

17关往下翻。。。。。

XSS-labs靶场通关_第68张图片

但18关与17关通关方式一样。。。。

level19和level20不用做了,因为你进去是空白

你可能感兴趣的:(xss,网络安全)