webgoat通关流程
附带全通关传送门:https://www.cnblogs.com/lusuo/p/17825090.html
HTTP Basics
第一关(主要是介绍一些概念)
概念
这个课程介绍了理解浏览器和Web应用程序之间数据传输的基础知识,以及如何使用HTTP代理捕获请求/响应。
目标
用户应该通过操作上面的按钮来熟悉WebGoat的功能,以查看提示、显示HTTP请求参数、HTTP请求cookie和Java源代码。您还可以尝试第一次使用OWASP Zed Attack Proxy。
HTTP工作原理
所有HTTP交互都遵循相同的一般格式。每个客户端请求和服务器响应都有三个部分:请求或响应行、头部部分和实体正文。
客户端启动一个事务如下:
-
客户端联系服务器并发送文档请求。GET请求可以带有URL参数,这些参数将在Web访问日志中可用。
bashGET /index.html?param=value HTTP/1.0
-
接下来,客户端发送可选的头部信息,以通知服务器其配置和接受的文档格式。
bashUser-Agent: Mozilla/4.06 Accept: image/gif,image/jpeg, /
-
在POST请求中,用户提供的数据将跟随可选头部,不包含在POST URL中。
这些基础概念有助于理解HTTP请求和响应的结构以及数据传输的过程。这对于安全测试和理解Web应用程序非常重要。
第二关
翻译:
尝试一下!
在下面的输入字段中输入您的姓名,然后点击“Go!”以提交。服务器将接受请求,反转输入并将其显示回给用户,演示处理HTTP请求的基础知识。
第三关
测验
WebGoat在本课中使用了什么类型的HTTP命令。一根柱子或一条支线
HTTP命令是POST还是GET:
神奇的数字是什么?
第一个输入框通过点击"Go!"按钮然后观察浏览器URL的变化来判断是使用了POST请求还是GET请求。观察发现点击"Go!"按钮然后URL没有变化,所以判断为POST请求。
第二个输入框需要填写一个magic number,通过Burp Suite的Proxy功能截取请求,开启Proxy监听,然后点击"Go!"按钮,Burp Suite截取到的请求如下图,发现magic number为7。修改后放行即可通关。
HTTP Proxies(几个关都是介绍安装配置使用zap的我们这边使用burp suite所以不做过多解释可以参考官方文档)
什么是HTTP代理
HTTP代理是一种中间应用程序,它充当连接您的Web浏览器或其他网络应用程序与后端服务器之间的桥梁。通俗地说,它像是一个中转站,帮助您的计算机访问互联网,特别是在您的计算机没有直接连接到互联网时。HTTP代理还常用于应用程序测试,因为它们可以记录客户端发送到服务器的所有信息,包括请求和响应的头部以及XML、JSON或其他数据。代理会接收来自客户端的请求,然后转发它们到目标服务器,通常还会记录这些请求。它们就像是站在客户端和服务器之间的中间人。 HTTP代理可以与或无需HTTPS一起使用,只要您的客户端或浏览器信任HTTP代理的证书。在应用程序安全测试中,代理是非常有用的工具。
OWASP ZAP代理的能力包括记录和检查网络流量、修改从浏览器发送到服务器的请求和响应以及报告通过检查流量而检测到的各种已知漏洞。通常,在使用没有GUI的ZAP的持续交付流水线中,会使用被动和主动报告安全问题。在这里,我们将交互式地使用ZAP主要用于查看和修改请求,以查找漏洞并完成任务。ZAP具有图形用户界面,但现在还具有HUD(Heads-On-Display),它使用浏览器和ZAP代理之间的Web套接字连接。
接下来的页面可以让您浏览课程的各个部分,或者您可以点击链接跳过一些页面,根据您的需求选择学习内容。
直接看第五关
要拦截并修改请求,按照以下步骤操作:
-
在ZAP中设置拦截:
- 确保您已经运行OWASP ZAP,并将其配置为您的HTTP代理。
- 打开您之前从ZAP启动的Web浏览器(按照前面的说明操作)。
- 配置您的浏览器以使用ZAP作为代理。
-
提交表单/请求:
- 转到您希望拦截并修改请求的网页或表单。
- 填写表单或点击提交按钮以发起请求。
-
拦截请求:
- 当ZAP拦截到您的请求时(达到断点),ZAP将暂停请求以供您进行修改。
-
修改请求:
- 在ZAP界面中,您应该看到被拦截的请求。
- 要修改请求,请按照以下步骤进行:
- 将HTTP方法更改为GET。
- 添加一个新的头部,名称为'x-request-intercepted',值为'true'。
- 如果有请求正文,请删除它。
- 取而代之,添加一个查询字符串参数,名称为'changeMe',值为'Requests are tampered easily'(不包括单引号)。
-
让请求继续:
- 让请求继续(通过点击"play"按钮)。
两个"play"按钮的行为略有不同,您可以自行尝试和了解它们的不同之处。按以上我们使用burp suite来进行操作------burp suite开启拦截
修改完成后点击“Forward”提交修改后的请求即可通关
Developer Tools
第一关介绍
在完成某些任务时,您可能需要查看JavaScript源代码或自行运行JavaScript命令。为此,Google Chrome提供了一组工具,使您能够执行这些操作以及更多其他操作。尽管这些工具不仅限于Google Chrome,但几乎每个现代浏览器都拥有自己的一套类似工具。我们的介绍将重点介绍Google Chrome中的工具。但是,您仍然可以选择使用您喜欢的浏览器,如Firefox或Safari,尽管本教程的某些步骤可能会有所不同。
请记住,以下教程不旨在详尽介绍这些工具的所有内容。本教程仅关注完成特定任务所需的基本知识。另外,如果您已经熟悉这些工具,可以安全地跳过这些课程。
要开始使用:打开开发者工具。有多种方法可以打开它们:
- 在浏览器窗口中的任何位置右键单击,然后选择"检查"选项。
- 转到浏览器菜单(右上角的三个点),然后转到"更多工具",选择"开发者工具"选项。
- 使用键盘快捷键Ctrl + Shift + I。
第二关
元素选项卡
元素选项卡允许您查看用于定义和样式化网站的HTML和CSS代码。
-
HTML源代码:当您将鼠标悬停在某一行上时,您会看到网站的一部分变成了蓝色。这表示该HTML行定义了网站的这一部分。元素选项卡允许您更改每个单独的HTML元素。例如,如果您点击段落标签(
<p>...</p>
)内部,您可以编辑网站的内容。完成更改后,按回车键,Chrome将更新网站以显示您的编辑。您还可以更改使用的HTML标签、标签的类和ID等等。 -
CSS源代码:在HTML源代码下,您可以找到用于样式化网站的CSS信息。与HTML一样,您也可以编辑CSS,从而调整网站的样式。您可以编辑特定的值或关闭单个样式。
第三关
控制台选项卡
在控制台选项卡中,您可以查看已加载的JavaScript文件可能输出的任何内容。如果您看到红色的内容,请不要担心,虽然它是一个错误,但它可能已经解决了。通过控制台选项卡,您还可以运行自己的JavaScript代码。
首先,使用快捷键CTRL+L来清除控制台。
要运行您的JavaScript代码,在控制台内单击,然后输入类似以下内容的内容:console.log("Hello WebGoat!"); 按回车键。"Hello WebGoat"现在应该出现在您的控制台中。控制台还允许您进行一些基本的算术运算。例如,如果您键入1+3并按回车键,控制台应该显示4。
注意:您可能会在控制台中看到一个"undefined"。您可以安全地忽略这个声明,这只是意味着您调用的JavaScript函数没有返回任何内容,因此是"undefined"。
第四关
试试看!使用控制台
让我们来试试。使用开发者工具中的控制台,调用JavaScript函数 webgoat.customjs.phoneHome()
。 您应该在控制台中获得一个响应。您的结果应该类似于:phone home said {"lessonCompleted:true, … ,"output":"phone home response is…" 然后在下面的文本字段中粘贴这个随机数。(确保您获得的是最新的随机数,因为每次调用函数时都会随机生成)
复制粘贴到控制台提交即可(F12快捷打开)
第五关翻译
Sources 选项卡
在 Sources 选项卡中,您可以查看文件系统并查看用于创建网站的所有HTML、CSS和JavaScript文件。单击文件以查看其内容。
Network 选项卡
在 Network 选项卡中,您可以查看网站执行的HTTP请求和响应。只需单击特定请求,以获取更详细的信息。上方的"时间轴"显示了这些请求和响应的执行时间。您还可以通过单击并拖动时间轴来查看特定时间段内执行的请求。下方的窗口将只显示该时间段内执行的请求和响应。
第六关
试一试!使用 Network 选项卡
在这个任务中,您需要找到一个特定的HTTP请求并读取一个随机数。首先,点击第一个按钮。这将生成一个HTTP请求。尝试找到特定的HTTP请求。请求应该包含一个字段:networkNum:将其后显示的数字复制到下面的输入字段中,然后点击检查按钮。 点击此按钮发起请求
您找到的数字是什么:
CIA Triad
第一关
保密性
保密性是指“信息不向未经授权的个体、实体或过程公开或透露的属性”。换句话说,保密性要求未经授权的用户不应能够访问敏感资源。保密性必须与可用性平衡;授权人员必须仍然能够访问他们被授予权限的资源。
尽管保密性类似于“隐私”,但这两个词并不可以互换使用。相反,保密性是隐私的一个组成部分;保密性的实施是为了保护资源免受未经授权的实体的侵害。
损害保密性的示例:
- 黑客获取了公司的密码数据库访问权限。
- 敏感电子邮件发送给了错误的个体。
- 黑客通过拦截和窃听信息传输来阅读敏感信息。
确保保密性的方法示例:
- 数据加密
- 正确实施的身份验证和访问控制
- 安全存储的密码
- 多因素身份验证(MFA)
- 生物特征验证
- 减少信息出现的地点/时间
物理安全控制,如安全的服务器房间。
第三关介绍
完整性
完整性是指“准确性和完整性的属性”。换句话说,完整性意味着在数据的整个生命周期内维护数据的一致性、准确性和可信度。数据在传输过程中不得更改,未经授权的实体不应更改数据。
损害完整性的示例:
- 输入数据时出现人为错误
- 数据传输过程中出现错误
- 软件错误和硬件故障
- 黑客更改他们不应访问的信息
确保完整性的方法示例:
- 良好运行的身份验证方法和访问控制
- 使用哈希函数检查完整性
- 备份和冗余
- 审计和日志记录
第四关介绍
可用性
可用性是指“被授权的实体能够按需访问和使用的属性”。换句话说,授权的人员应始终能够访问允许的资源。
损害可用性的示例:
- 拒绝服务攻击(DOS)
- 硬件故障
- 火灾或其他自然灾害
- 软件或网络配置错误
确保可用性的方法示例:
- 入侵检测系统(IDS)
- 网络流量控制
- 防火墙
- 硬件和基础设施的物理安全
- 防火、防水和其他元素的保护
- 硬件维护
- 冗余技术
第五关选择题
现在是时候进行一次测验了!回答以下问题以检查您是否理解了这个主题。
今天,大多数系统都受到防火墙的保护。一个正确配置的防火墙可以防止恶意实体访问系统,并有助于保护组织的资源。在这个测验中,请想象一个处理个人数据但没有防火墙保护的系统:
-
入侵者如何可能危害保密性安全目标?
- 解决方案 1:通过删除所有数据库。
- 解决方案 2:通过窃取存储系统通用配置信息的数据库。
- 解决方案 3:通过窃取存储有姓名和电子邮件的数据库,并将其上传到网站上。
- 解决方案 4:入侵者无法危害保密性。
-
入侵者如何可能危害完整性安全目标?
- 解决方案 1:通过更改存储在数据库中的一个或多个用户的姓名和电子邮件。
- 解决方案 2:通过监听传入和传出的网络流量。
- 解决方案 3:通过绕过用于管理数据库访问的身份验证机制。
- 解决方案 4:只有当入侵者可以物理访问数据库存储时,完整性才会受到威胁。
-
入侵者如何可能危害可用性安全目标?
- 解决方案 1:通过利用系统软件中的漏洞绕过数据库的身份验证机制。
- 解决方案 2:通过将包含敏感数据的电子邮件重定向给其他人。
- 解决方案 3:只有在断开存储设备的电源供应时,可用性才会受到威胁。
- 解决方案 4:通过对服务器发起拒绝服务攻击。
-
如果至少有一个CIA安全目标受到威胁会发生什么情况?
- 解决方案 1:只要不是所有目标都受到威胁,系统就可以被视为安全。威胁一个目标对系统的安全没有影响。
- 解决方案 2 即使只有一个目标受到威胁,系统的安全性也会受到损害。
- 解决方案 3:如果攻击者读取或更改数据,情况也不会太糟糕,至少一些数据仍然可用,因此只有在可用性目标受到威胁时,系统的安全性才会受到威胁。
- 解决方案 4:如果攻击者更改数据或使其不可用,应该不是问题,但读取敏感数据是不可接受的。只有在保密性受到威胁时才会存在问题。
请在答案前标明问题号和相应的解决方案号。例如:问题 1:解决方案 2。
答案:cadb
Writing new lesson
第一关介绍
这个课程描述了向 WebGoat 添加新课程所需的步骤。通常,有四个步骤:
-
撰写内容。在 WebGoat 中,我们使用 AsciiDoc 作为格式。
-
创建一个课程类。
-
撰写 HTML 粘合页面,以便 WebGoat 知道如何显示内容。
-
在课程内添加一个或多个任务。
让我们看看如何创建一个新课程。
第二关介绍
步骤 1:编写内容
每个课程可以由多个包含内容(文本)的页面组成,用于解释手头的漏洞。内容使用 AsciiDoc[https://asciidoctor.org/docs/asciidoc-writers-guide/] 编写,这使得编写内容非常容易(如果你了解 Markdown,你就了解 AsciiDoc)。
您可以在线找到关于 AsciiDoc 语法的优秀教程。我们在下面提供了一个基本概述。在下面,我们将描述一些在 WebGoat 中经常使用的构造。
子标题
检查 AsciiDoc 的语法,但更多的等号表示较小的标题。您可以加粗文本和其他内容。
文件结构
您应该将所有内容设置为这些 *.adoc 文件。AsciiDoc 文件位于目录 /src/main/resources/{lesson}/documentation/ 中。
图片
可以在下面引用图像,包括设置样式(建议使用 lesson-image 作为样式)。根目录是 /src/main/resources/{lesson}/images。
Firefox 代理配置
代码块
编写代码块如下:
[source] ---- public class A {
private String test; } ----
第三关介绍
更多内容,还有视频...
您可以按照自己的喜好结构化和格式化内容。您甚至可以包含视频(但可能受到浏览器支持的限制)。然而,您可能希望将其与 Web 应用程序安全更相关的内容相结合。
您的浏览器不支持 video 标签。
详细了解视频语法,请参阅视频语法。
更多内容
您可以在同一个页面中包含多个 adoc 文件,通过将它们包含在相同的 <div>
中:
<div class="lesson-page-wrapper"> <div class="adoc-content" th:replace="doc:lesson-template-video.adoc"></div> <div class="adoc-content" th:replace="doc:lesson-template-video-more.adoc"></div> </div>
第四关介绍
步骤 2:添加新的课程类
每个课程首先可以包含多个任务。首先,让我们在 Java 中定义一个课程类:
将新课程添加到 org.owasp.webgoat.lessons 下的新包中。
第五关介绍
步骤 3:编写粘合 HTML 页面
我们提到一个课程可以包含多个任务,WebGoat会自动识别它们,并在每个课程的顶部显示导航栏。带有任务的页面起初会是红色的,当用户解决任务时会变为绿色。为了使这个工作,我们需要添加以下内容:
<html xmlns:th="http://www.thymeleaf.org"> <div class="lesson-page-wrapper"> <div class="adoc-content" th:replace="doc:lessons/lessontemplate/documentation/ lesson-template-intro.adoc"></div> </div> <div class="lesson-page-wrapper"> <div class="adoc-content" th:replace="doc:lessons/lessontemplate/documentation/ lesson-template-content.adoc"></div> </div> <div class="lesson-page-wrapper"> <div class="adoc-content" th:replace="doc:lessons/lessontemplate/documentation/ lesson-template-lesson-class.adoc"></div> </div> </html>
这个文件需要放置在:/src/main/resources/{lesson}/html/。文件的名称应该与我们在步骤 2 中创建的Java类的名称相同。
上面的代码片段将创建三个单独的页面(导航栏),这些页面使用了我们为创建这个课程而创建的 adoc 页面。
这就是全部。要使所有内容都起作用,您需要在WebGoat中使课程可用。
就这样。启动WebGoat,您的课程将出现在菜单中。
第六关
后端样例代码中提供了答案正确与错误的两个return分支,分别是 return success 和 return failed ,返回成功的条件为secretValue.equals(param1),查找secretValue的值得到 字符串 【secr37Value】,因此参数一就是这个。参数2后端没有校验,所以留空或者随便填都可以。
(A1) Broken Access Control
Hijack a session
第一关介绍
概念
开发自己的会话标识(session ID)的应用程序开发人员经常忘记包含安全所需的复杂性和随机性。如果用户特定的会话标识不够复杂和随机,那么应用程序极易受到基于会话的暴力攻击的威胁。
目标
获取对属于其他人的已认证会话的访问权限。
第二关
漏洞形成原因
我们知道,在使用cookie、session登录认证的系统中,当用户的账号密码输入正确时,后台会生成一个合法的session id存在后端服务器上,同时会以set-cookie的方式将该session id返回给用户的浏览器,用户的浏览器会以cookie的方式将其存起来,并且在后续的每次请求中都携带该cookie,服务端每次都会获取请求头中该cookie的值与后端存的session id来对比,来验证当前用户是否为一个正确登录的用户。
如果我们生成session id的方式存在瑕疵,比如没有使用足够的复杂和随机,就会导致攻击者可能通过猜测的方式获取到后台存储的其他正确的session id值,从而使用该session进行登录。
比如一个比较粗暴的设计举例:
对于每个用户登录生成session id时使用15位数字,并且递增的方式进行。这个规律很容易被攻击者发现,攻击者使用自己的账号获取到一个正确的session id后,在此基础上进行递减,或者递增,则很容易猜测到其他人的session id.
前置知识
Cookie原理:
1.客户端向服务端发起请求
2.服务端返回cookie,自己也保存了一份
3.客户端收到后,将cookie也保存起来
4.客户端再次发起请求时,会带上这个cookie
5.服务端收到后,检查客户端的cookie和自己第二步保存的cookie是否一致,一致则认为是同一个用户。
通过数据包分析,我们可以看到当前登录请求携带了一个Cookie值,但由于这个Cookie值是错误的,所以后端返回了"false"。换句话说,如果我们能够获取一个正确的Cookie值,那么就有可能成功进行登录。
我们把当前题目中用来进行身份验证的这个hjack_cookie的值删除掉,再重发请求。我们发现此时后端返回了一个hjack_cookie的值回来。
把这值填到请求中还是false
此时,我们可以尝试探寻一种方法,看是否能够获得后台正确的 'hjack_cookie' 值。为了达到这个目标,我们可以多次发送请求,以获取多个后台返回的 'hjack_cookie',并观察是否存在某种规律或模式。在该请求上右键-send to repeater,多send几次,将hijack_cookie记录下来。观察返回的 'hjack_cookie' 值,可以发现它由两部分组成,中间用连字符 "-" 隔开。前半部分是一个看似很长的数字,但它是递增的。而后半部分看起来像是一个时间戳。
8195750994134671439-1695802645800
8195750994134671441-1695802665812
8195750994134671443-1695802682250
8195750994134671445-1695802693571
8195750994134671546-1695804793471
8195750994134671547-1695804813722
8195750994134671549-1695804820843
-前选8195750994134671444后面从43和45之间的数 即1695802682250---1695802693571
在登录请求中右键-send to intruder我们将hijack_cookie作为爆破参数,选中它点击Add§即可