专栏首页FreeBuf利用雅虎小型企业服务平台的目录遍历漏洞查看客户的信用卡信息

利用雅虎小型企业服务平台的目录遍历漏洞查看客户的信用卡信息

在这篇文章中,我将跟大家介绍如何利用雅虎小型企业服务平台的目录遍历漏洞查看客户的信用卡信息。在过去的一年半时间里,我一直都在对雅虎平台的安全性进行分析,而本文所要描述的内容也是我在这段时间里所得到的成果之一。

挖洞过程

在前期的侦察过程中,我首先想要知道的就是服务器端都运行着哪些东西。虽然这并不能直接让我拿到漏洞奖金,但这些信息可以帮助我识别公开的已知漏洞,或者在之后的漏洞利用过程中帮到我。

我们的测试目标是雅虎的小型企业服务平台,经过一段时间的分析之后,我首先找到了一个包含错误配置的页面,然后通过分析网络请求发现了其用户控制面板运行的是NodeJS,并且还对外暴露了一个模板。需要注意的是,这个模板本来应该是在客户端执行的,但这里却在服务器端执行了。

既然我们已经知道了该网站的控制面板部分运行的是NodeJS,那么我们就可以直接进行测试而不必绕弯路了。

在购买了订阅服务之后,我发现了一个有意思的页面。这个简单的页面负责给用显示PDF格式的发票信息,当用户点击了“Download”下载按钮之后,便可以查看自己的账单信息了。

查看PDF的节点如下:

https://www.luminate.com/my-services/invoices/INV08179455/pdf

一般来说,在面对这种节点地址时,我们首先会尝试修改其中的“INV08179455”参数。如果这里存在IDOR漏洞的话,那我们就可以查看其他人的账单信息了。

那么第一个问题就来了,这里为什么使用的是“PDF文件名/pdf”而不是“PDF文件名.pdf”呢?这很可能是因为网站在将PDF提供给用户之前,需要验证该账单确实属于发起请求的用户。听起来貌似是这样的,但随着我们不断地深入分析,这一猜想也被推翻了。

由于我们已经知道了服务器端运行了NodeJS,那我就可以尝试调用一些特殊参数来进行测试了,例如:

NodeJS "/view/ID"(这跟 PHP的"/view.php?id=ID"是一样的)

那么接下来,我们就可以向服务器发送一些数据并尝试让系统做一些它本不该做的事情了。在研究了几分钟与SQL注入有关的控制字符之后,我对网站的源代码也进行了分析,并以此来确保浏览器在请求PDF文件时不会进行其他不必要的函数调用。分析之后我得到了以下结论:

https://www.luminate.com/my-services/invoices/.%2fINV08179455/pdf
https://www.luminate.com/my-services/invoices/INV08179455/pdf

这两个HTTP请求返回的是相同的结果。虽然很多Web服务器会直接将”.%2f”当作”./“来处理,并且最终返回相同的目录以及参数,但NodeJS会将”.%2f”当作实际的发票ID目录参数来处理。如果真是这样的话,这就说明系统会使用发票ID目录参数来获取某些文件内容以显示PDF给用户,而用户可以提供”.%2”或者”..%2f”来指定需要提取的目录。为了证实这一点,我们可以发送下列请求:

https://www.luminate.com/my-services/invoices/..%2fINV08179455/pdf

果不其然,系统返回了“404-not found”,因为这是一个无效的PDF参数。为了进一步确认,我还需要找到PDF文件真正所在的目录,这也就意味着我需要进行“暴力破解”了。此处省略一万字…最终我还是找到了我的PDF:

https://www.luminate.com/my-services/invoices/..%2finvoices%2fINV08179455/pdf

不知道你是否注意到了地址中“invoices”之前的目录?接下来,我又发送了如下请求:

https://www.luminate.com/my-services/invoices/..%2f..%2fmy-services%2finvoices%2fINV08179455/pdf

这个请求同样返回了“404-not found”,这也意味着服务器很可能在尝试从一个名叫“invoices”的文件夹中获取文件。思考片刻之后,我认为服务器很可能使用了某种字符串识别信息(例如账号ID或电子邮箱)来给用户创建专门的文件夹,之后再通过索引来从中获取用户的文件。这样的话,当用户正常调用该节点时,则需要提供“accountID/invoices/ID”并禁止他人通过修改ID号来查看他人的账单PDF。下面给出的是一些失败的请求尝试:

https://www.luminate.com/my-services/invoices/..%2f..%2fsamwcurry@gmail.com%2finvoices%2fINV08179455/pdfhttps://www.luminate.com/my-services/invoices/..%2f..%2faccountIDhash%2finvoices%2fINV08179455/pdfhttps://www.luminate.com/my-services/invoices/..%2f..%2fsamwcurry%40gmail%2ecom%2finvoices%2fINV08179455/pdf

因此,我打算换一个角度来进行尝试。接下来,我又发送了如下所示的请求尝试:

