Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何发现Web App Yummy Days的安全漏洞?

如何发现Web App Yummy Days的安全漏洞?

作者头像
FB客服
发布于 2019-05-09 07:27:31
发布于 2019-05-09 07:27:31
2.1K00
代码可运行
举报
文章被收录于专栏:FreeBufFreeBuf
运行总次数:0
代码可运行

作为一个金融Web应用的开发人员,我对安全问题一直尤为关注。在过去的两年里,我参与的一些Web应用在进入生产模式之前,都会经过全面严格的安全检查,以确保它们在完全投入使用后的安全性。

在这次的经历中,也让我学到了很多关于安全的知识 - 如身份验证,潜在的危险请求,注入等等 - 以及如何设计更为安全的应用程序。

安全是我的激情所在,而吃又是我的另一种激情。午餐时间是我一天中最享受的时刻之一。El Tenedor (在西班牙)/ The Fork 是预订餐厅的最方便的应用程序,其中包含很多的折扣,可以帮我省下不少的钱。

在本文中,我将向你展示我是如何发现Web App Yummy Days的安全漏洞的,以及如何构建一个简单的自动客户端,让我获得Yummy Days促销的奖品。

免责声明:本文中表达的观点是作者自己的观点,并不等同The Fork公司的观点。我已通过电子邮件通知了The Fork,他们已采取适当措施解决了该问题。此外,我还隐藏了URL等敏感信息。 注意:文中某些部分可能需要你具备一定的技术知识进行理解。

The Yummy Days

对于那些不熟悉的人来说,The Yummy Days是一个为期一周的促销活动,只要你在每日游戏中保持一致,你就可以赢得高达120€的免费餐和Yums的一套奖品,这些奖品将被添加到你的帐户并可兑换折扣(1000 Yums相当于餐厅账单10欧元的折扣)。

促销活动开始后,可以在The Fork app上看到一个活动banner。打开后的界面如下所示:

要参与游戏,你需要提供你的电子邮件,以获取游戏资格,然后单击“PLAY”按钮。提交此表单时,你必须要单击按钮才能触发动画并查看你是否赢得了奖品。

你可以每天玩一次,连续玩7天,来赢得奖品。

如果你够幸运,你会从沙拉中取出一个Yum,这表明你获得了奖品,你将获得一个代码可以在下一个预订中使用,Yums会被添加到你的帐户。反之,你则会从沙拉中取出紫色的生菜(或其他紫色的东西),这表示你没有中将。

我玩了三四天这个游戏,获取到了大概300个Yums!

对表单的思考

就在Yummy Days的最后一天,询问我电子邮件地址的表单无意中引起了我的注意和思考。促销页面是在某种嵌入式浏览器中打开的,我可以很容易地看到正在访问的URL( 隐藏在上图中)。

我很好奇,所以我在我的计算机上打开了一个URL,其中启用了谷歌浏览器及其开发者工具选项,以记录我在Yummy Days促销中的最后一次游戏中的所有请求。

很不幸,但我可以分析请求日志,以了解在每日游戏中发生的事情。似乎用户界面正在向Restful API服务器发出请求,所以我保存了请求和响应,我尝试再次使用我的电子邮件地址,我被重定向到了一个说我已经玩过游戏的提示页面。

然后,我尝试再次使用我的另一个电子邮件地址,而不是在The Fork应用程序中注册,看看会发生什么,令人惊讶的是我能够再玩一次!这意味着API未验证插入的电子邮件是否已在应用程序中注册。这意味着我可以使用随机电子邮件地址无限次地玩游戏,获取更多的奖品,但我不能够这么做。

有人可能会认为这不是一个严重的问题,因为,这需要我们手动填写一个随机的电子邮件地址,接受促销条件,在幸运的情况下保存代码,并反复重复整个过程。虽然这个人会获得一些奖品,但这不会对促销的结果产生太大影响,但我要是将这个过程自动化并在每秒钟重复一次呢?

自动化执行

有很多不同的方法可以来自动化这个过程,但我最喜欢的是Postman。Postman是一个客户端,它允许我们向API发出HTTP请求,并在每个请求前后执行代码片段。

你还记得之前我使用Google Chrome Developer Tools记录的游戏过程中的所有请求吗?现在我们就要用到这些请求了。为此,我创建了一个包含三个请求的集合(Get Cookies,Fill Form 和 Play)。

第一个请求Get Cookies,它是HTTP GET到Yummy Dayspage的url请求。在Test选项卡中,你可以放置一段将在请求之后执行的代码,我设置了两个Postman环境变量,其中包含响应附带的两个Cookie的值,位于Set-Cookie header中,有效期为请求后15分钟。

