Juice Shop是用Node.js,Express和Angular编写的。这是第一个 完全用 JavaScript 编写的应用程序,列在 OWASP
VWA 目录中。
该应用程序包含大量不同的黑客挑战 用户应该利用底层的困难 漏洞。黑客攻击进度在记分板上跟踪。 找到这个记分牌实际上是(简单的)挑战之一!
除了黑客和意识培训用例外,渗透测试 代理或安全扫描程序可以将 Juice Shop 用作“几内亚” pig“-应用程序来检查他们的工具如何应对
JavaScript 密集型应用程序前端和 REST API。
部署
docker pull bkimminich/juice-shop
docker run --rm -p 3000:3000 bkimminich/juice-shop
需要挖掘的漏洞内容 [寻找记分牌 :: Pwning OWASP Juice Shop (owasp-
juice.shop)](https://pwning.owasp-juice.shop/companion-
guide/latest/part2/score-board.html “寻找记分牌 :: Pwning OWASP Juice Shop (owasp-
juice.shop)”)
访问ip:3000,打开后先注册一个用户,否则功能无法操作。
前记:
这个靶场的难点在于,只给出问题,范围在整个系统,需要去找题的答案在哪个功能上。
injection
Login Admin
题目要求通过SQL注入找到admin的账号密码。
在登录页面,输入单引号’ 随便输入密码,点击login
发现报错显示了SQL语句,说明email输入框存在SQL注入漏洞。
可以闭合单引号采用or注入。账号输入框输入’ or ‘1’=‘1’ – 密码随便输入点击login 提示成功
![](https://img-
blog.csdnimg.cn/direct/8f053202d95f4b57ae81af7ef2b416e4.png)
![](https://img-
blog.csdnimg.cn/direct/3028dc2193c249ba8e9dbd3dd81a3182.png)
可以看到admin的邮箱为 admin@juice-sh.op
参考答案:
Login Bender
Log in with Bender’s user account. 题目要求使用Bender登录
账号:bender@juice-sh.op’-- 密码随便输入,登录解决。
Broken Authentication 身份验证中断
Bjoern’s Favorite Pet ⭐⭐⭐
Reset the password of Bjoern’s OWASP account via the Forgot
Password
mechanism with the original answer to his security question
通过忘记密码机制重置 Bjoern 的 OWASP 帐户的密码
许多网站注册都使用安全问题作为两个密码 检索/重置和登录验证。有些人也问同样的问题 用户拨打电话时的安全问题。安全问题
是验证用户和阻止未经授权的访问的一种方法。但 安全问题存在问题。网站可能使用较差 可能产生负面结果的安全问题:
用户无法准确记住答案或答案已更改, 该问题对用户不起作用,该问题不安全且 可能会被其他人发现或猜测。我们必须使用 好问题。良好的安全问题符合五个标准。答案
一个好的安全问题是:
-
安全 :无法猜测或研究
-
稳定 :不随时间变化
-
难忘 :能记住
-
简单:精确、 简单 、一致
-
很多 :有很多可能的答案
很难找到满足所有五个标准的问题,即 意味着有些问题很好,有些是公平的,大多数是差的。 在 实际上,几乎没有任何好的安全问题。 人与人分享
社交媒体、博客和网站上有如此多的个人信息, 很难找到符合上述标准的问题。在 此外,许多问题不适用于某些人;为 例如,您大孩子的昵称是什么——但您没有
孩子。
对于这种问题,可以采用社交网站搜集信息,或者暴力破解。
点击忘记密码,输入email,可以看到安全问题为喜欢的宠物名字。
这个题答案是在这个人的 Twitter 个人资料会发现几张可爱的猫的照片,最终还会找到推文
推文的文字剧透了这只猫的名字“Zaya”,输入猫的名字,输入新密码提交解决。
Authorization - OWASP Cheat Sheet
Series
Change Bender’s password into slurmCl4ssic without using SQL Injection or
Forgot Password ⭐⭐ ⭐ ⭐
要求不使用SQL注入或者忘记密码,来重置bender的密码。
解决:先使用SQL注入 登录bender bender@juice-sh.op’–
获得Authorization ,然后请求重置密码链接,在header中使用bender的Authorization
login with Chris’ erased user account ⭐⭐⭐
使用 Chris 已抹掉的用户帐户登录
此挑战是关于使用以下用户的帐户登录: 此前坚持自己的“被遗忘权”,根据 GDPR 第 17 条。
尝试“请求数据擦除”功能可能是 有趣,但无法帮助您实时解决这一挑战。
如果您已经解决了通过 SQL 注入检索所有用户凭据列表的挑战,您可能已经检索到有关 Juice 如何 商店会根据用户的请求“删除”用户。
果汁店在这里的所作所为完全不符合GDPR。 幸运的是,对 4 美元的总收入处以 0% 的罚款仍然是 0 美元。
可以使用SQL注入解决,问题是需要知道email 应该跟其他题有关联
chris.pike@juice-sh.op’–
Log in with Bjoern’s Gmail account⭐⭐⭐⭐
要求 使用 Bjoern 的 Gmail 帐户登录,而无需事先更改他的密码、应用 SQL 注入或入侵他的 Google 帐户
这个题需要看源码解决
采用oauth集成google账户,发现password的算法
- 从
n.email
中获取电子邮件地址。 - 将该电子邮件地址的字符反转(例如,“abc"变成"cba”)。
- 使用
btoa
函数将反转后的字符串编码为Base64。
电子邮件为如下,反转,然后编码得到密码,登录解决
bjoern.kimminich@googlemail.com
bW9jLmxpYW1nQGhjaW5pbW1pay5ucmVvamI=
Password Strength ⭐⭐
要求登录admin账号,但不使用SQL注入。需要使用暴力破解。
前提:先做injection中的login admin找到邮箱,然后爆破密码。
答案为 admin@juice-sh.op admin123 使用账号密码登录解决。
solution 提示可以猜测,如果已知admin的密码hash,可以攻击。如果使用了hacker工具可以爆破。
Reset Bender’s Password ⭐ ⭐⭐⭐
要求重置bender的密码,安全问题为成年后第一次工作的公司
这一题需要在社交网站找到答案
bender@juice-sh.op Stop’n’Drop 输入安全问题答案提交解决。
Reset Bjoern’s Password⭐ ⭐⭐⭐⭐
要求重置Bjoern的密码,安全问题可真多,需要的是信息挖掘能力。
bjoern@juice-sh.op West-2082
Reset Jim’s Password⭐ ⭐⭐
要求重置jim的密码 答案为Samuel 看不懂solution从哪挖的信息
–Two Factor Authentication⭐ ⭐⭐⭐⭐
Broken Access Control 访问控制中断
Admin Section
前置:完成Improper Input Validation-Admin Registration,即已注册一个admin账号。
题目要求访问商店的管理员部分。
1、查看源码main.js 搜索admin,直接用普通用户访问会提示403.
2、使用admin账号登录,访问路径,解决。
http://10.100.33.10:3000/#/administration
总结:查看源码,有惊喜。
Five-Star Feedback
Get rid of all 5-star customer feedback. 要求删除所有5星评价客户的评价。 需要先解决admin
section,用admin登录,访问administration路由,删除5星评价解决。
Forged Feedback
要求用其他用户的username提交评价。
抓包,修改connect发送未解决。随便修改一下userId,解决。
Forged Review ⭐ ⭐⭐
Post a product review as another user or edit any user’s existing review.
要求以其他用户身份发布产品评论或编辑任何用户的现有评论
不登录,评论,即解决此题。因为不登录,用户为匿名的,不应该可以发表评论。
实际只要抓取评论的请求修改author,重新发送请求即可。
View Basket ⭐ ⭐
要求查看其他人的购物车
解决:抓包,修改id为7请求解决,这个题像不安全对象引用。
答案给的方法是修改session里的bid后刷新
Zero Stars
要求给商店做零星评价,选择左侧contact模块的customer feedback功能,发现页面只能选择1-5
解决:抓包,篡改请求设置rating为0 后发送,绕过UI
Web3 沙盒 ⭐
找到一个意外部署的代码沙箱,用于动态编写智能合约。
在前端源码main.js找到一个path web3-sandbox,访问http://10.100.33.10:3000/#/web3-sandbox
解决
CSRF ⭐ ⭐⭐
Change the name of a user by performing Cross-Site Request Forgery from
another origin.
题目要求通过CSRF的方式从其他域修改用户账号名
<form action="http://localhost:3000/profile" method="POST">
<input name="username" value="CSRF"/>
<input type="submit"/>
</form>
<script>document.forms[0].submit();</script>
因为samesite设置是none,所以可以从其他域请求网站
在实际的攻击场景中,攻击者会试图欺骗 合法用户打开攻击者控制的网站。如果 受害人同时登录目标网站,请求 由步骤 3 中的恶意表单生成的 - 通过身份验证
受害者的会话。攻击者还可以选择隐藏 自动发出请求,例如将其嵌入到内联中 高度和宽度为零的框架。
我这里写到本地html文件,用浏览器打开,发现被屏蔽了
Manipulate Basket ⭐ ⭐⭐
Put an additional product into another user’s shopping basket.
题目要求把产品添加到其他用户购物车
提交购物车,抓包,修改basketId发现报错basketId无效。
![](https://img-
blog.csdnimg.cn/direct/c41276b12ea1468788f6c258e1b2b336.png)solution:
HTTP参数污染,payload里再添加一个basketId参数
{“ProductId”: 14,“BasketId”: “1”,“quantity”: 1,“BasketId”: “2”}
HTTP参数污染
提供多个同名的 HTTP 参数可能会导致 应用程序以意想不到的方式解释值。通过利用 这些影响,攻击者或许能够绕过输入验证,
触发应用程序错误或修改内部变量值。如 HTTP 参数污染(简称 HPP)会影响 所有 Web 技术、服务器端和客户端攻击都存在。
当前的 HTTP 标准不包括有关如何解释的指南 具有相同名称的多个输入参数。例如,RFC 3986 只需将术语“查询字符串”定义为一系列字段值对 RFC
2396 定义了保留和非保留查询字符串的类 字符。如果没有适当的标准,Web 应用程序组件 以多种方式处理此边缘情况(请参阅下表 详细信息)。
_就其本身而言,这并不一定表明存在脆弱性。 但是,如果开发人员没有意识到问题,则存在 重复的参数可能会在 可能被攻击者利用的应用程序。一如既往
在安全方面,意外行为是弱点的常见来源 在这种情况下,这可能会导致 HTTP 参数污染攻击。自 最好介绍这类漏洞和HPP的结果
攻击,分析一些现实生活中的例子很有趣 过去曾被发现过。[[1](https://pwning.owasp-juice.shop/companion-
guide/snapshot/appendix/solutions.html#footnotedef_1 “1”)]
Product Tampering ⭐ ⭐⭐
Change the of the link within the OWASP SSL Advanced Forensic Tool (O-Saft)
product description into https://owasp.slack.com.href
OWASP SSL 高级取证工具 (O-Saft) 产品在 它的描述指向该项目 Wiki 页面。在这次挑战中 您应该更改该链接,以便它将您发送到
http://kimminich.de。请务必严格遵循
挑战说明,使其在记分板上亮起绿色:
-
描述中的原始链接标记:
<a href="https://wiki.owasp.org/index.php/O-Saft" target="_blank">More...</a>
-
描述中的预期链接标记:
<a href="https://owasp.slack.com" target="_blank">More...</a>
-
从理论上讲 ,有三种可能的方法可以克服这一挑战:
-
在 Web 应用程序中查找管理功能 允许您更改产品数据
-
在 RESTful API 中寻找可能的漏洞,以允许您 更新产品
-
尝试潜入产品数据语句的 SQL 注入攻击
UPDATE
-
-
在实践中 ,这三种方式中的两种应该被证明是死胡同
通过使用 http://localhost:3000/rest/products/search?q=o-saft
REST API 直接搜索 O-Saft
,您将了解 它的数据库 ID 是 。9
向 http://localhost:3000/api/Products/9 提交请求:PUT
-
{"description": "<a href=\"https://owasp.slack.com\" target=\"_blank\">More...</a>"}
作为正文 -
Content-Type application/json
–SSRF ⭐ ⭐⭐⭐ ⭐⭐
Request a hidden resource on server through server.
This Server-side Request Forgery challenge will come back to the malware you
used in [Infect the server with juicy malware by abusing arbitrary command
execution](https://pwning.owasp-juice.shop/companion-
guide/latest/part2/injection.html#_infect_the_server_with_juicy_malware_by_abusing_arbitrary_command_execution
“Infect the server with juicy malware by abusing arbitrary command
execution”).
-
Using whatever you find inside the malware directly will not do you any good.
-
For this to count as an SSRF attack you need to make the Juice Shop server attack itself.
-
Do not try to find the source code for the malware on GitHub. Take it apart with classic reverse-engineering techniques instead.
_In a Server-Side Request Forgery (SSRF) attack, the attacker can abuse
functionality on the server to read or update internal resources. The
attacker can supply or a modify a URL which the code running on the server
will read or submit data to, and by carefully selecting the URLs, the
attacker may be able to read server configuration such as AWS metadata,
connect to internal services like http enabled databases or perform post
requests towards internal services which are not intended to be exposed.
[[3](https://pwning.owasp-juice.shop/companion-guide/latest/part2/broken-
access-control.html#footnotedef_3 “3”)]
GDPR Data Erasure
题目要求登录 Chris’ 已被删除的账户。
使用 chris.pike@juice-sh.op’-- 任意密码登录解决。
XSS
API-only XSS ⭐ ⭐⭐
Perform a persisted XSS attack with )"> without using the frontend application at all.<iframe src="javascript:alert(
xss
DOM XSS
在搜索框输入 回车,会显示一个alert
不合适的输入验证
Bonus Payload
商品搜索框输入如下代码回车成功
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/771984076&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>
Improper Input Validation
Admin Registration ⭐⭐⭐
题目要求注册为管理员权限的用户。
提交body {“email”:“admin”,“password”:“admin”,“role”:“admin”}
–空用户注册 ⭐⭐
使用空电子邮件和密码注册用户。
优惠券已过期 ⭐⭐⭐⭐
成功兑换过期的活动优惠券代码。
除了在 Twitter 上找到的每月优惠券代码外,Juice Shop 还 至少提供过一次季节性特别活动。
-
在某处寻找有关过去活动或假日活动的线索 应用程序
-
解决这一挑战并不需要实际的时间旅行
打开源码,搜索campaigns找到coupon,将商品加入购物车下单,输入coupon值,会提示invalid
-
根据你阅读本书的时间, 其中一个或多个可能已过期。让我们继续最古老的 可用的一个,即 .
this.campaigns``WMNSDY2019
-
在缩小的代码中,您会注意到一个函数,该函数使用 包含优惠券的时间戳。
applyCoupon()``this.campaigns``validOn
-
忽略有效性检查,只提交遗嘱 正如您所料,产生错误。这是 因为断言的第二部分.
WMNSDY2019``Invalid Coupon.``this.clientDate === e.validOn
-
将优惠券转换为 JavaScript 日期会告诉您此活动在 3 月处于活动状态 仅限 2019 年 8 日:妇女节!
validOn: 15519996e5``WMNSDY2019
转换为javascript时间
let milliseconds = 15519996 * 10**5; let date = new Date(milliseconds);
console.log(date);
将计算机的时间设置为 2019 年 3 月 8 日,并尝试提交 再次编码。
这次会被接受!继续 结帐 以获取 挑战解决了 输入coupon为WMNSDY2019
这一题的问题在于,验证有效期,应该用服务端时间,而不是客户端时间,因为客户端时间是可以更改的。
#薄荷蜜罐 ⭐⭐⭐
通过从蜜蜂天堂收集 BEE 来铸造 Honey Pot NFT。
Missing Encoding⭐
photo-wall有一个小猫图片未显示,查看元素,可以看到src地址,在新标签页打开,
发现传给服务器的url变为如下,导致图片未显示。因为#号被浏览器解释了are interpreted by your browser as HTML
anchors 所以需要将#编码为%23 即可显示图片
http://10.100.33.10:3000/assets/public/images/uploads/😼-
Payback Time ⭐⭐⭐
下订单,让你变得富有。
这可能是每个网店的噩梦,客户可能会想receive money,而不是 支付 购买费用。
-
你真的需要让商店欠你任何钱
-
仔细调查购物篮,了解它如何防止 您从创建可以满足挑战的订单中
使用firedox浏览器可以抓取请求,编辑重发,抓取下订单请求,修改数量为负值,发送,然后付款。可以看到付款的值为负值。
这一题是由于后端没有对输入的商品数量做校验,而只在前端做了校验。
Poison Null Byte ⭐⭐⭐
Bypass a security control with a Poison Null Byte to access a file not meant
for your eyes.
“Poison Null Byte” 是一个与网络安全相关的术语。在网络安全领域,特权提升攻击(Privilege Escalation
Attack)是一种攻击手段,其中攻击者试图获取比他们当前权限更高的权限。在某些情况下,攻击者可能会尝试利用某些软件或协议中的漏洞,通过插入特殊字符(如NULL字节)来操纵程序的行为,从而执行恶意代码或获得更高的权限。“Poison Null Byte”
这个术语通常是指攻击者利用NULL字节作为攻击的一部分,通过插入NULL字节来操纵程序的行为。例如,在某些编程语言中,字符串是以NULL字节结束的。攻击者可能会尝试在字符串中插入一个NULL字节,以尝试操纵程序的行为或执行恶意代码。为了防止这种攻击,开发人员应该确保他们的软件和协议能够正确处理NULL字节和其他特殊字符,并采取其他安全措施来防止特权提升攻击。
By embedding NULL Bytes/characters into applications that do not handle
postfix NULL terminators properly, an attacker can exploit a system using
techniques such as Local File Inclusion. The Poison Null Byte exploit takes
advantage strings with a known length that can contain null bytes, and
whether or not the API being attacked uses null terminated strings. By
placing a NULL byte in the string at a certain byte, the string will
terminate at that point, nulling the rest of the string, such as a file
extension
-
分析和篡改应用程序中的链接,直到您获取 未受保护的目录列表。
-
其中的某些文件无法直接访问,因为安全 机制阻止访问。
-
Poison Null Byte 可以诱使安全机制思考 所需的文件具有有效的文件类型。 trick the security mechanism into thinking that the file you want has a valid file type.
-
根据您尝试检索的文件,您可能会解决以下问题:访问开发人员忘记的备份文件、访问销售人员忘记的备份文件、访问放错位置的 SIEM 签名文件。 或沿途找到隐藏的复活节彩蛋
解决上面三个小题即可。
Repetitive Registration ⭐
题目要求注册用户时不用输入验证密码
解决:抓包,修改passwordRepeat为空提交。
Upload Type ⭐⭐⭐
要求上传非pdf和zip的文件
抓接口,通过接口上传非zip文件
题目是因为没有在上传文件的接口限制上传的文件类型
上传大于 100 kB 的文件 ⭐⭐⭐
果汁店为顾客提供了对不满意的订单进行投诉的机会。其中一瓶果汁可能在运输过程中泄漏,也可能发货晚了两周。为了证明他们的主张,客户应该将订单确认文件附加到在线投诉中。为了防止滥用此功能,该应用程序仅允许上传
100 kB 或更少的文件。
-
首先,您应该尝试了解文件上传在客户端和服务器端的实际处理方式
-
有了这种理解,您需要在正确的位置找到“弱点”,并为其设计一个漏洞利用程序
-
客户端验证可防止大于 100 kB 的上传。
-
http://localhost:3000/file-upload 使用 包含超过 100 kB 的 PDF 文件的 form 参数 但小于 200 kB。
POST``file
![Larger file upload](https://img-
blog.csdnimg.cn/img_convert/8b09e9c95fe66d1bae9c571bd686861d.png)
- 来自服务器的响应将是一个没有内容的响应,但 挑战将得到成功解决。
204
大于 200 kB 的文件将被服务器上的上传大小检查拒绝 一方有错误指出 .500``Error: File too large
Zero Stars ⭐
Give a devastating zero-star feedback to the store.
您可能已经意识到无法提交客户 在 “联系我们 ”屏幕上提供反馈,直到您输入评论和 从 1 到 5 中选择星级。这个挑战是关于欺骗 申请接受 0
星的反馈。
在customer feedback中抓取提交反馈的请求,然后修改rating为0,提交成功。
这一题同样是由于未进行后端校验,导致提交rating不符合设计。
豪华欺诈 ⭐⭐⭐
无需付费即可获得豪华会员资格,修改continue元素删除diabled属性,然后发送请求。
提示wallet钱不够,抓包,修改请求为空字符串,使后端不知道从哪里扣钱。
Broken Anti-Automation 反自动化失败
Web applications are subjected to unwanted automated usage — day in, day out.
Often these events relate to misuse of inherent valid functionality, rather
than the attempted exploitation of unmitigated vulnerabilities. Also,
excessive misuse is commonly mistakenly reported as application denial-of-
service (DoS) like HTTP-flooding, when in fact the DoS is a side-effect
instead of the primary intent. Frequently these have sector-specific names.
Most of these problems seen regularly by web application owners are not listed
in any OWASP Top Ten or other top issue list. Furthermore, they are not
enumerated or defined adequately in existing dictionaries. These factors have
contributed to inadequate visibility, and an inconsistency in naming such
threats, with a consequent lack of clarity in attempts to address the issues.
[[1](https://pwning.owasp-juice.shop/companion-guide/latest/part2/broken-anti-
automation.html#_footnotedef_1 “1”)]
web应用易受到意想不到的自动化程序干扰,这些事件通常与固有无效组件错误使用有关。过度的错误使用通常会被错误的通报为DOS如HTTP-
flooding,实际上DOS是副作用,而不是程序原始意图。通常这些问题没有被列在owasp top10或者其他top问题的列表。此外,它们没有被枚举
或在现有词典中充分定义。这些因素具有 导致能见度不足,命名不一致 这些威胁,因此在解决这些威胁方面缺乏明确性 问题
CAPTCHA 绕过 ⭐⭐⭐
在 20 秒内提交 10 个或更多客户反馈。
用于客户反馈的 “联系我们 ”表单包含一个验证码,用于 通过脚本保护它不被滥用。这个挑战是关于 击败这种自动化保护。
一个完全自动化的公共图灵测试,用于告诉计算机和人类 apart 或 CAPTCHA 是一个允许您区分 人类和计算机。首先被Alta
Vista广泛用于防止 自动搜索提交,验证码在以下方面特别有效 阻止任何形式的自动滥用,包括暴力攻击。 它们通过提供一些人类容易通过的测试来工作,但
计算机难以通过;因此,他们可以总结 在一定程度上确定另一端是否有人。_要使验证码有效,人类必须能够回答测试 尽可能接近 100% 的时间正确。计算机 必须尽可能接近 100%
的失败率。[[2](https://pwning.owasp-juice.shop/companion-
guide/latest/part2/broken-anti-automation.html#footnotedef_2 “2”)]
-
您可以准备 10 个浏览器选项卡,解决每个验证码并填写 每个反馈表。然后,您需要非常快速地切换 通过选项卡并在 20 秒内提交表格。
-
如果果汁店决定将挑战更改为 “在 60 秒内提交 100 条或更多客户反馈”或 更糟, 您可能很难跟上任何选项卡切换的步伐 方法。
-
仔细调查 CAPTCHA 机制的工作原理并尝试找到 要么是旁路,要么是某种动态解决的自动化方法。
-
将其包装到脚本中(使用您喜欢的任何编程语言) 重复 10 次
在页面上操作,抓取到feedback接口,使用同一个验证码多次请求,发现都可以返回结果,生成不同的评论id。
将接口放入jmeter中,循环10次。运行,完成挑战。
![](https://img-
blog.csdnimg.cn/direct/e04f6daaabed48bea932108586914df9.png)这个问题的bug在于不应该能够使用同一个验证码多次请求。
额外语言 ⭐⭐⭐⭐⭐
检索从未进入生产环境的语言文件。意思是有一种语言,juiceshop是支持的,但是页面隐藏了它。
通过调查 Juice 支持哪些语言来挑战 商店以及如何管理[翻译](https://pwning.owasp-juice.shop/companion-
guide/latest/part3/translation.html#_helping_with_translations “翻译”)。 这将很快将您带到
[OWASP Juice Shop dashboard in Crowdin](https://crowdin.com/project/owasp-
juice-shop “OWASP Juice Shop dashboard in Crowdin”) 立即 剧透 克林贡
语作为受支持的语言。将鼠标悬停在 相应的标志最终会剧透语言代码。tlh_AA
请求 http://localhost:3000/i18n/tlh_AA.json 解决 挑战
多个赞 ⭐⭐⭐⭐⭐⭐
题目要求对同一个评论进行至少三次点赞。
找到一个商品,进行评论,然后点赞,发现点赞一次后,赞图标置灰,无法再次点赞。
抓取点赞接口,发现载荷会带一个id,这个id是评论的时候返回的。
直接评论,获取到id,然后使用jmeter 设置线程数为3,注意需要设置同步定时器为3,即同时进行请求,运行,挑战通过。
A race condition or race hazard is the behavior of an electronics, software,
or other system where the output is dependent on the sequence or timing of
other uncontrollable events. It becomes a bug when events do not happen in
the order the programmer intended
重置 Morty 的密码⭐⭐⭐⭐⭐
通过“忘记密码”机制重置莫蒂的密码,并模糊地回答他的安全问题。
此密码重置质询与“[身份验证中断](https://pwning.owasp-juice.shop/companion-
guide/latest/part2/broken-authentication.html#_broken_authentication
“身份验证中断”)”类别中的密码重置质询不同,因为它是下一个 如果不使用蛮力方法就无法解决。
-
找出莫蒂到底是谁,将有助于减少解决方案 空间。
-
你可以假设莫蒂如实回答了他的安全问题 但采用了一些混淆以使其更安全。
-
Morty 的回答长度不到 10 个字符,不包括 任何特殊字符。
-
不幸的是, 忘记密码? 受速率限制保护 防止暴力破解的机制。你需要以某种方式击败它。
solution:
试图找出“莫蒂”可能是谁, 最终 应该会引导你 莫蒂·史密斯(Morty Smith )是最有可能的用户身份
访问 Morty Smith | Rick and Morty Wiki |
Fandom 并浏览“家庭”部分
它告诉你莫蒂有一只名叫 Snuffles 的狗,它也有一个 Snowball 的别名。
访问 http://localhost:3000/#/forgot-password 并提供您的 电子邮件morty@juice-sh.op
直接使用这两个作为问题答案,发现都是错误的。
创建所有突变的单词列表(包括典型的 “leet-speak”-变体!的字符串和仅使用snuffles``snowball
-
小写字母 (
a-z
) -
大写 (
A-Z
) -
和数字字符 (
0-9
)
Leet (L337, 3L337, 31337, leetspeak, eleet, Leetors, L3370rz或1337),又称黑客
语,是指一种发源于欧美 地区的BBS、线上游戏 和黑客 社群所使用的文字书写方式。通常是把拉丁字母转变成数字或是特殊符号
,例如E写成3、A写成@等。或是将单字写成同音的字母或数字,如to写成2、for写成4等等。
————————————————
版权声明:本文为CSDN博主「leeeryan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leeeryan/article/details/6124802/
编写一个脚本,循环访问单词列表并发送格式正确的 请求。A率 限制机制将阻止您发送超过 100 个 5分钟内请求,严重阻碍您的蛮力
攻击。http://localhost:3000/rest/user/reset-password
更改脚本,使其在每个请求中提供不同的 -header,因为这优先 在确定请求的来源时,通过客户端 IP。X-Forwarded-For
重新运行脚本,您会在某个时候注意到 安全问题的答案是5N0wb41L
,挑战标记为 解决。
此时可以随意取消脚本执行。
📕 :如果您不想为此挑战编写自己的脚本,请采取 看看 [juice-shop-mortys-question-brute-
force.py](https://gist.github.com/philly-
vanilly/70cd34a7686e4bb75b08d3caa1f6a820 “juice-shop-mortys-question-brute-
force.py”) 它由 philly-vanilly 作为 GitHub 上的 Gist 发布。
这题是考验信息挖掘、暴力破解、代码编写。
Cryptographic Issues
–伪造优惠券 ⭐⭐⭐⭐⭐⭐
伪造一个优惠券代码,为您提供至少 80% 的折扣。
–想象中的挑战 ⭐⭐⭐⭐⭐⭐
解决挑战 #999。不幸的是,这种挑战并不存在。
嵌套复活节彩蛋⭐⭐⭐⭐
应用一些高级密码分析来找到真正的复活节彩蛋。
解决[“寻找隐藏的复活节彩蛋](https://pwning.owasp-juice.shop/companion-
guide/latest/part2/broken-access-control.html#_find_the_hidden_easter_egg
““寻找隐藏的复活节彩蛋”)”挑战可能并不像你所希望的那样令人满意。现在是时候了 解决开发人员的嘲讽并追捕 真正的 复活节
蛋。这个后续挑战基本上是关于找到一个秘密 URL 当它被访问时,将奖励你一个应得的复活节彩蛋 名称。
- 确保你首先解决 找到隐藏的复活节彩蛋.
http://10.100.33.188:3000/ftp/eastere.gg%2500.md
获得字符串
L2d1ci9xcmlmL25lci9mYi9zaGFhbC9ndXJsL3V2cS9uYS9ybmZncmUvcnR0L2p2Z3V2YS9ndXIvcm5mZ3JlL3J0dA==
使用base64解码
/gur/qrif/ner/fb/shaal/gurl/uvq/na/rnfgre/rtt/jvguva/gur/rnfgre/rtt
尝试将其作为 URL 是行不通的。请注意重复出现的模式 (等)在上面的字符串中rtt``gur
ROT13加密/解密 - ROT13编码/解码—LZL在线工具 (lzltool.cn)
ROT13
将其解码为/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg
访问
http://localhost:3000/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg
再次访问 juiceshop主网址,提示问题已解决。
真正的 复活节彩蛋:星球的交互式3D场景 橙子 !
ROT13(“旋转 13 位”,有时连字符 ROT-13)是一个简单的 用字母替换字母的字母替换密码 13 字母表后面的字母。ROT13 是
凯撒密码,在古罗马发展起来。_因为基本拉丁字母中有 26 个字母 (2×13),所以 ROT13 是它自己的反面;也就是说,要撤消 ROT13,相同的算法是
应用,因此可以使用相同的操作进行编码和解码。这 算法几乎不提供加密安全性,并且通常
被引用为弱加密的典型例子。[[2](https://pwning.owasp-juice.shop/companion-
guide/latest/appendix/solutions.html#footnotedef_2 “2”)]
–高级付费专区 ⭐⭐⭐⭐⭐⭐
解锁高级挑战以访问独家内容。
solution
- 检查分数中相应行的 HTML 源代码 Board 表显示一个明显加密的 HTML 注释:。
<!--IvLuRfBJYlmStf9XfL6ckJFngyd9LfV1JaaN/KRTPQPidTuJ7FR+D/nkWJUF+0xUF07CeCeqYfxq+OJVVa0gNbqgYkUNvn//UbE7e95C+6e+7GtdpqJ8mqm4WcPvUGIUxmGLTTAC2+G9UuFCD1DUjg==-->
![解锁高级挑战按钮的 DOM 检查](https://img-
blog.csdnimg.cn/img_convert/948bef4d525d5faccef5fe749bfe1bdb.png)
-
这是使用 AES256 的 AES 加密产生的密文 在 CBC 模式下。
-
要获取密钥和 IV,您应该运行强制 目录 针对应用程序的浏览 攻击。您可以将 OWASP ZAP 用于 这个目的。
1. 仅 OWASP ZAP 附带的单词列表,并包含带有 密钥文件。`directory-list-2.3-big.txt``directory-list-lowercase-2.3-big.txt`
2. 搜索将发现 <http://localhost:3000/encryptionkeys> 可浏览的目录
![可浏览的目录加密密钥](https://img-
blog.csdnimg.cn/img_convert/51366af62cd6fabc517070c5c4aa99e5.png)
3. 打开 <http://localhost:3000/encryptionkeys/premium.key> 检索 AES 加密密钥和 IV .`EA99A61D92D2955B1E9285B55BF2AD42``1337`
- 为了解密密文,最好使用 .
openssl
* `echo "IvLuRfBJYlmStf9XfL6ckJFngyd9LfV1JaaN/KRTPQPidTuJ7FR+D/nkWJUF+0xUF07CeCeqYfxq+OJVVa0gNbqgYkUNvn//UbE7e95C+6e+7GtdpqJ8mqm4WcPvUGIUxmGLTTAC2+G9UuFCD1DUjg==" | openssl enc -d -aes-256-cbc -K EA99A61D92D2955B1E9285B55BF2AD42 -iv 1337133713371337 -a -A`
* 纯文本为:`/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us`
Weird Crypto ⭐⭐
题目要求找到一个加密算法(或加密库),该算法要么
-
根本 不应该使用
-
或者对于给定的要求来说是一个 糟糕的选择
-
或者以不安全的方式 使用
使用 “联系我们” 表单提交提及滥用算法或库的反馈 Use the Contact Us form to submit a feedback
mentioning the abused algorithm or library.
我在feedback的comment输入MD5,然后提交评价,就通过了,可见用到了MD5,但我没有找哪里用到了。或者用base64
solution
杂项
Privacy Policy ⭐
要求阅读隐私政策
使用的任何自动爬虫或爬虫工具都可能解决此问题,打开这个页面就会提示成功
Bully Chatbot ⭐
一直给机器发give me a coupon,在contact us查看社交平台,继续发give me a coupon,就会给发优惠券码,通过。
Mass Dispel ⭐
Close multiple “Challenge solved”-notifications in one go. 要求一次性关闭多个问题已解决通知
按住shift点击一个通知的关闭按钮X解决
如果问题已被解决,可以重启docker restart 容器id 再次访问,所有通知都会显示,然后操作。
查找记分牌 ⭐
没有直接给出记分牌页面,需要找出url。
search的地址为 http://ip:3000/#/search
刷新搜索看到某个接口返回内容
猜测url为 http://ip:3000/#/score-board
访问后显示了记分牌页面
访问后会显示成功找到
挑战通过后,点击后面的按钮运行coding
challenge,如找到记分牌这个任务,勾选记分牌相关的几行代码,点击submit,两侧会显示烟花效果,说明通过。
![](https://img-
blog.csdnimg.cn/direct/5eb5adc85b2d41df8864a264ab30ba76.png)
Security Policy安全政策 ⭐⭐
Behave like any “white hat” should before getting into the action.
_互联网俚语中的“白帽子”一词是指有道德的计算机 专门从事渗透的黑客或计算机安全专家 测试和其他测试方法,以确保 组织的信息系统。道德黑客是一个术语
意味着一个更广泛的类别,而不仅仅是渗透测试。对比 配黑帽,一个恶意的黑客,名字来源于西方电影, 传统上,英勇和敌对的牛仔可能会穿白色的衣服
和一顶黑帽子。[[2](https://pwning.owasp-juice.shop/companion-
guide/snapshot/part2/miscellaneous.html#footnotedef_2 “2”)]
-
这个挑战要求你表现得像一个有道德的黑客
-
作为好人之一,你会开始攻击应用程序吗 未经业主同意?
-
您可能还想阅读安全策略或任何漏洞赏金 已到位的计划
security.txt: Proposed standard for defining security
policies
网站可能定义security.txt文件,这个文件定义网站的安全策略。
访问url http://localhost:3000/.well-known/security.txt or
http://localhost:3000/security.txt
解决问题。
–钱包耗尽 ⭐⭐⭐⭐⭐⭐
从新钱包中提取的 ETH 多于您存入的 ETH。
太难了,不做。
Sensitive Data Exposure
Access Log ⭐⭐⭐⭐
Gain access to any access log file of the server. 要求访问服务器日志
http://localhost:3000/support/logs
Confidential Document ⭐
题目要求找到一个秘密文件。看了solution才知道从哪入手。
在about us 页面有一个文件链接地址 http://10.100.33.10:3000/ftp/legal.md
去掉url中的文件引用,可以看到ftp目录所有文件,随便点击一个,解决该问题。
??Email Leak ⭐⭐⭐⭐⭐
Perform an unwanted information disclosure by accessing data cross-domain.
通过访问跨域数据来执行不必要的信息泄露
在应用程序的某个地方有一个 API 端点,它将允许 要跨域访问的数据。通常,同源策略会 防止这种情况,但此端点启用了特殊功能,该功能将
在某些情况下允许跨域访问。
Exposed Metrics
题目要求找到监控端点,提示给了监控用的是prometheus
访问ip:3000/metrics 解决
访问开发人员遗忘的备份文件 ⭐⭐⭐⭐
在ftp下面可以看到bak文件,直接访问提示只支持md和pdf,使用Poison Null Byte(%00)欺骗过滤器。
访问:http://localhost:3000/ftp/package.json.bak.md
无效,将%编码为%25.
访问 http://localhost:3000/ftp/package.json.bak%2500.md
可以成功下载该文件。
访问销售人员遗忘的备份文件 ⭐⭐⭐⭐
与上题思路一样
http://10.100.33.188:3000/ftp/coupons_2013.md.bak%2500.md 可以将文件下载下来。
—Leaked Unsafe Product⭐⭐⭐
识别从商店中移除的不安全产品,并告知商店哪些成分是危险的。
----在不使用注入的情况下窃取他人的个人数据 ⭐⭐⭐⭐
Login MC SafeSearch ⭐⭐
使 题目要求用MC SafeSearch 的原始用户凭据登录,仅接受原始密码作为解决方案。使用 SQL 注入或其他攻击不算在内。
- MC SafeSearch 是一位说唱歌手,他制作了歌曲 “Protect Ya’ Passwordz” ,这首歌很好地解释了密码和敏感数据保护。
做这个题需要看youtobe视频,无法看,卒。
solution
Meta Geo Stalking ⭐⭐
Determine the answer to John’s security question by looking at an upload of
him to the Photo Wall and use it to reset his password via the Forgot
Password
mechanism.
要求回答john的安全问题,通过查看他上传的照片。
solution
总结:这题的启示是社交网络可能泄露你的安全问题,导致攻击者可以修改你的密码,所以安全问题也没那么安全。
Misplaced Signature File ⭐⭐⭐⭐
访问放错位置的 SIEM 签名文件
Poison Null Byte攻击
10.100.33.188:3000/ftp/suspicious_errors.yml%2500.md
Visual Geo Stalking
Determine the answer to Emma’s security question by looking at an upload of
her to the Photo Wall and use it to reset her password via the Forgot
Password
mechanism.
题目要求回答emma的安全问题
重置密码链接,输入email可以看到emma的安全问题是第一个工作的公司。
照片墙中有emma发布的照片,从logo看出答案 答案ITsec 输入为安全问题答案,重置密码解决。
NFT Takeover ⭐⭐
Take over the wallet containing our official Soul Bound Token
(NFT).题目要求接管官方NTF,无思路。
solution 0x5bcc3e9d38baa06e7bfaab80ae5957bbe8ef059e640311d7d6d465e6bc948e3e
重置 Uvogin 的密码 ⭐⭐
通过“忘记密码”机制重置 Uvogin 的密码,并回答 他的 安全问题。
又是一个信息挖掘题,直接抄答案 Silence of the Lambs
重置密码解决
Retrieve Blueprint ⭐⭐⭐⭐⭐
要求下载这个产品的蓝图 OWASP Juice Shop Logo (3D-printed)
从 http://localhost:3000/public/images/products/3d_keychain.jpg 下载产品图片并查看 其
Exif 元数据
-
研究相机模型条目 OpenSCAD 发现这是一个 程序来创建3D模型,该模型适用于文件
.stl
-
由于没有给出关于蓝图文件名或任何内容的进一步提示,因此 幸运猜测或蛮力攻击是您唯一的选择
-
下载 http://localhost:3000/assets/public/images/products/JuiceShop.stl 以解决这一挑战
Visual Geo Stalking⭐⭐⭐⭐
通过查看 Emma 上传到照片墙的内容来确定她安全问题的答案,并使用它通过忘记密码机制重置她的密码
也可以通过查看来确定照片的拍摄地点 图像中的视觉线索。某位用户上传了一张图片 他的旧工作场所。看看他的安全问题是什么,看看
如果你能通过查看他上传的图片找到答案。
- 查看视觉线索以确定图片中显示的公司 并使用它来回答安全问题。
-
转到照片墙并搜索已发布的照片 用户 。
E=ma²
-
打开图像,以便可以放大它。
-
在中层最左边的窗户上,你可以看到一个标志 公司。可以看出,徽标显示了名称。
ITsec
-
转到登录页面,然后单击 忘记密码? 。
-
填写为电子邮件和答案 安全问题。
emma@juice-sh.op``ITsec
-
选择一个新密码,然后单击 更改 。
Login Amy ⭐⭐⭐
Log in with Amy’s original user credentials. (This could take 93.83 billion
trillion trillion centuries to brute force, but luckily she did not read the
“One Important Final Note”)
搜索93.83 billion trillion trillion centuries
在你的针藏的有多好?网站里发现
![image-20210219111255091](https://img-
blog.csdnimg.cn/img_convert/ddc55af6782da057f92176ea57504fa1.png)
可得一个示例密码 D0g…
得到最终密码为 K1f…
XML 外部实体 (XXE)
docker部署时不可用
Security Misconfiguration
–跨站点成像 ⭐⭐⭐⭐⭐
将可爱的跨域小猫贴在我们的快递箱上。
Deprecated Interface
Use a deprecated B2B interface that was not properly shut down.
题出的无力吐槽,要求找到一个过期的B2B接口。
在complain菜单,上传文件,筛选的是pdf和zip,查看源码,搜索zip 发现除了pdf和zip,还支持xml,所以上传一个xml文件提交解决这个题。
Error Handlingstar_rate
Provoke an error that is neither very gracefully nor consistently handled.
Error Handling - OWASP Cheat Sheet
Series
登录支持团队 ⭐⭐⭐⭐⭐⭐
使用支持团队的原始用户凭据登录,而不应用 SQL 注入或任何其他绕过。
这个问题6颗星不是盖的。
1、要知道在ftp目录下有一个incident-support .kdbx文件
2、能使用软件这个文件,但是不知道密码。
3、查找源代码,找出密码的规则。
4、暴力破解找到密码
5、还需要知道support的邮箱(如果使用admin,在admin section,可以找到support的邮箱)
support@juice-sh.op
J6aVjTgOpRs@?5l!Zkq2AYnCE@RF$P
Unvalidated Redirects
Outdated Allowlist
Let us redirect you to one of our crypto currency addresses which are not
promoted any longer.
题外话
初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:
2023届全国高校毕业生预计达到1158万人,就业形势严峻;
国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。
一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。
6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。
2022届大学毕业生月收入较高的前10个专业
本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。
具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。
“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。
网络安全行业特点
1、就业薪资非常高,涨薪快 2022年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!
2、人才缺口大,就业机会多
2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
行业发展空间大,岗位非常多
网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…
职业增值潜力大
网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。
随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。
从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
行业发展空间大,岗位非常多
网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…
职业增值潜力大
网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。
随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。
从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!## 网络安全工程师(白帽子)企业级学习路线
第一阶段:安全基础(入门)
第二阶段:Web渗透(初级网安工程师)
第三阶段:进阶部分(中级网络安全工程师)
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
学习资源分享
![](https://img-blog.csdnimg.cn/img_convert/294aa2daeab8095c89ece6b1eaca229e.jpeg)