上传位置在plugins/phpdisk_client/client_sub.php
首先验证user-agent,然后从解密字符串里拿到了一个用户名和密码:
拿到用户名和密码以后,进入数据库查询,但查询出错后echo出来“网盘登录出错:用户名或密码不正确,请重新输入”并没退出。这个就没有用了,不需要知道加密字符串,也不用登陆。
所以继续往下看,
进入case以后调用upload_file上传,文件名就直接用的$file[name]。
跟一下upload_file看看:
没有验证。直接拷贝进去了。
虽然case那块后面有个unlink对上传的文件进行删除,不过因为之后有一处数据库查询失败,导致这个unlink没有执行。(应该是,我没细看,反正没执行,我的shell没被删)
利用详见漏洞证明。
本地构造一个上传单页:
选择shell上传,中途抓包。
改user-agent为“phpdisk-client”,不改不能上传。
发送。
返回包是这样的:
这个时候查看/system/cache/即可看到shell:
官网demo站shell已拿下:
http://demo.phpdisk.com/v/system/cache/info.php
ps.我看到有前辈的phpinfo了,呵呵。。。前辈们果然都手握0day