CamLee27/owasp-juice-shop-ethical-hacking-lab
GitHub: CamLee27/owasp-juice-shop-ethical-hacking-lab
一个针对 OWASP Juice Shop 的限时道德黑客课程实验报告,涵盖 XSS、提示操纵、SQL 注入等多种 Web 安全测试的尝试记录与缓解建议。
Stars: 1 | Forks: 0
# OWASP Juice Shop 道德黑客实验室 🧃
## 概述
这是我一门道德黑客课程的期末考试项目,至今仍是我在大学期间最喜欢的项目之一。
我大约有一到两个小时的时间来测试 OWASP Juice Shop,记录我的尝试过程,截取成功利用漏洞的屏幕截图,并解释如何减少或防止每个漏洞。
由于考试有时间限制,我尝试了几种不同的攻击方法,而不是只关注某一个漏洞。我成功演示了聊天机器人提示操纵和跨站脚本攻击。我还尝试了 SQL 注入和目录发现,并进行了一次小规模的 ICMP 流量洪水测试。
有些测试成功了,而另一些则失败了,或者由于时间耗尽而无法完全验证。我对每个结果都进行了清晰的标注,而不是将每次尝试都展示为成功的漏洞利用。
## 项目详情
- **课程:** 道德黑客
- **应用程序:** OWASP Juice Shop
- **评估类型:** 限时期末考试
- **可用时间:** 大约 1-2 小时
- **环境:** 本地虚拟实验室
- **主要重点:** Web 应用程序测试、提示操纵、XSS、SQL 注入测试、目录发现以及网络流量测试
## 工具与技术
| 工具或技术 | 我的使用方式 |
|---|---|
| OWASP Juice Shop | 用作目标的包含已知漏洞的 Web 应用程序 |
| Kali Linux | 安全测试环境 |
| Firefox | 访问并测试该应用程序 |
| DirBuster | 尝试发现隐藏的文件和目录 |
| `hping3` | 在本地实验室中生成了有限数量的 ICMP 流量 |
| 浏览器输入字段 | 测试了聊天机器人提示、登录输入和搜索功能 |
## 评估结果
| 测试 | 结果 | 摘要 |
|---|---|---|
| 聊天机器人提示操纵 | 成功 | 改变了请求的措辞,并使聊天机器人提供了一个优惠码 |
| 搜索栏跨站脚本 | 成功 | 输入了一个触发 JavaScript alert 的 HTML 事件 payload |
| 使用 DirBuster 进行目录发现 | 失败 | 该工具返回了 connection-refused 错误并停止运行 |
| SQL 注入登录绕过 | 失败 | 尝试的恒真条件未能绕过身份验证 |
| ICMP 流量洪水演示 | 结果不确定 | 测试运行了,但其效果未被正确测量或确认 |
## 测试过程
```
flowchart LR
A[Review Challenges] --> B[Choose a Test]
B --> C[Attempt the Exploit]
C --> D[Record the Result]
D --> E[Capture Evidence]
E --> F[Research Mitigations]
F --> G[Move to the Next Test]
```
# 1. 聊天机器人提示操纵
## 目标
面临的挑战是让支持聊天机器人提供一个优惠码,即使它本不应该直接提供。
## 我所做的工作
我首先像平常一样向聊天机器人索要优惠码。它拒绝了,并表示不允许提供优惠码。
然后我改变了措辞,说我是出于测试目的需要一个优惠码。在重新组织请求后,聊天机器人提供了它最初拒绝提供的信息。
我继续测试,询问它是否能提供管理员密码。它没有透露密码,但在对话过程中提供了另一个优惠码。
## 初始拒绝

## 泄露优惠码

## 结果
测试成功。
聊天机器人最初遵循了其限制,但在改变了请求的措辞后做出了不同的响应。
## 重要性所在
这向我表明,仅仅写入 AI 聊天机器人的指令可能不足以保护受限信息。
如果聊天机器人能够访问敏感信息,改变请求的措辞可能会导致它以开发者未曾预料的方式做出响应。
## 推荐的缓解措施
我最初的提交重点是限制聊天机器人可以访问的内容,并改进其检测受限信息请求的方式。
现在我会将这些保护措施描述得更清晰:
- 除非必要,否则不要让聊天机器人直接访问敏感信息
- 在聊天机器人外部强制执行权限,而不是仅依赖书面指令
- 通过服务器端授权验证优惠码请求
- 限制聊天机器人响应中可能出现的信息
- 监控重复请求受限信息的行为
- 针对重新措辞同一请求的不同方式测试聊天机器人
- 将公开的聊天机器人数据与私密的管理员数据分开
# 2. 搜索栏跨站脚本
## 目标
目标是确定 Juice Shop 搜索功能是否会接受并执行注入的 HTML 或 JavaScript。
## 我所做的工作
我在搜索功能中输入了以下 HTML 事件 payload:
```
Here
```
应用程序将输入显示为 HTML。当事件被触发时,浏览器显示了一个 JavaScript alert。
## 结果
测试成功,因为应用程序将提交输入的一部分视为可执行内容,而不仅仅是将其显示为文本。

