我最近发布了Bucket Finder脚本,Darren在Hak5节目中进行了专题报道。有反馈指出Mobile Me采用相同机制,用户可通过https://public.me.com/<账户名>
格式URL访问公开账户。考虑到Mobile Me存储的是个人而非商业数据,且与桌面端同步,我认为这将带来丰富的数据收获。由于Mobile Me已停止新用户注册,所有分析均基于现有数据。
在发现一个包含多个公开文件的账户后,我开始分析源代码。首先注意到页面上显示的文件均未在源码中出现,推测需要通过AJAX调用获取文件列表。使用Firebug捕获到以下返回数据的URL:
https://public.me.com/ix/XXXX?protocol=roap&item=properties&repfmt=swjson&depth=1&reqid=1234566778888&lang=en
该URL返回JSON格式的目录列表。虽然可以处理JSON,但更倾向于使用XML(已有解析框架)。通过调整查询参数发现:删除reqid和lang字段无影响;depth设为2可获取两级目录,但≥3会报错;最关键的是删除repfmt字段后,数据奇迹般变为XML格式。最终得到优化URL:
https://public.me.com/ix/XXXX?protocol=roap&item=properties&depth=1
返回的XML示例如下(精简显示文件和目录结构):
<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:"><D:response xmlns:D="DAV:"><D:href>/ix/hank/</D:href><D:propstat><D:prop><D:resourcetype><D:collection/></D:resourcetype></D:prop><D:status>HTTP/1.1 200 OK</D:status></D:propstat></D:response><D:response xmlns:D="DAV:"><D:href>/ix/XXXX/file.mp4</D:href><D:propstat><D:prop><D:getcontentlength>118727222</D:getcontentlength></D:prop></D:propstat></D:response>
</multistatus>
这显然是WebDAV协议。选择解析XML而非学习WebDAV库:若D:resourcetype
包含D:collection
则为目录,否则为文件。对文件记录URL及相关信息,对目录则递归访问。
但初步测试发现:浏览器通过JSON获取时包含以点开头的隐藏文件/目录(如OS X回收站.Trashes
),而脚本输出却缺失该目录。最初怀疑是JSON与WebDAV差异,但切换回JSON仍不显示隐藏项。通过Burp代理对比请求,最终发现关键差异:用户代理字符串。使用Ruby默认UA时无隐藏文件,切换为Firefox UA后则出现。
尽管Web界面会隐藏这些文件(即使被返回),但垃圾桶目录至关重要——用户可能将文件放入公开文件夹后删除,却不知仍可从垃圾桶恢复。其他如.DSStore
文件也可能包含有用信息。
最终开发了Me Finder脚本(可从项目页面下载),并像处理Bucket Finder一样使用词表进行分析(详见《Analyzing Mobile Me》)。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码