详见https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html。 测试环境搭建 直接执行docker-compose up -d即可运行测试环境,环境监听9000端口。 EXP Exp见 https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75 点击查看代码 import socket import random import argparse import sys ...
类比HTTP协议来说,fastcgi协议则是服务器中间件和某个语言后端进行数据交换的协议。Fastcgi协议由多个record组成,record也有header和body一说,服务器中间件将这二者按照fastcgi的规则封装好发送给语言后端,语言后端解码以后拿到具体数据,进行指定操作,并将结果再按照该协议封装好后返回给服务器中间件。 和HTTP头不同,record...
PHP-FPM是一个fastcgi协议解析器,Nginx等服务器中间件将用户请求按照fastcgi的规则打包好传给FPM。FPM按照fastcgi的协议将TCP流解析成真正的数据。PHP-FPM默认监听9000端口,如果这个端口暴露在公网,则我们可以自己构造fastcgi协议,和fpm进行通信。 用户访问http://127.0.0.1/index.php?a=1&b=2,如果web目录是/var/ww...
PHP-FPM Fastcgi 未授权访问漏洞, auto_prepend_file = php://input 引起的,具体请参考文章:PHP-FP...
漏洞分析 nginx通过fastcgi协议与php-fpm通信。那么理论上,我们可以伪造fastcgi协议包,欺骗php-fpm进程,从而执行任意代码 如果主机的管理员不小心将 代码语言:javascript 复制 listen=127.0.0.1:9000 配置成了 代码语言:javascript 复制 listen=0.0.0.0:9000
写到这里,PHP-FPM未授权访问漏洞也就呼之欲出了。PHP-FPM默认监听9000端口,如果这个端口暴露在公网,则我们可以自己构造fastcgi协议,和fpm进行通信。 此时, _FILENAME 的值就格外重要了。因为fpm是根据这个值来执行php文件的,如果这个文件不存在,fpm会直接返回404: ...
我本来是把9000端口开放给nginx访问的,没想到开放到外网环境,被别人伪造fastcgi访问改了配置。
PHP-FPM 拿到 Fastcgi 的数据包后,进行解析,得到上述这些环境变量。然后,执行SCRIPT_FILENAME的值指向的PHP文件,也就是/var/www/html/index.php。但如果我们能够控制SCRIPT_FILENAME的值,不就可以让 PHP-FPM 执行服务器上任意的 PHP 文件了吗。写到这里,PHP-FPM 未授权访问漏洞差不多也就呼之欲出了。
fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass php:9000; ... } 1. 2. 3. 4. 5. 6. 7. 漏洞复现 本次复现采用Vulhub靶场环境,需要在本地搭建Vulhub靶场 进入靶场环境,使用以下命令启动环境: docker-compose up -d 1. 检测环境端口是否开放 ...
Unix socket 又叫 IPC (inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信,这种方式需要在 Ngnix配置文件中填写 PHP-FPM 的 socket 文件位置。 在P神的Fastcgi协议分析 && PHP-FPM未授权访问漏洞 && Exp编(https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html)写这篇...