• 【Web漏洞探索】跨站脚本漏洞



    请添加图片描述

    一、什么是跨站脚本漏洞

    跨站脚本(Cross-site scripting简称为"CSS",为避免与前端叠成样式表的缩写"CSS"冲突,故称为XSS)允许攻击者破坏用户与易受攻击的应用程序的交互。它允许攻击者绕过同源策略,该策略旨在将不同的网站相互隔离。跨站点脚本漏洞通常允许攻击者伪装成受害者用户,执行用户能够执行的任何操作,并访问用户的任何数据。如果受害者用户在应用程序中具有特权访问权限,那么攻击者可能能够完全控制应用程序的所有功能和数据。

    二、跨站脚本漏洞成因

    形成XSS漏洞的主要原因是程序对输入与输出的控制不够严格,导致精心构造的脚本输入后在输出到前端时被浏览器当作有效代码进行解析从而产生危害。

    一般XSS可以分为如下几种常见类型

    1. 反射性XSS

    交互的数据一般不存放于数据库中,是一次性的响应,所见即所得,一般出现在信息查询、显示页面等。

    1. 存储型XSS

    一般与数据库、文件之间存在数据交互,永久性存储,常出现在留言板、注册等界面。

    1. DOM型XSS

    DOM(Document Object Model)型XSS类似于反射型,漏洞存在于客户端代码而不是服务器端代码中,通过DOM操作前端代码输出的时候产生的问题。使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。

    请添加图片描述

    三、漏洞攻击利用手法

    XSS漏洞利用步骤

    1. 用户访问XSS页面,触发XSS脚本,服务器返回“带恶意JS”的页面
    2. 客户端执行脚本,发送窃取到的cookie
    3. 攻击者使用窃取到的cookie伪造用户登录,造成破坏

    XSS常用语句

    alert(xss)
    alert(xss) // 大小写绕过
    eval(atob('YWxlcnQoeHNzKQ==')) // 加密绕过
    javascript:alert(document.cookie) // javascript伪协议绕过
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    另外,HTML5引入了许多新标签,例如

    等,这些新标签所对应的属性,例如poster、autofocus、onerror、formaction及oninput等,都是可以用来构造跨站脚本漏洞代码的。

    反射型XSS

    反射型XSS是最简单的跨站点脚本。当应用程序接收到HTTP请求中的数据并以不安全的方式将该数据包含在即时响应中时,就会出现这种情况。

    攻击者通过电子邮件、XSS恶意平台回连等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。

    存储的XSS

    当应用程序从不受信任的来源接收数据并以不安全的方式将该数据包含在其以后的HTTP响应中时,就会出现存储型XSS(也称为持久性或二阶XSS)。

    往往存在于论坛、博客和留言板,攻击者在发帖时将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器后端存储中,当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。

    基于DOM的XSS

    基于DOM的XSS(也称为DOM XSS)在应用程序包含一些客户端JavaScript时出现,该JavaScript以不安全的方式处理来自不受信任源的数据,通常通过将数据写回DOM。

    用户请求一个经过专门设计的URL,其中包含XSS代码提交后。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。

    Cookie欺骗流程

    Cookie欺骗的具体流程如下

    • 使用XSS漏洞远程获取受害者的Cookie
    • 本地使用普通用户登录系统,服务器会在该普通用户的本地生成该用户对应的Cookie
    • HTTP头中存放用户对应的Cookie字段及Cookie值
    • 使用XSS获取的admin用户的Cookie值替换该处普通用户的Cookie值
    • 发送替换后的数据报文,admin用户登录成功

    四、修复以及预防

    加强对用户输入的验证

    对用户输入的特殊字符进行严格过滤,如'、"、<、>、/、*、;、+、-、&、|、(、)、and、or、select、union、drop、delete

    htmlspecialchars()

    htmlspecialchars()函数用于过滤XSS,把预定义的字符转换为HTML实体。

    htmlspecialchars(string,flags,character-set,double_encode)
    
    • 1

    第二个参数flags须注意,使用htmlspecialchars()函数不当仍然可以在过滤XSS时被绕过。由于flags参数对于引号的编码如下

    • ENT_COMPAT - 默认,仅编码双引号。
    • ENT_QUOTES - 编码双引号和单引号。
    • ENT_NOQUOTES - 不编码任何引号。

    Cookie防盗

    避免直接在cookie中泄露用户隐私,例如email、密码、账号信息等。其次通过使cookie和系统ip绑定来降低cookie泄露后的危险。这样攻击者得到的cookie没有实际价值,不能拿来重放。

    输出上编码数据

    在HTTP响应中输出用户可控数据时,对输出进行编码以防止其被解释为恶意内容。根据输出上下文,这可能需要应用HTMLURLJavaScriptCSS编码的组合。

    使用响应标头

    为防止HTTP响应中不包含任何HTMLJavaScript的XSS,可以使用Content-TypeX-Content-Type-Options标头来确保浏览器以这种方式响应。

    内容安全政策

    作为最后一道防线,可以使用内容安全策略(CSP,Content Security Policy)来降低仍然发生XSS漏洞的严重性。

    五、XSS和CSRF的区别

    定义

    XSS跨站脚本是一种网站应用程序的安全漏洞攻击,是代码注入的一种。允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。

    CSRF跨站请求伪造也被称为one-click attacksession riding,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,完成一些违背用户意愿的请求(如恶意发帖、删帖、改密码、发邮件等)。

    区别

    虽然这两个词常常一起出现,但他们的目的是不一样的。XSS更偏向于方法论,CSRF更偏向于一种形式,只要是伪造用户发起的请求,都可成为CSRF攻击。XSS是获取用户的凭证信息,而CSRF是直接利用。

    通常来说CSRF是由XSS实现的,所以CSRF时常也被称为XSRF(用XSS的方式实现伪造请求),但实现的方式不止一种,还可以直接通过命令行模式(敲命令来发起请求)直接伪造请求(只要通过合法验证即可)。

    XSS则更偏向于代码实现(即写一段拥有跨站请求功能的JavaScript脚本注入到一条帖子里,然后有用户访问了这个帖子,这就算是中了XSS攻击了),CSRF更偏向于一个攻击结果,只要发起了冒牌的请求就算是CSRF了。

    六、附录

    参考链接:
    https://portswigger.net/web-security/cross-site-scripting
    https://blog.csdn.net/qq_45590334/article/details/112263958
    https://mp.weixin.qq.com/s/CfeTI4jfHemV8cSASYCa0w
    https://ssthouse.github.io/visual-explain/#/list/domRender
    https://www.php.net/htmlspecialchars

  • 相关阅读:
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
    黑客赏金猎人平台之Immunefi
    Oracle 的成功无法复制,国产数据库该如何突破?
    QT tcp通信
    【分享】“飞书自建“在集简云平台集成应用的常见问题与解决方案
    python数据抓取方式
    【面试专线】【基础知识】【JAVA】基础(三)(简答版)
    web前端期末大作业:美食网站设计与实现——HTML+CSS+JavaScript休闲美食餐饮公司网站静态模板(6个页面)
    计算机类软件方向适合参加的比赛
    CH573-09-BLE蓝牙安卓应用二次开发——RISC-V内核BLE MCU快速开发教程
  • 原文地址:https://blog.csdn.net/kjcxmx/article/details/126133227