https://www.luminate.com/order/confirmation/..%2forders%2forderIdhttps://www.luminate.com/my-services/more-info/json?uid=../subscriptions/subscriptionIDhttps://www.luminate.com/my-services/edit-payment-method?uid=../paymentmethods/paymentMethodID

这些请求可以帮助我找出相关目录的根目录,这样我也许就可以获取其他用户的目录文件了。此时我突然回想起来,该网站的域名控制面板部分有一个功能允许我们更新域名信息,你可以将域名修改成其他的东西,而此时服务器将返回一段非常有意思的错误信息:

{"error":"Id samwcurry@gmail.com#vjdoes not have permission to modify the domain example.com."}

为什么上面的邮件地址结尾有一个“#vj”呢?说实话,我自己也不清楚…我只知道这里有这样一个字符。不过需要注意的是,这个节点是不可利用的。但是,当我们使用这个邮件地址(末尾跟加上“#vj”,URL编码后为“%23vj”)来访问我的个人文件时,竟然成功了!

 https://www.luminate.com/my-services/invoices/..%2f..%2fsamwcurry@gmail.com%23vj%2finvoices%2fINV08179455/pdf

仔细分析下来,大致的情况应该是这样:

- samwcurry@gmail.com#vj  services    -serviceID (full folder samwcurry@gmail.com#vj/services/serviceID)  invoices    -invoiceID (full folder samwcurry@gmail.com#vj/invoices/invoideID)  paymentmethods-paymentMethodID (full folder samwcurry@gmail.com#vj/paymentmethods/paymentMethodID)

而后续测试也证明,我们可以使用这种方法来访问其他用户的文件。在真实的攻击场景中,攻击者只需要知道目标用户的邮箱地址,就可以查看到他们的支付信息了,其中包括用户信用卡号的最后四位数、卡片到期日、以及账单地址等等

总结

雅虎的小型企业服务平台将用户数据存储在一系列目录之中,而他们只是尝试通过模糊文件夹名称来保护这些数据的安全。对于攻击者来说,只要他们知道目标用户的邮箱地址,他们就能够使用字典来暴力破解出可猜测的服务ID,并最终从服务器所返回的请求中查看到用户的信用卡支付信息。

漏洞时间轴

2017年10月21日:漏洞提交

2017年10月23日:漏洞归类

2017年11月08日:漏洞修复

漏洞奖金未确认

本文分享自微信公众号 - FreeBuf(freebuf),作者:Alpha_h4ck

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Halcyon:专门用于开发Nmap脚本的IDE

    Halcyon是一个开源的专门设计用于开发Nmap脚本的IDE。通过Halcyon你可以开发从侦察到利用的各类Nmap高级扫描脚本。如果你想为该项目做出贡献或有...

    FB客服
  • 手工检测Web应用指纹的一些技巧

    0x01 Web 应用技术概览 1.1 架构 大多数 web 应用可以粗略划分为三个组件(component)。 1、客户端, 大多数情况下是浏览器。 2、服务...

    FB客服
  • 如何绕过电子邮件格式过滤进行SQL注入

    前不久,我加入了一家印度尼西亚金融科技公司的bug赏金计划。经过一番测试,我在“忘记密码”功能中找到了一个电子邮件输入框。依据经验,我开始尝试以下输入。

    FB客服
  • 干货 | GraphQL 基于 SPA 架构的工程实践

    大家好,我是阿里的邓若奇。我和 Scott 是好友,非常幸运今天站在这里和大家面对面的交流。我是一名前端,听说今天来的前端特别多,非常高兴,压力也很大。

    CODING研发管理系统
  • AI 下一拐点,图卷积神经网络有多强大?

    2012年至今,随着深度神经网络理论与计算设备的发展,卷积神经网络(CNN)得到了快速发展,并被大量应用于计算机视觉、自然语言处理等领域。尤其是在图像分类、目标...

    Amusi
  • 重磅!微软将在Windows 10系统中添加人工智能功能

    AiTechYun 编辑:Yining 微软正在对人工智能和机器学习进行大笔投资。微软计划在Windows 10中加入更多人工智能功能。这个软件巨头在今天为开发...

    AiTechYun
  • Windows 10:系统美化篇

    Traffic Monitor 是一款主打「颜值」的网速监控小工具,具体效果如上图.

    乐心湖
  • 在spring boot中使用spring security防止CSRF攻击

    在一个spring boot项目中,需要防止CSRF攻击,可以只把spring security中的相关filter引入来进行. 在pom中添加相关依赖 ...

    大神带我来搬砖
  • 【程序源代码】非常好springboot开发框架

    mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、...

    程序源代码
  • 微软推人人可用的机器学习,打通windows应用程序任督二脉,惠及5000万开发者

    北京时间 5 月 19 日晚间 11 点,微软一年一度的「Build开发者大会」正式线上开幕。

    新智元

扫码关注云+社区

领取腾讯云代金券