PHP-FPM未授权访问漏洞

一、环境

Vulhub - Docker-Compose file for vulnerability environment

docker直接搭建

二、研究步骤

我们nginx本来是监听的本地127.0.0.1:端口,但当我们监听端口写成0.0.0.0:端口,此时就有可能出现未授权访问的问题

2.1 拉取环境

2.2分析配置源码

docker中是127.0.0.1:9000但是映射给我们本地就是0.0.0.0:9000

我们先了解一下fastcgi和php以及php-fpm之间的交互关系

比如我们给传入一个数据?a=1&b=2,nginx会发送给index.php之后发送fastcgi,把其打包成一个个record,其中record主要是1和4,一个连接一个格式化,之后php-fpm将其解析为我们看得懂的key和valu,之后发送给php,php将其交给index.php后面拼接着我们的请求,index.php执行成功后返回给php-fpm,php-fpm再返回给fastcgi,fastcgi再返回给nginx,nginx返回给我们,这个是底层的流程

2.3nginx解析漏洞

看看这个靶场什么意思?

安全后缀为空,很明显这个不应该为空,这个会将任何后缀解析为php

搭建好访问之后就是一个文件提交

看一看docker镜像中自带图片的16进制,很明显最后面镶嵌了一个php的一句话木马

图片后面随便加个php就出现了

其实这个漏洞很简单,但是底层的代码是因为cgi_fix被开启所以有漏洞,而具体来说意思就是当程序发现后面的php不存在的时候,就会往上级走,发现nginx.png存在就会以php的权限去执行,这个就是解析漏洞的原理

php的cgi.fix_pathinfo解析_cgi.fix pathinfo()-CSDN博客

如何修复:1.关闭安全后缀,2.关闭cgi_fix

### 解决 PHP-FPM FastCGI 未授权访问漏洞 为了防止 PHP-FPM FastCGI 的未授权访问,需重点调整几个配置项来增强安全性。 #### 配置 `security.limit_extensions` 通过设定 `security.limit_extensions` 参数仅允许特定类型的文件被处理。这能有效阻止恶意请求尝试利用其他扩展名的脚本文件。例如,在 php-fpm.conf 或 pool.d 下的相关配置文件里加入如下设置: ```ini security.limit_extensions = .php ``` 此操作确保只有 `.php` 文件会被解释器加载并执行[^1]。 #### 设置监听权限 对于 FPM 进程管理器所绑定的服务地址与端口,应该严格控制其可访问范围。如果应用程序服务器位于同一台机器上,则建议采用 Unix 域套接字而非 TCP/IP 方式通信,并给予恰当读写权限给 Web Server 用户组;如果是远程连接则务必启用防火墙规则限定源 IP 地址列表。 - 使用 Unix Socket 而不是默认的网络接口监听: ```ini listen = /var/run/php-fpm.sock ``` - 对于基于IP的方式,指定本地回环设备作为唯一合法来源: ```ini listen = 127.0.0.1:9000 ``` 此外还需注意修改对应的 Nginx/Apache 等前端代理服务配置以匹配新的后端处理器位置[^2]。 #### 关闭不必要的功能和服务 确认关闭任何不使用的模块或特性,减少攻击面。定期审查日志记录寻找异常活动迹象,并保持软件版本更新至最新稳定版状态以便及时获得官方发布的补丁支持。 最后提醒管理员们应当遵循最小化原则部署环境——即只安装运行所需最少组件集,从而降低潜在风险暴露程度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值