草庐IT

juiceshop安全测试环境搭建及闯关提升过程-1星-2星

测试星云 2023-10-10 原文

一、OWASP果汁店介绍

OWASP果汁店是OWASP组织提供的官方提升安全技术的示例网站:
源码:

二、搭建示例网站

使用docker

docker run --rm -p 3000:3000 bkimminich/juice-shop

完成的效果 如下图:
示例网站首页.png

三、闯关开始

基本按简单到难的方式,涉及的技术大家自己脑补自学。

第一星级-1 【*】:找到隐藏的记分板 类型:代码分析

1、点击搜索,发现url为http://IP/#/search,现使用chrome的F12找到main-es2018.js,在source,打开文件,使用pretty print查看内容。

开发者工具中找到js文件.png

2、搜索search这个关键词,这是个模块的路由。看是否有隐藏的路由。我们可以找到有score-board,administation等。
找到js中开发写的路由url.png

3、访问这个地址:http://IP/#/score-board,如下图,找到隐藏的记分板,如果你 成功,网站会有恭喜的成功了一个挑战!!
记分板.png

第一星级-2 【* 】查阅机密文件 类型:敏感信息泄漏

1、点击提示,组成url为http://IP/#/ftp;或使用上面方法也可以
2、进入查看能看的文件,发现机密文件

image.png

第一星级-3 【* 】是否有Xss注入的漏洞 类型:Xss攻击