在第二个请求Fill Form中,我想复制表单提交,即HTTP POST到url。我创建了一个简单的预请求脚本,一个在请求之前执行的代码,用于设置一个随机生成的电子邮件地址的环境变量。

我还使用这个生成的电子邮件设置了POST的JSON body,如下所示:

第一次尝试返回500状态码(内部服务器错误),表明该请求有一些问题。查看Google Chrome中记录的请求,我将之前存储的两个Cookie与其他Cookie一起设置为了header,这次响应码为200,太棒了!

最后在Play请求中,我将复制触发动画按钮的行为,以检查你是否赢得奖品。这是对URL的简单GET,使用前一个请求的相同标头。

我添加了一个test,以检查是否已赢得奖品,过滤尝试没有任何奖品或重复的电子邮件地址。如果在该尝试中有奖品,则对该请求的响应将记录在Postman控制台中。

我已收集了三个可执行的请求,以便用一个随机的电子邮件地址来玩游戏,因此我可以在N次执行的迭代中执行这个请求。

使用Collection Runner,我跑了100次游戏,但并没有获奖,所以我决定尝试更多的迭代次数,可以看到一个Playrequest的测试通过,并且以下JSON被记录到了控制台,表这明我赢得了奖品!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ “id”: 16490, “code”:******, //Code has been hidden “date_to_win”: “2018–06–10 17:36:56”, “type”: “300”, //300 Yums price “value”: 5, “user_id”: 217467, “country_id”: 1, “created_at”: null, “updated_at”: “2018–06–10 17:36:57”}

到这,我已经证明我可以自动获取Yummy Days的促销奖品,这似乎是基于时间和国家的(通过date_to_win和country_id属性就可以看出),并严重影响促销的结果(updated_at与date_to_win只相差了一秒!)。

天使还是恶魔?

想象一个“邪恶”的场景:

如果我在促销期间不间断执行这些请求会发生什么?如果我为所有国家执行这些请求又会发生什么呢?

只要我愿意,我将能够获得大量的Yummy Days促销奖品。

另外,我需要知道的是它是否会对来自同一IP的大量请求有某种限制。恶魔总是贪婪的,我创建了一个简单的脚本,使用Newman在shell中无限循环运行导出的Postman collection:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while true;do newman run TheForkYummyDays.postman_collection.json;done

我不间断地执行了将近45分钟,但并没有被服务器阻止。在这段时间里,我共获得了35个奖品,300个Yums,其中包括1个1000的Yums和1个2000的Yums。

这时在我右肩的天使开始提醒我,并说服我让我停止,现在是时候通知The Fork有关漏洞的信息了。我给他们发了一封电子邮件,其中包含我赢得的不同奖品的折扣代码以及技术细节。

几天后,我收到了他们的邮件回复,并告知我说他们已将问题报告给技术部门解决,为此他们奖励了我1000 Yums的折扣码表示感谢!

缓解措施

在服务器端检查电子邮件是否是在The Fork上注册的

这应该是解决这个问题的最好方法,无论在UI上进行哪些检查,都应始终在服务器端完成安全检查。这将不允许任何未注册的电子邮件地址参与促销活动。

在The Fork应用程序中嵌入促销页面

如果Yummy Days促销页面嵌入在The Fork app中,而不是在嵌入式浏览器中打开,那么想要查看The Yummy Days的URL就会非常困难。如果你要嵌入iframe,那么我建议使用X-Frame-Options标头,只将此页面嵌入到允许的URL中,从而防止Clickjacking攻击。

阻止超过请求数限制的IP地址

如果同一IP在规定的时间段内超过一定数量的请求,应当进行限制或阻止。

