0x01 简介
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
0x01 反射型xss(get)
可以看到123的字号明显是要大一些的,说明这里的语句是被有效执行了的。
弹个窗试试:
<script>alert('Asson');</script>
也是OK的,确定这里有XSS漏洞了,搞个XSS平台的payload试下。
顺利拿到cookie。
0x02 反射型xss(post)
这里看到题目为POST方式的反射型XSS,看到POST,就掏出大宝贝burpsuite以示尊敬吧。
首先按照提示使用admin/123456进行登录。页面来到了一个搜索框,我们秉承着有框就打的菜鸟精神,输入<script>alert('Asson');</script>
试下效果
弹窗了,试试xss平台的语句。
也是没有问题的,因为打开了burpsuite,所以它的爬虫一直在爬这个页面,因此才收到了这么多的回传消息。
不过这关好像不关burpsuite什么事~
0x03 存储型xss
存储型XSS的危害可就严重了,payload会被存到服务器上,导致每个访问此页面的用户都会收到攻击。
这里还是<script>alert('Asson');</script>
演示下效果就好。
换个浏览器访问该页面也是弹窗的,足以说明此漏洞的危害性有多大。
0x04 DOM型xss
dom型xss其实是一种特殊的反射型xss,秉承着有框就打的原则,先试一下这里是否存在xss漏洞。
页面是显示了一部分内容的,并且我们看到xss语句已经写进了HTML里面,所以此处是存在xss漏洞的。
观察下HTML中的语句,这里是需要进行闭合后能够构造攻击语句的。
'><src='a' onclick="javascript:alert('Asson');">
注意闭合符号应以页面源代码中的为准,所以此处为单引号闭合。点击超链接即可弹窗。'><src='a' onmouseover="javascript:alert('Asson');">
或者使用onmouseover事件,鼠标移动到超链接处也可弹窗,这都是可以根据实际情况自由选择的。0x05 DOM型xss-x
其实没太明白dom型xss-x和dom型xss的区别,网上查了下资料也没有啥有用的信息,这里可能只是皮卡丘靶场的关卡命名。仔细看下的话,是能看到dom型xss-x的payload是可以写到url中的,这样是可以构造恶意url诱使用户访问。
其余的话没感受太大的区别,使用上一关的payload也能正常弹窗。
0x06 xss盲打
xss盲打的准则就是见框就打,虽然我不知道攻击语句能不能生效,但我就是不顾一切的在留言板、意见反馈等功能点见框就插,万一呢~
登录皮卡丘靶场后台可以看到有弹窗出现。
0x07 xss之过滤
看到过滤,就先试了下<>和script都没被过滤,但两者合在一起<script>就被过滤了,因此这关就不能使用script标签来构造攻击语句了。
我们可以发现我们输入的内容还是会显示在页面上,因此我们构造一个错误的img src标签使其报错后执行onerror事件即可触发xss。
'><img src='a' onerror="alert('Asson');">
这里用onclick或者onmouseover事件其实也是OK的。
0x08 xss之htmlspecialchars
看标题就知道这里是使用HTML实体编码转义了<>符号,输入<'">发现除了单引号之外,尖括号和双引号都是被转义了的。
万幸页面会将我们输入的内容以超链接的方式显示出来,因此这里是有一个a标签的,我们可以利用这点来构造xss语句。
'onclick='alert(/Asson/)'
0x09 xss之href输出
随便输入一点内容后按下F12看下HTML语句,发现是一个a标签,然后将用户输入的内容拼接a标签后面,那就简单了。
javascript:alert(/Asson/)
0x10 xss之js输出
按照关卡提示输入tmac,出来了一句话+麦迪的图片。按照关卡名字推断,这一关是使用js来处理用户输入的内容,那么肯定是存在<script>标签的。我们的思路是想办法闭合掉前面的script标签,然后再构造攻击语句。
tmac</script><script>alert(/Asson/)</script>
成功。
0x11 防御
xss漏洞的防御方法应该从输入和输入进行考虑:
- 过滤输入的数据,对例如:单引号、双引号、尖括号、 on*事件、script、iframe等危险字符进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
- 不仅验证数据的类型,还要验证其格式、长度、范围和内容。
- 不仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
- 对输出到页面的数据进行相应的编码转换,如HTML实体编码、JS编码等。对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行检查。
本文仅为个人学习时所作笔记,非标准答案,文中如有错误,烦请各位师傅批评指正。