目录
一、XSS基础概念
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
XSS主要分为DOM型、反射性、存储型其中存储型漏洞为还是最致命的。
二、xss-labs-master靶场
这个靶场难度算是比较小的,非常适合新手练习。
level1
第一关我们直接添加<scrip>标签即可,h2标签可以解析<scrip>标签,这就是最简单的方法。
<scrip>alert(1)</script>
level2
第二关我们输入的内容杯传进了<input>标签之中了,我们可以用">闭合之后再使用<script>标签,话可以直接使用onclick来解决。
"><script>alert(1)</script>
"onclick="alert(1)
level3
第三关我们发现双引号跳不出循环了,换个闭合符'发现<>被编码了。所以我们只能使用onclick。
'onclick='alert(1)
level4
第四关发现双引号可以闭合,但是<>被替换了,所以我们就又想到onclick了。
"onclick="alert(1)
level5
我们发现on被替换了,我们需要绕过,script也被替换,我们用大小写发现也被绕过了,那我们可以使用javascript伪协议。
"><a href="javascript:alert(1)">aa</a>
level6
on被替换了,我们试一试大写绕过,发现可以,那就好办了。
"Onclick="alert(1)
level7
这一关我们发现on又被替换了,大小写也没用,再试一试双写吧,发现可以绕过。
"oonnclick="alert(1)
level8
我们可以看到我们文本框输入的内容传到这个友情链接里面了,并且还作为href参数了,这不是送分题吗,必然是伪协议啊,试一试发script现被替换了,那我们直接编码试试。
javascript:alert(1)
level9
我们发现这个跟上一关好像一样,但是一直显示我们的连接不合法,那百度总合法吧,试一试https://www.baidu.com,和法了,最后发现输入的必须要有http://。那我们把伪协议下载前面http://写在后面,并且让http://失效,那注释掉就好了。试一试
javascript:alert(1)/*http://*/
level10
我们发现现在没有文本框了,但是又还有三个变量我们一起来试一试传入对应的变量看有什么变化。
t_sort的值被传进来了,那么我们就改变它的类型,改为text,再加一个点击事件不就可以了吗。
t_link=aaaaaa&t_sort=aaaaaaaaa" type="text" onclick="alert(1)&t_history=aaaaaaa
level11
这看起来跟上一关差不多,并且t_ref还有一串值,那就先试一试给四个变量都传参看看有什么变化,发现不仅之没有传进来,t_ref的值还没有了。这是咋回事,我们得研究一下最开始t_ref的值是什么东西。其实这是Referer,在HTTP请求中,Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。那么我们改一下它的值不就可以了。
level12
发现这一关又有一个莫名期末的值,这其实是user agent,那还是上一关方法一样。
level13
这一关又有几个参数,但没有值,那就先试试给这几个变量传一下参数,发现没有用,我们去源码看一下。
我们发现了cookie,这个我们一定要注意,存储型xss攻击就可以拿到管理员的cookie,进行免账号免密码登录。那我们就用user变量传入cookie。
三、总结
这个靶场比较基础,主要就是一些简单的防御规则,我们可以使用大小写、双写、伪协议、编码都能解决。练好这个靶场之后可以去试试xss.haozi.me靶场,见见更多的类型。