Pikachu靶场通关实录-XSS篇

0x01 简介

XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。


0x01 反射型xss(get)

可以看到123的字号明显是要大一些的,说明这里的语句是被有效执行了的。

image.png

弹个窗试试:<script>alert('Asson');</script>
image.png

也是OK的,确定这里有XSS漏洞了,搞个XSS平台的payload试下。
image.png

顺利拿到cookie。


0x02 反射型xss(post)

这里看到题目为POST方式的反射型XSS,看到POST,就掏出大宝贝burpsuite以示尊敬吧。
首先按照提示使用admin/123456进行登录。页面来到了一个搜索框,我们秉承着有框就打的菜鸟精神,输入<script>alert('Asson');</script>试下效果

image.png

弹窗了,试试xss平台的语句。
image.png

也是没有问题的,因为打开了burpsuite,所以它的爬虫一直在爬这个页面,因此才收到了这么多的回传消息。
不过这关好像不关burpsuite什么事~


0x03 存储型xss

存储型XSS的危害可就严重了,payload会被存到服务器上,导致每个访问此页面的用户都会收到攻击。
这里还是<script>alert('Asson');</script>演示下效果就好。

image.png

换个浏览器访问该页面也是弹窗的,足以说明此漏洞的危害性有多大。
image.png


0x04 DOM型xss

dom型xss其实是一种特殊的反射型xss,秉承着有框就打的原则,先试一下这里是否存在xss漏洞。

image.png

页面是显示了一部分内容的,并且我们看到xss语句已经写进了HTML里面,所以此处是存在xss漏洞的。
观察下HTML中的语句,这里是需要进行闭合后能够构造攻击语句的。
'><src='a' onclick="javascript:alert('Asson');">注意闭合符号应以页面源代码中的为准,所以此处为单引号闭合。点击超链接即可弹窗。
image.png

'><src='a' onmouseover="javascript:alert('Asson');">或者使用onmouseover事件,鼠标移动到超链接处也可弹窗,这都是可以根据实际情况自由选择的。
image.png


0x05 DOM型xss-x

其实没太明白dom型xss-x和dom型xss的区别,网上查了下资料也没有啥有用的信息,这里可能只是皮卡丘靶场的关卡命名。仔细看下的话,是能看到dom型xss-x的payload是可以写到url中的,这样是可以构造恶意url诱使用户访问。
其余的话没感受太大的区别,使用上一关的payload也能正常弹窗。


image.png

0x06 xss盲打

xss盲打的准则就是见框就打,虽然我不知道攻击语句能不能生效,但我就是不顾一切的在留言板、意见反馈等功能点见框就插,万一呢~
登录皮卡丘靶场后台可以看到有弹窗出现。


image.png

0x07 xss之过滤

看到过滤,就先试了下<>和script都没被过滤,但两者合在一起<script>就被过滤了,因此这关就不能使用script标签来构造攻击语句了。
我们可以发现我们输入的内容还是会显示在页面上,因此我们构造一个错误的img src标签使其报错后执行onerror事件即可触发xss。
'><img src='a' onerror="alert('Asson');">

image.png

这里用onclick或者onmouseover事件其实也是OK的。


0x08 xss之htmlspecialchars

看标题就知道这里是使用HTML实体编码转义了<>符号,输入<'">发现除了单引号之外,尖括号和双引号都是被转义了的。

HTML实体编码

万幸页面会将我们输入的内容以超链接的方式显示出来,因此这里是有一个a标签的,我们可以利用这点来构造xss语句。
image.png

'onclick='alert(/Asson/)'
image.png


0x09 xss之href输出

随便输入一点内容后按下F12看下HTML语句,发现是一个a标签,然后将用户输入的内容拼接a标签后面,那就简单了。
javascript:alert(/Asson/)

image.png


0x10 xss之js输出

按照关卡提示输入tmac,出来了一句话+麦迪的图片。按照关卡名字推断,这一关是使用js来处理用户输入的内容,那么肯定是存在<script>标签的。我们的思路是想办法闭合掉前面的script标签,然后再构造攻击语句。

image.png

tmac</script><script>alert(/Asson/)</script>
image.png

成功。


0x11 防御

xss漏洞的防御方法应该从输入和输入进行考虑:

  • 过滤输入的数据,对例如:单引号、双引号、尖括号、 on*事件、script、iframe等危险字符进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
  • 不仅验证数据的类型,还要验证其格式、长度、范围和内容。
  • 不仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
  • 对输出到页面的数据进行相应的编码转换,如HTML实体编码、JS编码等。对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行检查。

本文仅为个人学习时所作笔记,非标准答案,文中如有错误,烦请各位师傅批评指正。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容