*参考来源:hakin9,FB小编secist编译,转载请注明来自FreeBuf.COM

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Laravel CSRF 保护
跨站点请求伪造(英语:Cross-site request forgery)是一种恶意利用,利用这种手段,代表经过身份验证的用户执行未经授权的命令。值得庆幸的是,Laravel 可以轻松保护您的应用程序免受跨站点请求伪造(CSRF)攻击。
崔哥
2023/04/30
1.7K0
在浏览器上,我们的隐私都是如何被泄漏的?
本文探讨了浏览器自动填充功能所带来的安全隐患,并提出了浏览器供应商应采取的措施来保护用户隐私。文章指出,自动填充功能使得第三方跟踪器可以滥用用户的登录信息,从而侵犯用户的隐私。同时,文章也提出了一些解决方案,如使用 HTTPOnly 和 Secure 标志来保护用户 Cookie,以及使用内容安全策略来限制第三方脚本的访问。这些措施可以帮助浏览器供应商更好地保护用户隐私,同时确保网站能够正常运行。
企鹅号小编
2018/01/04
1.9K0
在浏览器上,我们的隐私都是如何被泄漏的?
单点登录SSO的身份账户不一致漏洞
由于良好的可用性和安全性,单点登录 (SSO) 已被广泛用于在线身份验证。但是,它也引入了单点故障,因为所有服务提供商都完全信任由 SSO 身份提供商创建的用户的身份。在本文中调查了身份帐户不一致威胁,这是一种新的 SSO 漏洞,可导致在线帐户遭到入侵。该漏洞的存在是因为当前的 SSO 系统高度依赖用户的电子邮件地址来绑定具有真实身份的帐户,而忽略了电子邮件地址可能被其他用户重复使用的事实在 SSO 身份验证下,这种不一致允许控制重复使用的电子邮件地址的攻击者在不知道任何凭据(如密码)的情况下接管关联的在线帐户。具体来说,首先对多个云电子邮件提供商的帐户管理策略进行了测量研究,展示了获取以前使用过的电子邮件帐户的可行性。进一步对 100 个使用 Google 商业电子邮件服务和自己的域地址的流行网站进行了系统研究,并证明大多数在线帐户都可以通过利用这种不一致漏洞而受到损害。为了阐明电子邮件在野外重复使用,分析了导致广泛存在的潜在电子邮件地址冲突的常用命名约定,并对美国大学的帐户政策进行了案例研究。最后,为终端用户、服务提供商和身份提供商提出了一些有用的做法,以防止这种身份帐户不一致的威胁。
CDra90n
2023/06/28
1.4K0
单点登录SSO的身份账户不一致漏洞
PortSwigger之身份验证+CSRF笔记
https://portswigger.net/web-security/all-labs#authentication
FB客服
2021/09/16
4K0
十年未被发现!现代汽车曝重大安全漏洞,黑客可远程解锁、启动汽车
据cybernews消息,现代汽车APP存在一个重大安全漏洞。利用这个漏洞,黑客可以远程解锁、启动汽车。更令业界感到惊讶的是,这个漏洞已经存在了10年之久,影响了自2012年生产的现代汽车,以及旗下高端品牌捷尼赛思汽车。但现代汽车发布公告称,该漏洞并未被广泛利用。 这两个APP的名称是MyHyundai 和 MyGenesis,允许经过身份验证的用户启动、停止、锁定和解锁他们的车辆,可进一步提升车主的使用体验。 根据网络安全研究人员Sam Curry的说法,原本现代和捷尼赛思汽车的APP仅向授权用户提供
FB客服
2023/03/29
9600
十年未被发现!现代汽车曝重大安全漏洞,黑客可远程解锁、启动汽车
python-Django-表单验证(一)
表单验证是Web开发中的一个重要方面,它有助于确保用户输入的数据符合预期并且是安全的。Django表单提供了一种简单而强大的方法来验证用户提交的表单数据。
玖叁叁
2023/04/23
1.1K0
密码学系列之:csrf跨站点请求伪造
CSRF的全称是Cross-site request forgery跨站点请求伪造,也称为一键攻击或会话劫持,它是对网站的一种恶意利用,主要利用的是已授权用户对于站点的信任,无辜的最终用户被攻击者诱骗提交了他们不希望的Web请求。 恶意网站可以通过多种方式来发送此类命令。 例如,特制的图像标签,隐藏的表单和JavaScript XMLHttpRequests都可以在用户不交互甚至不知情的情况下工作。
程序那些事
2021/03/18
3K0
AppScan扫描的测试报告结果,你有仔细分析过吗
通过 IIS 6 引入的 HTTP 协议堆栈 (HTTP.sys) 错误地解析了特制的 HTTP 请求。因此,远程攻击者可能执行拒绝服务供给,并可在系统帐户的环境中执行任意代码。该漏洞会影响 Windows 7、Windows Server 2008R2、Windows 8、Windows Server 2012、Windows 8.1 和 Windows Server 2012 R2 上安装的 IIS。Microsoft 发布了通过修改 Windows HTTP 堆栈处理请求的方式来解决漏洞的更新。
软件测试君
2020/01/13
9.8K0
AppScan扫描的测试报告结果,你有仔细分析过吗
十个最常见的 Web 网页安全漏洞之首篇
OWASP 或 Open Web Security Project 是一家非营利性慈善组织,致力于提高软件和 Web 应用程序的安全性。该组织根据来自各种安全组织的数据发布顶级 Web 安全漏洞列表。
Xcnte
2021/12/14
2.8K0
十个最常见的 Web 网页安全漏洞之首篇
Web Security 之 CSRF
在本节中,我们将解释什么是跨站请求伪造,并描述一些常见的 CSRF 漏洞示例,同时说明如何防御 CSRF 攻击。
凌虚
2021/03/19
2.6K0
Web Security 之 CSRF
教你如何编写测试用例
测试用例是一组有条件的用例,QA可以依靠这些条件来确定应用程序、软件系统或某些功能是否按预期执行。
软测小生
2020/04/14
1.8K0
教你如何编写测试用例
5月这几个API安全漏洞值得注意!
漏洞详情:微软官方发布公告称,其.NET Core 2.1、3.1和5.0版本中存在一个漏洞(CVE-2023-31479),攻击者可以利用该漏洞在受影响的系统上查询、编辑、删除或添加文件(包括重要文件),从而导致系统被入侵的风险。
小阑本阑
2023/06/02
9120
5月这几个API安全漏洞值得注意!
假冒App引发的新网络钓鱼威胁
网络钓鱼(即假的,恶意的电子邮件)常常被人鄙视。在全球聚焦于网上的“零日漏洞攻击”(zero days)、网络“武器”和“动能”网络攻击的时候,网络钓鱼电子邮件似乎是过时、几乎是二流的概念。
Alicia
2018/07/23
1.5K0
手把手教大家如何解决QQ被盗的风险。
  这种情况在QQ群里面见的多。通常是发送一些具有诱惑性的链接诱导你去点击。也可能会是一些二维码,如下图。为了做这期,能更好的了解其盗号的手段,我把凡是我看到的盗号链接都点了个遍,那些恶意二维码我也扫了个遍。这是我在了解其原理并做了相应的安全措施前提下做的,小伙伴们千万不要去乱点乱扫。
