PHP代码审计笔记--任意文件下载漏洞
在文件下载操作中,文件名及路径由客户端传入的参数控制,并且未进行有效的过滤,导致用户可恶意下载任意文件。
0x01 客户端下载
常见于系统中存在文件(附件/文档等资源)下载的地方。
漏洞示例代码:
1. <?php 2. $filename = $_GET['filename']; 3. echo file_get_contents($filename); 4. header('Content-Type: imgage/jpeg'); 5. header('Content-Disposition: attachment; filename='.$filename); 6. header('Content-Lengh: '.filesize($filename)); 7. ?>
文件名用户可控,导致存在任意文件下载漏洞,攻击者提交url:
- test.php?filename=test.php
即可下载test.php源码,可实现跨目录下载系统中的任意文件。
0x02 服务端下载
常见于系统第三方补丁升级/插件安装、远程图片本地化。
任意文件读取
漏洞示例代码:
<?php $filename = $_GET['filename']; readfile($filename); ?>
可以看到参数并未进行任何过滤或处理,直接导入readfile函数中执行,导致程序在实现上存在任意文件读取漏洞。
相对路径 物理路径 fuzz
Windows: C:\boot.ini //查看系统版本 C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件 C:\Windows\repair\sam //存储系统初次安装的密码 C:\Program Files\mysql\my.ini //Mysql配置 C:\Program Files\mysql\data\mysql\user.MYD //Mysql root C:\Windows\php.ini //php配置信息 C:\Windows\my.ini //Mysql配置信息 ... Linux: /root/.ssh/authorized_keys /root/.ssh/id_rsa /root/.ssh/id_ras.keystore /root/.ssh/known_hosts /etc/passwd 查看用户文件文件 /etc/shadow 查看密码文件 /etc/my.cnf /etc/httpd/conf/httpd.conf 查看apache的配置文件 /root/.bash_history 查看历史命令 /root/.mysql_history /proc/self/fd/fd[0-9]*(文件标识符) /proc/mounts /porc/config.gz
index.php?f=../../../../../../etc/passwd
-
/root/.ssh/authorized_keys
-
/root/.ssh/id_rsa
-
/root/.ssh/id_ras.keystore
-
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
-
/etc/passwd
-
/etc/shadow
-
/etc/my.cnf //mysql配置文件
-
/etc/httpd/conf/httpd.conf //apache配置文件
-
/root/.bash_history //用户历史命令记录文件
-
/root/.mysql_history //mysql历史命令记录文件
-
/proc/mounts //记录系统挂载设备
-
/porc/config.gz //内核配置文件
-
/var/lib/mlocate/mlocate.db //全文件路径
-
/porc/self/cmdline //当前进程的cmdline参数
修复建议:要下载的文件地址保存至数据库中。文件路径保存至数据库,让用户提交文件对应ID下载文件。
参考链接:https://wenku.baidu.com/view/4f8e19e0b1717fd5360cba1aa8114431b90d8ee0.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