环境配置
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
-
Solution 4
-
Solution 3
-
Solution 1
-
Solution 2
-
Solution 4