在搜索框中输入xss注入用例(参考我写的安全用例https://www.jianshu.com/p/658f10a66acc
<iframe src="javascript:alert(`xss`)">
如果出现弹出框,就表示这个脚本运行了。如果换成其他攻击脚本也会执行。所有有这方面的漏洞。

image.png

第一星级-4 【* 】给商店一个毁灭性的零星反馈 类型:输入验证不当

有两种方法实现:
第一种:使用前端技术:修改disabled属性,提交按钮可提交(掌握这个技术可以随意修改任何属性)

1、进入客户反馈页面,输入反馈内容及公式验证结果,评价等级不选时,提交按钮是灰色的。使用F12在element,找到提交按钮的属性。(可通过按钮附近右键-检查定位按钮属性上下文)
找到提交按钮的属性.png

2、删除button的属性:disabled="true",mat-button-disabled,右键选择edit as html,删除后如下图:
编辑属性.png

3、随意点击白色的部分让删除的属性生效,这时看到提交按钮可以点击了。
提交按钮可编辑.png

4、点击提交,在network中找到发送成功并且rating:0评价是0.
提交成功.png

第二种:通过接口技术,修改评星为0,重发请求
1、使用fiddler 抓包,
2、找到提交评论的请求feedbacks,
3、将此请求拖拽到composer中,将post数据中rating的值改为0,再excute发送。

第一星级-5 【* 】:找到猫的照片并显示 类型:输入验证不当/恶作剧

1、在左侧边栏中进入【照片墙】,可看如下图:第一张图片显示不出来。

image.png

2、连接查看其他图片,并使用F12进入元素界面查看图片的原地址,并进行访问。
image.png

如果要访问直接使用网站地址+相对地址。
例如:http://IP:8001/assets/public/images/uploads/favorite-hiking-place.png
当我们访问第一个图片原地 址时:http://IP:8001/assets/public/images/uploads/?-#zatschi-#whoneedsfourlegs-1572600969477.jpg 是 访问不到的。
我们发现这个地址有问题,因为所有地址就是url不能有特殊字符和汉字,这些都要转码才可以。我记得因为http协议是美国人发明的,所以不支持汉语,哈哈,这些不支持的需要进行url转码。
3、搜索网上url转码:"#"的转码为%23,因此这个地址就变成了http://IP:8001/assets/public/images/uploads/?-%23zatschi-%23whoneedsfourlegs-1572600969477.jpg
image.png

4、在前端页面我们把这个地址修改正确就行了。
chrome-F12-元素,在未显示的图片右键-检查,在高亮的位置找到图片的链接,右键编辑as html,修改#为%23,再点击其他地方保存生效,左侧图片显示出来了

第一星级-6 【*】让我们将您重定向到我们不再使用的加密通用地址。

重定向:redirect
1、在提示信息中复制重定向的地址
2、在 main*.js中搜索

image.png

3、再 把地 址复制到url(http://IP地址/redirect?to=https://blockchain.info/address/1AbKfgvw9psQ41NbLi8kufDQTezwG8DRZm)
4、直接访问已经不用的重定向地址。
image.png

第一星级-7 【*】注册用户时请遵循DRY原则

1、注册用户,正常输入密码和验证密码,校验通过
2、回头再次修改密码为不同,提交注册成功


image.png

点评:开发一 般遵循DRY原则不写重复的代码,测试一般 使用 相反的手段,重复提交,回头修改等 。

第一星级-8 【*】让聊天机器人给你优惠 码

1、注册-登陆2、左侧边栏-客服聊天,3、一直 输入就 会得到优惠码。


image.png

第二星级-1【**】:登陆管理员账户 类型:sql注入

1、点击帐户,进入登陆页面,在用户名中输入注入 的用例 ' or 0=0 --(可参考我写的安全用例https://www.jianshu.com/p/658f10a66acc),密码随便输入,点击登陆。

sql注入.png

2、登陆成功的效果。
截屏2021-07-23 下午3.52.26.png

第二星级-2【**】:登陆管理员页面 类型:失效的访问控制

1、在第一关通过查看前端js得到一些路由-url的路径

查看js

2、直接访问的效果(http://IP:8001/#/administation
不允许进入

3、思考:访问管理员权限下的界面是否需要验证管理员的身份。于是先使用上面sql注入闯关的登陆管理员,再访问管理员页面地址http://IP:8001/#/administation,于是成功显示了只有管理员拥有的功能,可以查看所有注册的用户及客户反馈。
image.png

第二星级-3【**】 让你富有的订单,商品数量 为负数 类型:输入验证不当

1、抓到添加购物车的请求(fiddler)
2、修改数量为-100,重发(将请求拖拽到composer,修改数量为-100,excute提交)


image.png

3、成功后刷新购物车的响应如下:
image.png

4、在页面中刷新显示效果,可以接着支付,钱不会花掉,反到会增加。
image.png

image.png

image.png

第二星级-4 【**】删除所有 5 星级客户反馈

管理员 可 删除别人的反馈
1、上面通过sql注入方式登陆管理员账号
2、进行管理员界面administration
3、看到所有用户信息和客户反馈直接删除5星客户反馈就行。
下图通过接口层删除的


image.png

第二星级-5 【**】查看其他用户的购物车

1、找到购物车的id,更换ID(13-12)


image.png

2、直接在地址栏中输入将url中的13改成12就行

image.png

第二星级-6 【**】将其他产品放入另一个用户的购物篮

1、抓到一个添加购物车的请求
2、修改产品id和购物篮子的id,提交不成功,把购物篮子的id (BasketId)再复制一份(一个自己篮子,一个是别人篮子),再发成功


image.png

第二星级-7 【**】注册为具有管理员权限的用户

1、接口层发请求修改角色权限admin
POST向http://localhost:3000/api/Users提交请求:
{“email”:”888@qq.com","password":"admin","role":"admin"} 作为body
并且application/json作为Content-Type

image.png

第二星级-8 【**】以其他用户名发布一些反馈

1、删除隐藏hidden标签,激活无法修改的标签,
2、修改id,(用户名)


image.png

第二星级-9【**】以其他用户的身份发表产品评论或编辑任何用户的现有评论

抓包,修改,重发


image.png

有关juiceshop安全测试环境搭建及闯关提升过程-1星-2星的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  4. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  5. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  6. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  7. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  8. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  9. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  10. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

随机推荐