XSS
概述
XSS是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
分类
- 反射型XSS
最普遍的类型。用户访问服务器-跨站链接-返回跨站代码
- 存储型XSS
攻击代码存储在服务端(数据库)
- dom型XSS
基于DOM的XSS漏洞是指受害者端的网页脚本在修改本地页面DOM环境时未进行合理的处置,而使得攻击脚本被执行。在整个攻击过程中,服务器响应的页面并没有发生变化,引起客户端脚本执行结果差异的原因是对本地DOM的恶意篡改利用.
危害
窃取管理员帐号或Cookie,入侵者可以冒充管理员的身份登录后台。使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。
窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作。
网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。
发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。
防御
1.对前端输入做过滤和编码:
2.对输出做过滤和编码:在变量值输出到前端的HTML时进行编码和转义;
3.给关键cookie使用http-only。
靶场演示:
第一关
先尝试插入最简单的xss payload<script>alert(1)</script>
发现其做了输入长度限制。
输入一个1,提交,发现url中出现如下情况
这里可以看出message控制的是输入的内容,尝试用payload替换1,回车
搞定
第二关
有个登录框,由于之前已获取账户名密码,直接输入登录后出现了下图场景
尝试直接输入payload
成功
第三关
留言中直接输入payload
提交
成功
第四关
尝试最简单的payload
并没反应
这个不行,尝试闭合
说明这种方法不行。可以试试js事件,比如<img src="1" onerror=alert(1)>
尝试闭合
搞定
第五关
输入上一关的通关payload
发现并没有弹窗,但是有一串文字超链接
点击
发现弹窗
搞定
第六关
标准的评论区/留言板功能
直接上payload
提交
无弹窗,只是说看法已收到
进入后台看看
输入用户名密码,登录后出现下图场景
搞定
第七关
人生当然苦短,但是为了不显得那么无趣,我决定干掉它。先上最简单的payload
提示如下:
尝试大小写混写绕过
成功
第八关
经查询,htmlspecialchars函数可将<和>实例化,从而使其失去原有的含义
所以我们可以不用<>,用事件法攻击
点击超链
出现弹窗
搞定
第九关
老规矩,从最简单的开始
点击后出现下图状况:
此方法不行。尝试大小写绕过,单双引号闭合均是如此。只好尝试伪协议法
提交,点击超链
搞定
第十关
不打篮球该怎么办呢?先输入个最简单的payload试试
没反应,没提示。看看源码
此处显示后面的标签和代码原有的标签形成了闭合。所以这里可以在payload前加上</script>
进行闭合。
搞定