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靶场了,点击图片开始吧

level 1

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

直接在url处输入name的参数即可

payload:<script>alert(1)</script> 

level 2 

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

查看源码:

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

解题:

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

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

然后鼠标移动到搜索框

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

闭合标签1">

payload:1"><script>alert(1)</script>

level 3

用第二关的方法发现不行

查看源码:

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

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

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

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

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

然后鼠标点一下搜索框

level 4

直接看源码吧:

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

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

level 5

查看源码:

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

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

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

payload:"></input><a href='javascript:alert(1)'>asd</a>(不唯一)

再点一下asd

level 6

查看源码:

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

payload:"> <SCript>alert(1)</SCript> <"(<"可省略,不唯一)

level 7

看源码看源码:

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

payload:"> <a hrehreff=javasscriptcript:alert(1)>xxx</a>

再点一下xxx

或者payload:"> <scscriptript>alert(1)</scscriptript>

level 8

还是看源码:

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

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

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

选择Unicode转换ASCII

所以payload为:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

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

level 9

 查看源码: 

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

补充知识:

解法:在上一关用编码绕过script验证的基础上后面加//http://(第一个//把后面内容注释掉)

payload:

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

添加完点击“友情链接”

level 10

查看源码:

前端代码:

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

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

构造payload:

?keyword=<script>alert('xss')</script>&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"

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

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

payload:

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

然后鼠标移动到搜索框

或者:

?keyword=<script>alert('xss')</script>&t_sort=" type="text" οnclick="alert('xss')

然后鼠标点一下搜索框

level 11

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

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

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

构造payload:

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

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

再查看源码:

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

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

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

bp抓包

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

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

接着将这个请求的响应放行到浏览器试试。

 鼠标点一下搜索框

level 12

先看前端源码:

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

查看源码验证一下:

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

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

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

然后放包,点一下搜索框 

level 13

查前端代码:

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

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

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

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

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

level 14

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

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

level 15

直接看源码:

分析:此处用了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=<img src= ""οnerrοr=alert(1)>'

level 16

查看源码:

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

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

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

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

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

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

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

level 17

什么b玩意儿,吓我一跳

看看源码看看源码:

提到了embed,它是什么?

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

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

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

再动一下鼠标就行了

level 18

怎么进入18关?

17关往下翻。。。。。

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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值