出问题的地方是在上传简历那里,可以上传任意后缀,
上传一个a.php文件,很正常没有执行php,也没有得到文件路径,但是文件的内容以base64编码的方式返回了,
接下尝试把文件名改为 /etc/passwd,file:///etc/passwd 都没有成功。
多次尝试后,我上传一个压缩的 .php 文件,返回信息是
//包含php文件,没有解压缩
unzipped,base64'd contents of .php
如果你读过Facebook的"Bounty hunter's guide",你就知道怎么做了。
这个guide里面安全研究员上传了一个zip压缩文件,里面是一个/etc/passwd的链接,几步后Facebook就返回了几行/etc/passwd。
服务器会做一次解压缩,作者的猥琐思路开始了:
1.创建一个链接文件到/etc/passwd
ln -s /etc/passwd link
2. 压缩文件,同时保留链接
zip --symlinks test.zip link
3.上传test.zip文件,系统会自动解压缩
4. 页面当中会返回/etc/passwd的内容。
下面是报告与处理的时间线:
Nov 30, 2014 09:45 - vulnerability reported
Nov 30, 2014 17:58 - reply from Facebook's security (Neal) saying they cannot reproduce bug
Nov 30, 2014 18:08 - update from Neal, they can reproduce it
Nov 30, 2014 19:10 - temporary fix has been pushed, disabling resume uploads
Dec 01, 2014 ~23:00 - more permanent fix pushed, now server no longer responds with contents of uploaded resume (Emrakul)
Dec 05, 2014 18:15 - bounty of $5500 awarded (Neal).
Dec 05, 2014 ~19:00 - objection about reward sent to Facebook's team
Dec 06, 2014 ~23:30 - Neal from Facebook explains this is actually a third party system they run
【相关来源:reading-local-files-from-facebooks & wooyun】