目录
前言
XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的网络安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,脚本会在其浏览器中执行,从而实施攻击。
作为一种HTML注入攻击,XSS攻击的核心思想就是在HTML页面中注入恶意代码,而XSS采用的注入方式是非常巧妙的。在XSS攻击中,一般有三个角色参与:攻击者、目标服务器、受害者的浏览器。
由于有的服务器并没有对用户的输入进行安全方面的验证,攻击者就可以很容易地通过正常的输入手段,夹带进一些恶意的HTML脚本代码。当受害者的浏览器访 问目标服务器上被注入恶意脚本的页面后,由于它对目标服务器的信任,这段恶意脚本的执行不会受到什么阻碍。而此时,攻击者的目的就已经达到了。
xss-labs下载地址:GitHub - do0dl3/xss-labsGitHub - do0dl3/xss-labs: xss 跨站漏洞平台
Level 1
先看源码:
没啥过滤,先试一下
在name处写什么就显示什么
直接插入
Level 2
先直接插入
没有成功,看源码
发现这个方法htmlspecialchars,在官方文档中知道是实体转义的功能
发现这个没被转义
想到了可以闭合双引号
成功
Level 3
先试试水
没动静,查看网页源码
发现value没有值,猜测可能是被转义了,查看源代码
果然被转义了
查看官方文档发现htmlspecialchars只针对大于小于号,单双引号,&号实体转义,那么我们可以通过其他方法来实现目标,这里我用onclick事件绕过
我们可以发现这是使用单引号闭合,开始构造payload
发现已经构造成功
再次点击输入框即可
Level 4
查看源代码
发现过滤了大于小于号,用的双引号闭合
可以用上一关的方法
闭合成功
再次点击输入框
通关
Level 5
看源码
发现过滤了js标签和on关键字,还有大小写转换,那么上面的方法行不通了。虽然用不了on标签,但是a标签没被过滤,我们可以尝试使用a标签来绕过
"> <a href=javascript:alert(1)>a</a>
点击链接
成功
Level 6
看源码
过滤了很多关键字,但没过滤大小写,可以尝试用大小写绕过
成功
Level 7
看源码
不难发现这是将关键字置换成空
那么我们可以尝试用双拼来绕过
"> <a hrehreff=javascripscriptt:alert(1)>aaa</a>
点击aaa
通过
Level 8
源码
这一关较上一关过滤的更多,这次我们可以使用href的隐藏属性自动Unicode解码
https://www.matools.com/code-convert-unicode
在href这插入一段代码
javascript:alert(1)
接着复制到href后
点击友情链接
成功
Level 9
源码
这一关较上一关多了一个判断,如果传入的值没有http://,那么就判断不合法
所以我们需要在传入的值中加入http://,并注释掉它
点击友情链接
成功
Level 10
源码
可以发现这里是用t_sort代替了get传参,并且还过滤了尖括号,但我们还可以用onclick方法,因为输入框被隐藏了,我们添加type="text"
点击输入框
成功
Level 11
源码
发现较上一关增加了这个t_ref,并且是用referer传参
http请求头中的referer字段header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
查看源码,在referer处添加payload
点击输入框
成功
Level 12
源码
这一关是用的User-Agent头,那么跟上一关一样,构造payload
点击输入框
成功
Level 13
源码
这关看起来是cookie头,尝试一下
成功显示出输入框,注意:这一关用user传参,所以在写payload时要在前面加user
点击输入框
成功