【翻译+题解】WebGoat (A7) Cross Site Scripting (XSS) 跨站脚本

环境配置

Kali-Linux-2021 + WebGoat 8.2.2

1

概念

本课介绍什么是跨站脚本 (XSS),以及如何利用它来执行并非开发人员初衷的任务。

目标

  • 用户应基本了解什么是 XSS 及其工作原理

  • 用户将了解什么是反射 XSS

  • 用户将展示以下方面的知识

    • 反射 XSS 注入

    • 基于 DOM 的 XSS 注入

    2

    什么是 XSS?

    跨站脚本(通常也称为 XSS)是一种漏洞/缺陷,它允许将 html/脚本标记作为输入,未经编码或消毒就呈现在浏览器中。

    跨站脚本 (XSS) 是最普遍、最有害的网络应用程序安全问题

    虽然这种攻击有一个众所周知的简单防御方法,但在网络上仍有很多这样的事例。就修复而言,修复范围也往往是个问题。我们稍后将进一步讨论防御问题。

    XSS 影响巨大

    特别是随着 "富互联网应用 "越来越普遍,通过 JavaScript 链接的特权函数调用可能会受到威胁。如果保护不当,敏感数据(如您的身份验证 cookie)可能会被窃取并用于他人目的。

    快速示例:
    • 从浏览器(Chrome 浏览器、Firefox 浏览器)开发工具中的 JavaScript 控制台查看

       alert("XSS Test");
       alert(document.cookie);
    • 返回客户端的任何数据字段都有可能被注入

       

      试试看 使用Chrome浏览器或火狐浏览器

      • 打开第二个标签页,使用与当前页面相同的网址(或 WebGoat 实例中的任何网址)

      • 然后,在第二个标签页上打开浏览器开发工具,并打开 javascript 控制台。然后键入:alert(document.cookie); 。

        每个标签页上的 cookie 是否相同?

        答:yes

        3

        最常见的位置

        • 将搜索字符串反馈给用户的搜索字段

        • 反馈用户数据的输入框

        • 返回用户文本的错误信息

        • 包含用户提供的数据的隐藏字段

        • 任何显示用户提供数据的页面

          • 留言板

          • 自由格式注释

        • HTTP 标头

          4

          我们为什么要关注?

          XSS 攻击可能导致
          • 窃取会话 cookie

          • 创建虚假请求

          • 在页面上创建虚假字段以收集凭证

          • 将页面重定向到 "非友好 "网站

          • 创建伪装成有效用户的请求

          • 窃取机密信息

          • 在终端用户系统上执行恶意代码(活动脚本)

          • 插入敌对和不适当的内容

             ">GoodYear recommends buying     BridgeStone tires...
            XSS 攻击增加了网络钓鱼攻击的有效性

            URL 中使用有效域

            5

            XSS 类型

            反射式
            • 用户请求中的恶意内容在网络浏览器中显示给用户

            • 恶意内容从服务器响应后写入页面

            • 需要社会工程学

            • 在浏览器中以用户继承的浏览器权限运行

              基于 DOM(技术上也是反射式)
              • 客户端脚本使用用户请求中的恶意内容将 HTML 写入自己的页面

              • 类似于反射式 XSS

              • 利用用户在浏览器中继承的浏览器权限运行

                存储或持久
                • 恶意内容存储在服务器上(数据库、文件系统或其他对象中),随后在网络浏览器中向用户显示

                • 不需要社会工程学

                  6

                  反射 XSS 场景

                  • 攻击者向受害者发送恶意 URL

                  • 受害者点击链接加载恶意网页

                  • 在受害者的浏览器中执行嵌入在 URL 中的恶意脚本

                    • 脚本窃取敏感信息(如会话 ID)并发布给攻击者

                    受害者没有意识到攻击的发生

                    7

                    试试看 反射 XSS

                    这项任务的目标是确定哪个字段容易受到 XSS 的影响。

                    在服务器端验证所有输入始终是一种良好做法。当未经验证的用户输入被用于 HTTP 响应时,就会发生 XSS。在反射式 XSS 攻击中,攻击者可以制作一个带有攻击脚本的 URL,并将其发布到其他网站、通过电子邮件发送,或以其他方式让受害者点击。

                    使用 alert() 或 console.log() 方法是查找某个字段是否易受 XSS 攻击的简单方法。使用其中一个方法即可找出哪个字段存在漏洞。

                    答:在 Enter your credit card number 处填写

                    8

                    自身 XSS 还是反射 XSS?

                    通过上一个示例,您应该可以执行脚本。但此时,它将被视为 "自身 XSS"。

                    为什么会这样?

                    因为没有任何链接会触发 XSS。您可以自己试试看会发生什么......请访问

                    /WebGoat/CrossSiteScripting/attack5a?QTY1=1&QTY2=1&QTY3=1&QTY4=1&field1=4128+3214+0002+1999&field2=111

                    9

                    反射式 XSS 和基于 DOM 的 XSS

                    基于 DOM 的 XSS 是反射 XSS 的另一种形式。两者都是通过发送带有输入的链接触发的,而输入会被反射到浏览器。DOM 与 "传统 "反射 XSS 的区别在于,使用 DOM 时,有效载荷永远不会进入服务器。它只会由客户端处理。

                    • 攻击者向受害者发送恶意 URL

                    • 受害者点击链接

                    • 该链接可能会加载一个恶意网页或一个他们使用(登录?)的网页,该网页有一个易受攻击的路由/处理程序

                    • 如果是恶意网页,它可能会使用自己的 JavaScript 攻击另一个具有易受攻击路由/处理程序的网页/URL

                    • 有漏洞的网页会渲染有效载荷,并在该网页/网站的用户上下文中执行攻击

                    • 攻击者的恶意脚本可能以本地账户权限运行命令

                      受害者没有意识到攻击的发生......恶意攻击者不会使用