【juice-shop靶场挑战】六星挑战
简述及环境说明
本篇是juice-shop靶场的六星挑战。靶机为kali_linux,攻击机为Windows11,靶场是目前最新版19.1.1,使用docker搭建。也由于是基于docker,有的挑战在docker环境下不兼容导致打不了,这些做不了的挑战这里就不演示了。详细配置内容和环境搭建可见专栏《juice-shop靶场挑战》的靶场搭建篇。
挑战内容
Arbitrary File Write
docker环境不支持,跳过。
Forged Coupon
伪造优惠券代码,获得至少80%的折扣。
在之前的四星挑战Forgotten Sales Backup中获取到了一个备份文件,打开后是优惠卷码。通过尝试发现是z85格式的密文,解密后得知优惠券的格式是“[月份年份]-[折扣]”。模仿这个格式写制作一张99%折扣的优惠卷码。

接着只需要正常使用优惠卷购买一个商品就能完成挑战。


Forged Signed JWT
伪造一个几乎正确的RSA签名的JWT令牌,该令牌模拟(不存在的)用户 rsa_lord@juice-sh.op 。
通过目录爆破找到存放公钥的目录encryptionkeys,其中“jwt.pub”就是要用到的。

在burp的HTTP历史记录中找一个最近的包,发到重放模块,其中Authorization请求头的内容就是jwt。

将jwt复制到能编辑jwt的软件中,将邮箱改成rsa_lord@juice-sh.op,加密方式改为HS256并使用刚刚获取的公钥进行加密得到新的jwt。

使用新的jwt进行发包,即可完成本挑战。


Imaginary Challenge
解决挑战#999。不幸的是,这个挑战并不存在。
cookie中的continueCode保存了完成的挑战,而continueCode是使用hashids生成,可参考http://hashids.org/ ,且使用的是默认盐值“this is my salt”。
使用相同的加密方法加密挑战id“999”,即可得到对应的continueCode。
69OxrZ8aJEgxONZyWoz1Dw4BvXmRGkM6Ae9M7k2rK63YpqQLPjnlb5V5LvDj
from hashids import Hashids
hashids = Hashids(
salt='this is my salt',
min_length=60,
alphabet='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
)
encoded = hashids.encode(999)
print(f"加密结果: {encoded}")
decoded = hashids.decode(encoded)
print(f"解密结果: {decoded}")
使用PUT方式访问/rest/continue-code/apply/69OxrZ8aJEgxONZyWoz1Dw4BvXmRGkM6Ae9M7k2rK63YpqQLPjnlb5V5LvDj即可完成挑战。


Login Support Team
使用支持团队的原始用户凭据登录而不使用SQL注入或任何其他绕过方法。
在ftp目录下有一个名为“incident-support.kdbx”的文件,这是一个keepass数据库文件,将其下载下来。

使用KeePassXC打开这个数据库文件,发现需要密码。在main.js中搜索support,找到一段代码,其中输出的提示大致意思是提示用户密码强度不符合标准,要求修改密码,同时上面给出了表达式。要求密码是12-30个字符且带大小写字母、数字和特殊字符。

假设数据库密码符合上述规则,利用相关单词和字符组合生成一个字典,最终通过字典暴力破解的方式得到数据库密码为“Support2022!”。使用密码解锁数据库即可查看到账号对应的密码为“J6aVjTgOpRs@?5l!Zkq2AYnCE@RF$P”。

使用密码登录support账号即可完成挑战。


Multiple Likes
以相同用户赞任何评论至少三次。
打开burp拦截后为一个商品点赞。

将拦截的数据包发送到攻击模块,payload设置为null,包数设置为20后攻击。

由于默认是10并发,所以前10个包都成功点赞,攻击结束一共赞了10次达到挑战要求,挑战完成。


Premium Paywall
解锁高级挑战来访问更多内容。
查看计分板页面源代码,在该挑战描述位置发现注释的密文。

在encryptionkeys目录有对应的解密密钥文件“premium.key”。
1337133713371337.EA99A61D92D2955B1E9285B55BF2AD42

使用openssl对其密文进行解密,得到一条路径“/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us”。
echo "IvLuRfBJYlmStf9XfL6ckJFngyd9LfV1JaaN/KRTPQPidTuJ7FR+D/nkWJUF+0xUF07CeCeqYfxq+OJVVa0gNbqgYkUNvn//UbE7e95C+6e+7GtdpqJ8mqm4WcPvUGIUxmGLTTAC2+G9UuFCD1DUjg==" | openssl enc -d -aes-256-cbc -K EA99A61D92D2955B1E9285B55BF2AD42 -iv 1337133713371337 -a -A

拼接路径进行访问即可完成挑战。


SSRF
通过服务器请求服务器上的隐藏资源。
要逆向写不来,这里直接说答案了,在profile个人资料页面将图片url设置为下面的地址即可完成挑战。
http://{靶场地址}/solve/challenges/server-side?key=tRy_H4rd3r_n0thIng_iS_Imp0ssibl3


SSTi
docker环境不支持,跳过。
Successful RCE DoS
docker环境不支持,跳过。
Video XSS
docker环境不支持,跳过。
Wallet Depletion
貌似要下软件,国内还不让下,跳过。
写在最后
这篇是juice-shop的六星挑战的内容,juice-shop靶场所有挑战已更新完毕,感兴趣的师傅可以前往专栏《juice-shop靶场挑战》查看。