知识与交流
2024/06/03
1.2K0
手把手教大家如何解决QQ被盗的风险。
经常遇到的3大Web安全漏洞防御详解
程序员需要掌握基本的web安全知识,防患于未然,你们知道有多少种web安全漏洞吗?这里不妨列举10项吧,你们可以自己去网站找相应的教程来提升自己的 1、命令注入(Command Injection) 2、eval注入(Eval Injection) 3、客户端脚本攻击(Script Insertion) 4、跨网站脚本攻击(Cross Site Scripting, XSS) 5、SQL注入攻击(SQL injection) 6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7、Session 会话劫持(Session Hijacking) 8 Session 会话固定(Sessionfixation) 9、HTTP响应拆分攻击(HTTP Response Splitting) 10、文件上传漏洞(File Upload Attack)
友儿
2022/09/11
5580
欧洲中央银行承认存在安全漏洞 有个人资料被盗
欧洲央行(ECB)承认,系统安全漏洞导致个人资料被窃取。欧洲央行宣布一个链接到它的公共网站数据库被入侵,导致相关个人资料被盗。网络罪犯能够在用户在银行网站注册、访问和其他活动过程中,抓住一个数据库存储的细节,进行信息盗取,幸运的是这个数据库是与欧洲央行内部系统数据库存储硬盘是独立的。 欧洲央行称,“没有内部系统或市场敏感数据被破坏,然而电子邮件地址,物理地址和电话号码都被偷了。” 欧洲央行表示,大部分的数据是加密的,但注册者的联系信息。据英国广播公司(BBC),大约
安恒信息
2018/04/10
7010
在Docker上安装Discourse论坛系统
DiscourseStack Overflow的联合创始人 Jeff Atwood 推出的一个新的开源论坛项目,其目的是为了改变十年未变的论坛软件。它摒弃了传统论坛的话题讨论形式、拥有自学习系统、全Web应用同时适用于桌面和移动终端。 在本教程中,我们将使用Docker(一个容器化应用程序)在一个隔离的环境中安装Discourse。
宇cccc
2018/07/25
3.8K0
渗透测试指南-第1部分(OSINT-被动侦察和资产发现)
不要让“被动”这个词欺骗您。这不是轻便的侦查;您可以通过被动侦察来发现大量信息,而无需进行任何干预。
紫禁玄科
2022/03/24
1.2K0
渗透测试指南-第1部分(OSINT-被动侦察和资产发现)
Microsoft Exchange 漏洞暴露了大约 100,000 个 Windows 域凭据
Microsoft Exchange 的自动发现协议实施中一个未修补的设计缺陷已导致全球大约 100,000 个 Windows 域的登录名和密码泄露。
Khan安全团队
2022/01/06
8500
实战 | 记一次价值 2500 美元的账户接管漏洞挖掘
在这篇文章中,我将分享我如何通过简单的 IDOR 绕过导致账户接管而赚取 2500 美元。
HACK学习
2023/01/03
7100
实战 | 记一次价值 2500 美元的账户接管漏洞挖掘
相关推荐
Laravel CSRF 保护
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档