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

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

挖洞过程

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

我们的测试目标是雅虎的小型企业服务平台,经过一段时间的分析之后,我首先找到了一个包含错误配置的页面,然后通过分析网络请求发现了其用户控制面板运行的是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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

高并发的核心技术-幂等的实现方案

一、背景 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如: 1. 前端重复提交选中的数据,应该后台只产生对应这个...

13230
来自专栏逸鹏说道

当GitHub把我当成DDos攻击者拉进了黑名单中。。。

Github黑名单自救+快速稳定FQ 异常处理汇总-开发工具 http://www.cnblogs.com/dunitian/p/4522988.html 原...

36380
来自专栏北京马哥教育

linux系统被入侵后处理实战

作者 李振良 | 来源 51cto 糖豆贴心提醒,本文阅读时间8分钟,文末有秘密! ? 事件背景 操作系统:Ubuntu12.04_x64 运行业务:公司...

53750
来自专栏行者悟空

一次nginx引起的线上502故障

今天突然接到某PM的求救,说微信支付到应用的请求一直返回502,于是初步了解完情况后,就进入了问题排查阶段。

1.8K20
来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(十七):我要学习配置

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

21510
来自专栏信安之路

线下赛ASP靶机漏洞利用分析

继上次发表 记一次线下赛靶机攻击过程 后,看到反响不错,特此再写一篇,关于一台 ASP 靶机漏洞利用过程。

54100
来自专栏安恒网络空间安全讲武堂

【译】Cromos – 下载并注入代码到谷歌 Chrome 浏览器扩展中

? cromos是一个用于下载Chrome网页商店合法扩展的工具,还可以在应用程序背景下注入代码。并且举例而言,cromos通过PowerShell创建可执行...

23960
来自专栏FreeBuf

OpenSSH曝高危漏洞,Linux主机面临暴力破解威胁

OpenSSH软件被爆出一个简单却高危的漏洞,攻击者可以在短时间内进行数千次的登录尝试。 ? OpenSSH是最流行的Linux系统进行远程控制的软件。一般来说...

32170
来自专栏恰童鞋骚年

操作系统核心原理-3.进程原理(上):进程概要

进程管理、内存管理和文件管理是操作系统的三大核心功能,那么什么是进程呢?顾名思义,进程就是进展中的程序,或者说进程是执行中的程序。当一个程序被加载到内存之后就变...

22920
来自专栏沈唁志

Kindle 怎么使用电子邮件附件推送电子书到设备中?

之前买过 PHP 的书看,结果也没看到了几本,一是书都在家里,没给公司带,二是下班晚回去不想看了

61630

扫码关注云+社区

领取腾讯云代金券