在这篇文章中,我将跟大家分享关于“不安全的直接对象引用”(IDOR)攻击的相关内容。没错,正如本文标题所写的那样,我在OLX所托管的网站上发现了一个IDOR漏洞,并将其披露在了HackerOne上,因此我觉得是时候写一篇Write-Up了。
背景内容
OLX托管着多个国家的LetGo网站,其中还包括荷兰在内。LetGo是一个类似eBay的网站,你不仅可以在LetGo上购买新的东西,而且还可以帮你处理掉不要的二手物品,有些类似天朝的X鱼。
通过研究之后,我在这个网站上发现了一个IDOR漏洞,这个漏洞不仅能够允许我接管他人所上传的广告信息,而且还可以修改价格和描述,你肯定想象不到我当时是有多兴奋!虽然修改操作还需要进行一个人工审批过程,但对我来说至少能实现就行了。一般来说,将价格从40欧元改成35欧元都是可以通过的。除此之外,我的账号通过了几次人工审核之后已经被添加到白名单之中了,因此以后就都不用审核了。
因为网站没有实现频率限制,而且网站服务所提供的API还可以列举出所有的广告,因此我们也许可以编写一个脚本来自动化实现所有操作。比如说,列出所有的广告,然后接管每一条广告,并修改对应的价格。
当然了,我肯定不会真的去这样做,我也不需要去证明这个漏洞的严重性或者给网站造成经济损失。所以当我发现了这个IDOR漏洞之后,我便立刻报告了该漏洞。需要注意的是,我的PoC用我自己的多个测试账号,我并没有去接管其他人的广告,毕竟安全第一嘛!
如何找到了这个IDOR漏洞
在得到了OLX的允许之后,接下来就是披露漏洞细节的时间啦!
首先,我们需要设置一个代理来查看iOS/Android端App的流量数据。这些流量是经过了SSL加密的,但这并不重要(导入CA BurpSuite规范)。但是现在有的App实现了SSL Pinning特性,因此BurpSuite CA就没有效果了,但是你可以通过禁用(Unpin)这种特性来绕过这种安全保护层。其中一种方法是通过对App进行逆向分析和检测来实现,另一种方法就是在系统设置中禁用。
现在我手上有一台已越狱的iPad(安装了Cydia)和一台Android手机(安装了Xposed模块),两台设备均禁用了SSL Pinning。这样一来,你就可以使用类似BurpSuite这样的代理来拦截任意一款App的流量了。除此之外,你也可以安装Android模拟器来实现整个操作,推荐genymotion或android stuidio。
当你在使用iOS或Android端App的过程中,我们可以通过拦截API调用信息来了解关于API调用的信息,并指导如何重放调用过程。
设置测试账号:
账号#1:
1. 使用令牌‘111111’发布一个新的广告(返回ID,测试场景中ID为888888)。 2. 等待审核通过。 3. 审核通过之后将其发布到网站上。
账号#2:
1. 通过调用搜索API来获取广告列表。 2. 通过发送POST调用来攻击目标广告,测试场景中我们选择攻击刚发布的广告,ID:888888。 3. 接管广告瞬间就可以完成,现在这个广告已经属于账号#2的了,而不是账号#1的。 4. 等待审核通过。 5. 审核通过,并将修改后的广告发布到网站上。
在使用账号#2发动攻击的过程中,涉及到两个API调用:GET /i2/ajax/ads/(用于获取ID)和POST /i2/newadding/(用于接管并修改广告)。
GET调用可以列举出所有的广告信息,其中包括ID在内,具体如下所示:
POST调用(即实际的攻击过程/IDOR)如下所示:
需要注意的是,我只是将我拦截下来的GET调用和POST调用重放了一次,然后用账号#2的令牌替换掉了账号#1的令牌。
在这里我需要提醒大家,在进行类似的分析操作时一定要使用测试账号,而且不要造成什么实际的破坏,在动手之前可一定要考虑清楚啊各位,这可不是在玩游戏。
积累经验
1. 在选择参与漏洞奖励计划时,一定要选择记录良好的计划,因为如果你不谨慎选择的话,你的努力很可能会“付诸东流”。
2. 当你在发现一个安全问题时,你一定要掌握那个攻击的“度”。在遇到问题是别气馁,继续努力就行了,有什么难题就记录下来,去社区请教大神就好。