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...
response=self.__decodeFastCGIRecord(data)ifnot response:breakifresponse['type'] ==FastCGIClient.__FCGI_TYPE_STDOUT \ or response['type'] ==FastCGIClient.__FCGI_TYPE_STDERR:ifresponse['type'] ==FastCGIClient.__FCGI_TYPE_STDERR: self.requests['state'] =FastCGIClient.FCGI_STATE_ERRORifreques...
类比HTTP协议来说,fastcgi协议则是服务器中间件和某个语言后端进行数据交换的协议。Fastcgi协议由多个record组成,record也有header和body一说,服务器中间件将这二者按照fastcgi的规则封装好发送给语言后端,语言后端解码以后拿到具体数据,进行指定操作,并将结果再按照该协议封装好后返回给服务器中间件。 和HTTP头不同,record...
一是在Nginx端使用fastcgi_split_path_info将path info信息去除后,用tryfiles判断文件是否存在; 二是借助PHP-FPM的security.limit_extensions配置项,避免其他后缀文件被解析。 security.limit_extensions配置 写到这里,PHP-FPM未授权访问漏洞也就呼之欲出了。PHP-FPM默认监听9000端口,如果这个端口暴露在公网,则我们可以自...
以下是FastCGI对PHP安全性的影响及相应的防范措施: FastCGI的安全影响 未授权访问漏洞:PHP-FPM(PHP FastCGI Process Manager)在默认配置下存在未授权访问漏洞,攻击者可以通过发送特制的FastCGI请求来执行任意代码或访问敏感信息。 版本依赖的安全问题:早期版本的PHP(如PHP < 5.3.9)存在远程代码执行(RCE)漏洞,这些漏洞...
nginx通过fastcgi协议与php-fpm通信。那么理论上,我们可以伪造fastcgi协议包,欺骗php-fpm进程,从而执行任意代码 如果主机的管理员不小心将 代码语言:javascript 复制 listen=127.0.0.1:9000 配置成了 代码语言:javascript 复制 listen=0.0.0.0:9000 那就说明任何人都能访问9000 端口 ...
PHP-FPM Fastcgi 未授权访问漏洞, auto_prepend_file = php://input 引起的,具体请参考文章:PHP-...
PHP-FPM 拿到 Fastcgi 的数据包后,进行解析,得到上述这些环境变量。然后,执行SCRIPT_FILENAME的值指向的PHP文件,也就是/var/www/html/index.php。但如果我们能够控制SCRIPT_FILENAME的值,不就可以让 PHP-FPM 执行服务器上任意的 PHP 文件了吗。写到这里,PHP-FPM 未授权访问漏洞差不多也就呼之欲出了。
Fastcgi马:这个利用了PHP-FPM 可以直接通过 fastcgi 协议通讯的原理,可以指定SCRIPT_FILENAME,去执行机器上存在的 PHP 文件;或者配合auto_prepend_file+php://input,通过每次提交POST code去执行。(稍微感叹一下,这个问题从我写fcgi_exp的代码,已过了整整10年) ...
我本来是把9000端口开放给nginx访问的,没想到开放到外网环境,被别人伪造fastcgi访问改了配置。