目录
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进行了过滤,但是没有对<>进行过滤,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为:javascript:alert(1)
添加完点击“友情链接”即可
level 9
查看源码:
分析:这次在上一题的基础上加入了strpos()函数,如果在url中找到'http"那么会返回找到位置的位数,自然不会返回0也就不会等于false,那么输入框必须要输入合法的url即带有http的字符串,就可以绕过了。
补充知识:
payload:
javascript:alert(1)//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不用做了,因为你进去是空白