XSS 跨站脚本攻击
漏洞概述
跨站点脚本(Cross Site Scripting, XSS)是指客户端代码注入攻击,攻击者可以在合法网站或Web 应用程序中执行恶意脚本。当web 应用程序 在其生成的输出中使用未经验证或未编码的用户输入时,就会发生XSS
跨站脚本攻击,XSS (Cross Site Scripting)。由于与CSS (Cascading Style Sheet) 重名,所以就更名为XSS。
XSS 作为OWASP TOP 10(2017)内容之一,主要使用JavaSript 来完成恶意攻击的行为,JS 可以非常灵活的操纵HTML、CSS、浏览器,这就使 得XSS 攻击“想象”空间非常大。也就是说,JS 强大的灵活性和功能,为XSS 攻击提供了非常广阔的攻击面。
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
XSS 漏洞原理
攻击模型
XSS 通过将精心构造的代码(JavaScript)注入到网页中,并由浏览器解释运行这段JS 代码,以达到恶意攻击的效果。当用户访问被 XSS 脚本注 入过的网页,XSS 脚本就会被提取出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了。
整个XSS 攻击过程,涉及三个角色:
- 服务器
- 攻击者
- 客户端浏览器用户(前端)
注意:
- 搜索框、登录框、微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS 代码,都存在遭受XSS 的风险。
- 等待受害者访问被注入恶意代码的页面,很被动,盲打。
- XSS 攻击目标是客户端浏览器用户,由于浏览器的类别不同,攻击效果不同,甚至于同一款浏览器,攻击效果都不一样。
危害
XSS 是利用JS 代码实现攻击,有很多危害:
- 盗取各种用户账号;
- 窃取用户Cookie 资料,冒充用户身份进入网站;
- 劫持用户会话执行任意操作;
- 刷流量,执行弹窗广告;
- 传播蠕虫病毒;
- …
XSS 漏洞验证
POC
<script>alert(/xss/);</script>
<script>confirm(/xss/);</script>
<script>confirm('xss');</script>
<script>prompt('xss');</script>
如果页面弹窗,浏览器把用户提交的字符串当做JS 来执行,并且执行成功,说明XSS 漏洞存在。
XSS 漏洞分类
- 反射型XSS
- 存储型XSS
- DOM 型XSS
反射型XSS
非持久性、参数型的跨站脚本。反射型XSS 的代码在Web 应用的参数中,例如搜索框的反射型XSS。
http://10.4.7.130/cms/search.php?
keywords=%3Cscript%3Ealert%28%2Fxss%2F%29%3C%2Fscript%3E&button=%E6%90%9C%E7%B4%A2
容易被发现,利用难度高,很多漏洞提交平台不收反射型XSS 漏洞。
存储型XSS
持久性跨站脚本。持久性体现在XSS 代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS 通常发 生在留言板等地方,可以在留言板位置进行留言,将恶意代码写进数据库中。
危害面比较广,漏洞提交平台会接收此类漏洞。
DOM 型XSS
DOM 型XSS 是一种XSS 攻击,其中攻击的代码是由于修改受害者浏览器页面的DOM 树而执行的。特殊的地方就是攻击代码(payload) 在浏览器本 地修改DOM 树而执行,并不会将payload 上传到服务器,这也使得DOM 型XSS 比较难以检测。
http://10.4.7.130/xss_test/DOM-XSS/?message=%3Cscript%3Ealert(/xss/)%3C/script%3E
http://10.4.7.130/xss_test/DOM-XSS/#message=%3Cscript%3Ealert(/xss/)%3C/script%3E
注意:
- 修改DOM 树执行;
- 采用# 号的方式,参数不会提交到服务器。
反射型 XSS 攻击原理示例
环境准备
注释掉 cms 源码中 search.php 中的过滤语句
演示
在搜索框输入 JavaScript 代码,浏览器会解释执行
<script>alert("gjl");</script>
XSS 代码会显示在网站的参数中
http://10.9.47.148/cms/search.php?keywords=%3Cscript%3Ealert%28%22gjl%22%29%3B%3C%2Fscript%3E&button=%E6%90%9C%E7%B4%A2
存储型 XSS 攻击原理示例
在留言板等可以在数据库存储的地方写入 XSS 脚本,等待其他用户访问时触发
当管理员上线,点击“留言管理”时,触发 JavaScript 代码