【翻译+题解】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);
  • 返回客户端的任何数据字段都有可能被注入

     <script>alert("XSS Test")</script>

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

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

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

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

答:yes

3

最常见的位置

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

  • 反馈用户数据的输入框

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

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

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

    • 留言板

    • 自由格式注释

  • HTTP 标头

4

我们为什么要关注?

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

  • 创建虚假请求

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

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

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

  • 窃取机密信息

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

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

     <img src="http://malicious.site.com/image.jpg/>">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 处填写<script>alert('cybersecurity')</script><script>console.log('cybersecurity')</script>

8

自身 XSS 还是反射 XSS?

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

为什么会这样?

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

/WebGoat/CrossSiteScripting/attack5a?QTY1=1&QTY2=1&QTY3=1&QTY4=1&field1=<script>alert('my%20javascript%20here')</script>4128+3214+0002+1999&field2=111

9

反射式 XSS 和基于 DOM 的 XSS

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

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

  • 受害者点击链接

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

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

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

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

受害者没有意识到攻击的发生......恶意攻击者不会使用 <script>alert('xss')</ script>

10

识别基于 DOM 的 XSS 的潜力

基于 DOM 的 XSS 通常可以通过查找客户端代码中的路由配置来发现。查找接收 "反射 "到页面的输入的路由。

在本例中,您需要在路由处理程序中查找一些 "test "代码(WebGoat 使用 backbone 作为其主要 JavaScript 库)。有时,测试代码会被留在生产环境中(而且通常测试代码非常简单,缺乏安全性或任何质量控制!)。

您的目标是找到路径并加以利用。首先......基本路由是什么?举例来说,请查看本课的 URL......它应该类似于 /WebGoat/start.mvc#lesson/CrossSiteScripting.lesson/9。这里的 "基本路由 "是:start.mvc#lesson/ 后面的 CrossSiteScripting.lesson/9 是 JavaScript 路由处理程序要处理的参数。

那么,生产过程中留在应用程序中的测试代码的路由是什么呢?要回答这个问题,必须查看 JavaScript 源代码。

答:start.mvc#test/

11

试试看 基于 DOM 的 XSS

有些攻击是 "盲目 "的。幸运的是,您的服务器正在运行,因此您可以判断是否成功。使用您刚刚找到的路由,看看您是否可以利用它反映了路由参数的事实,即不使用编码来执行 WebGoat 中的内部函数。您要执行的函数是 ...

webgoat.customjs.phoneHome()

当然,你可以使用控制台/调试来触发它,但你需要通过新标签页中的 URL 来触发它。

一旦你触发了它,浏览器控制台就会收到一个后续响应,其中包含一个随机数。将随机数输入到下面。

答:访问http://127.0.0.1:8080/WebGoat/start.mvc#test/%3Cscript%3Ewebgoat.customjs.phoneHome()%3C%2Fscript%3E,在console的log中获取随机数。

12

  1. Solution 4

  2. Solution 3

  3. Solution 1

  4. Solution 2

  5. Solution 4

  • 42
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值