文件下载漏洞
一、漏洞PHP源码
// 获取店端清酒的文件名
$file_path = $GET['filename'];
// 设置响应头为附件下载而非内容读取
Header("Contnet-type: application/octet-stream");
Header("Content-Disposition: attachment; filename=".basename($file_path));
// 向页面输出文件内容
echo file_get_contents($file_path);
二、利用条件
- 存在读文件的函数和操作
- 读取文件的路径由用户可控且未校验或校验不严格
- 输出了文件内容
三、文件下载危害
- 可以下载服务器任意文件,如脚本代码、服务及系统配置文件等
- 可用得到的代码进一步代码审计,得到更多可利用的漏洞
四、文件下载的防范
- 过滤特殊字符.(点),使用户在URL中不能回溯上级目录
- 震泽严格判断用户输入参数的格式
- php.ini配置open_basedir限定文件访问范围
- 将文件路径保存到数据库中,通过url?id=123的方式下载文件