Mobile Me Madness
我最近发布了我的Bucket Finder脚本,Darren在Hak5的一期节目中介绍了它。我收到一些反馈指出Mobile Me以相同的方式工作,允许用户通过以下风格的URL访问他们的公共账户:https://public.me.com/<账户名称>。知道Mobile Me存储的是个人信息而非商业信息,并且它与桌面端链接,我认为这将提供相当丰富的收获。不幸的是,Mobile Me不再接受新注册,所以我所做的所有分析都基于现有数据。
我发现一个账户有多个公共文件,并开始查看源代码,我注意到的第一件事是屏幕上显示的文件都不在源代码中,所以我推测我们必须查看某种AJAX调用来检索文件列表。使用Firebug,我发现了以下被调用并返回我所需要数据的URL:
访问此URL会以JSON格式给出一个漂亮的目录列表,我可以处理JSON,但更愿意处理XML,因为我已经有了处理它的框架,所以我开始操作查询字符串。我发现我可以删除reqid和lang字段,没有任何变化,将depth改为2会给出深度为2的目录列表,但改为3或以上会给出错误消息,所以虽然很希望,但不可能将其设置为99并一次性转储整个列表。
最重要的变化是当我删除repfmt字段时,返回的数据神奇地变为XML。这好多了!这让我得到URL:
https://public.me.com/ix/XXXX?protocol=roap&item=properties&depth=1
以及以下XML,我已缩减以显示一个文件和一个目录:
|
|
看起来像WebDAV,这给出了选择:解析为XML或找到并学习一个WebDAV库。既然我已经理解XML并且对WebDAV一无所知,我选择了解析XML。这很简单,如果D:resourcetype包含D:collection,那么它是一个目录,否则它是一个文件。对于文件,转储URL和相关信息。如果是一个目录,那么更改URL指向该目录并递归。
这应该就是它了,它是简单的XML,解析它并继续,但我在用浏览器进行初步侦察时注意到,JSON包含了*nix称为隐藏文件和目录的内容,那些以点开头的。我注意到的主要是.Trashes,OS X的回收站。当我查看我的脚本输出时,我的测试用户的.Trashes目录缺失了。
我的第一个想法是JSON和WebDAV之间的差异,但改回JSON并没有使隐藏项重新出现。两个请求之间一定有差异,所以我加载了Burp,让它代理Firefox和我的脚本,然后开始摆弄字段,直到我终于找到了关键差异:用户代理字符串。事实证明,使用默认的Ruby用户代理,我不会得到隐藏文件,但如果我切换到Firefox用户代理,它们就会出现。
我不知道为什么会这样,尤其是因为Web界面随后会隐藏这些文件,所以即使它们被返回,也从未实际使用。无论如何,将新的用户代理添加到脚本并重新运行,拉取了所有文件,包括隐藏文件。
我认为垃圾桶是一个相当重要的目录,因为人们可能会将文件放入他们的公共文件夹,但随后意识到他们做了什么,并删除它们,而没有意识到它们仍然可以在垃圾桶中恢复。其他文件,如.DSStore,也可能包含有用的信息,所以它们值得检查。
该脚本名为Me Finder,您可以从其项目页面下载。
与Bucket Finder一样,我已经运行了几个单词列表并进行了一些分析,您可以在这里阅读相关内容 - 分析Mobile Me。