## 重要性所在
跨站脚本可能允许攻击者在另一个用户的浏览器中执行 JavaScript。
取决于应用程序和用户的权限,XSS 可能会被用于:
- 更改页面上显示的内容
- 将用户重定向到另一个位置
- 显示虚假的登录表单
- 通过受影响用户的会话执行操作
- 访问浏览器可用的信息
## 推荐的缓解措施
我最初的提交建议对输入进行过滤,并使用内置 XSS 保护的安全库。
额外的保护措施包括:
- 在显示不可信的输出之前对其进行编码
- 在必须支持用户创建的标记时对 HTML 进行清理
- 避免将不可信的输入直接插入页面
- 使用默认对输出进行转义的框架
- 在服务器上验证输入
- 应用严格的 Content Security Policy
- 避免仅依赖浏览器端验证
# 3. 目录发现尝试
## 目标
我尝试使用 DirBuster 来识别未通过网站公开链接的文件或目录。
## 我所做的工作
我在 DirBuster 中输入了目标地址,选择了一个目录字典,并开始了扫描。
DirBuster 尝试从目标请求可能的目录和文件名。
## 结果
此尝试未成功。
DirBuster 返回了 `IOException: Connection Refused` 错误,并在反复失败后停止运行。
在最初的考试期间,我认为请求限制可能导致了失败,因为目录发现工具会发送大量请求。然而,我没有收集到足够的证据来确认速率限制是真正的原因。
其他可能的原因包括:
- 目标地址不正确
- 端口或协议不正确
- 应用程序不接受连接
- Kali Linux 与目标之间存在网络问题
- DirBuster 内部的配置问题
## 接下来我会尝试的步骤
这些步骤在最初的考试期间并未完成。如果现在有更多时间,我会尝试这些步骤:
1. 确认从 Kali Linux 可以访问 Juice Shop 应用程序
2. 验证目标地址、端口和协议
3. 在浏览器中手动测试目标
4. 从较小的字典开始
5. 降低请求的数量和速度
6. 检查应用程序和服务器日志
7. 将结果与另一个目录发现工具进行比较
8. 在 Burp Suite 或 Wireshark 中捕获请求
这将有助于确定失败是源于我的配置、网络连接,还是目标上的安全控制。
## 推荐的缓解措施
尽管我的尝试没有成功,应用程序仍应通过以下方式防范目录和文件发现:
- 从生产服务器中删除不必要的文件
- 将敏感文件保留在公共 Web 目录之外
- 对受限资源要求授权
- 监控对不存在路径的重复请求
- 在适当的地方应用速率限制
- 避免使用会透露敏感信息的文件名
- 返回一致的错误消息
- 禁用目录列表
- 在部署前删除备份、测试和配置文件
# 4. SQL 注入尝试
## 目标
我试图确定登录页面是否存在基本的 SQL 注入身份验证绕过漏洞。
## 我所做的工作
我找到了应用程序使用的管理员电子邮件地址,并在密码字段中输入了一个基本的恒真 SQL 条件。
目的是查看应用程序是否将我的输入直接与数据库查询结合,并允许我在没有正确密码的情况下登录。
最初的登录尝试使用了:
```
Username: admin@juice-sh.op
Password: a' OR '1'='1'
```
## 结果
登录尝试无效。
我没有通过这个特定测试确认 SQL 注入漏洞。
失败的尝试并不能证明整个应用程序都受到了 SQL 注入的保护。它只意味着我测试的特定输入和方法未能绕过登录页面。
## 接下来我会尝试的步骤
这些步骤在最初的考试期间并未完成。如果有更多时间,我会:
1. 使用 Burp Suite 捕获登录请求
2. 检查用户名和密码是如何提交的
3. 检查请求是使用了 form data、JSON 还是其他格式
4. 检查响应码和错误消息
5. 测试其他输入变体
6. 测试除登录表单之外的其他输入字段
7. 比较正常和已修改的服务器响应
8. 确认是否通过参数化查询处理了输入
任何额外的测试仍将仅在授权的实验室内完成。
## 推荐的缓解措施
我最初的提交列出了预编译语句、转义、最小权限和静态查询作为可能的保护措施。
现在我要强调的主要控制措施是:
- 使用参数化查询或预编译语句
- 将 SQL 命令与用户提交的值分开
- 在服务器上验证输入
- 仅授予数据库账户所需的权限
- 避免显示详细的数据库错误
- 记录重复或异常的登录尝试
- 在适当的地方添加速率限制或临时锁定
- 定期测试应用程序输入字段的注入漏洞
# 5. ICMP 流量洪水演示
## 目标
我进行了一次小规模的流量生成测试,以观察本地虚拟环境对 ICMP 数据包突发的反应。
## 我所做的工作
我使用 `hping3` 向本地目标发送了 100 个 ICMP 数据包。
## 结果
虚拟机变得不稳定,我不得不关闭并重启它。
然而,我没有捕获足够的网络或系统性能信息来证明是数据包流量导致了该问题。虚拟机变得不稳定可能是因为另一个原因。
因此,我认为该测试结果**不确定**,而不是一次确认的拒绝服务攻击。
将其描述为 ICMP 流量洪水演示而不是分布式拒绝服务攻击也更为准确。流量来自本地实验室内的一台机器,而不是多个分布式系统。
## 接下来我会尝试的步骤
为了更准确地验证结果,我会:
1. 使用 Wireshark 捕获流量
2. 记录测试前的 CPU 和内存使用情况
3. 测量测试前、测试中和测试后的应用程序响应时间
4. 记录数据包丢失和网络延迟
5. 使用受控的数据包数量重复测试
6. 比较多次测试运行的结果
7. 检查系统和应用程序日志
8. 确认是否影响到了应用程序、操作系统或虚拟机
这将使我们能够确定是流量导致了不稳定,还是虚拟机遇到了不相关的问题。
## 推荐的检测和缓解措施
- 监控网络活动以发现意外的流量激增
- 使用 Wireshark 捕获并检查数据包
- 配置防火墙以过滤不必要的流量
- 应用流量速率限制和路由器限流
- 禁用不必要的服务
- 使用反向代理和流量管理控制
- 维护正常的流量基线
- 定期检查服务器和网络日志
- 在适当的地方使用 Web 应用程序防火墙
- 针对异常的流量配置警报
# 我学到了什么
这个项目帮助我理解到,道德黑客不仅仅是让漏洞利用发挥作用。
我还必须:
- 决定在截止日期前优先进行哪些测试
- 记录我的尝试过程
- 在成功时捕获证据
- 解释为什么尝试可能会成功或失败
- 将确认的发现与假设区分开来
- 研究可能的缓解措施
- 在无法验证结果时保持诚实
我最大的收获之一是,不成功的测试仍然可以提供有用的信息。
失败的尝试表明某一种特定方法无效,但这并不能自动证明该应用程序已完全免受此类漏洞的影响。
我还了解到,良好的测试需要证据。例如,在 ICMP 测试期间虚拟机变得不稳定本身不足以证明是流量导致了该问题。
# 练习的技能
- Web 应用程序安全测试
- 跨站脚本
- AI 聊天机器人提示操纵
- SQL 注入测试
- 目录和文件发现
- 基本网络流量生成
- 漏洞文档编写
- 缓解措施研究
- 证据收集
- 技术故障排除
- 时间管理
- 技术沟通
# 评估限制
该项目是在一次限时期末考试中完成的,大约有一到两个小时的时间用于测试、截图、书面解释和缓解建议。
由于时间限制:
- 我无法充分调查每一个挑战
- 一些尝试未能成功完成
- ICMP 测试未包含详细的数据包或性能测量
- SQL 注入尝试未包含更广泛的测试
- DirBuster 连接错误未得到全面诊断
- 原始提交中的一些书面解释比我通常提供的要短
包含这些限制是为了让仓库准确反映我在考试期间完成的内容。
# 道德与法律范围
所有测试均在授权的课堂环境中针对本地托管的 OWASP Juice Shop 副本进行。
OWASP Juice Shop 是专为安全教育和测试而设计的。
我没有针对公共网站、真实的客户信息或未经我许可测试的系统使用这些技术。
# 项目历史
我最初完成这个项目是作为我道德黑客课程的期末考试。
此仓库中的屏幕截图来自我最初的考试提交。
我后来创建了此 GitHub README 以便:
更好地组织项目
- 纠正不清晰的措辞
- 区分成功、失败和不确定的结果
- 添加更准确的技术解释
- 解释如果时间充裕我会进行哪些不同的测试
**接下来我会尝试的步骤**部分描述了后来的反思,并没有作为我在原始考试期间完成的步骤提出。
不包含最初的 Word 文档是因为它们包含作业模板、粗略的笔记、重复的信息以及较不有条理的解释,这些在这里都已经被重写了。
# 未来改进
- 在没有原始时间限制的情况下重复评估
- 捕获完整的 HTTP 请求和响应详细信息
- 使用 Burp Suite 检查和修改请求
- 使用 Wireshark 捕获 ICMP 流量
- 记录流量测试期间的系统性能
- 测试额外的 OWASP Juice Shop 挑战
- 为确认的发现添加严重性和风险评级
- 将发现映射到相关的 OWASP 类别
- 创建正式的渗透测试报告
标签:CISA项目, Web安全, 安全靶场, 教育与测试, 漏洞分析, 蓝队分析, 路径探测