​php-fpm 未授权访问复现

时间:2022-06-26
本文章向大家介绍​php-fpm 未授权访问复现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

自己的知识面很窄,感觉原来的学习总是迈不开步子,以至于,自己对linux的很多服务器的配置都很不明确,所以还是得好好学习,折腾环境也是很重要的,来手动的配置一下php-fpm未授权访问的环境。

环境搭建

使用linux搭建nginx和php fpm的环境

先是安装

$ sudo apt-get install nginx
$ sudo apt-get install mysql
$ sudo apt-get install php7.0 php7.0-fpm php7.0-mysql

然后是配置在如下路径的文件中

/etc/nginx/sites-available/default

配置url重写和入口文件

    location / {
          if (-f $request_filename/index.html){
            rewrite (.*) $1/index.html break;
           }
          if (-f $request_filename/index.php){
             rewrite (.*) $1/index.php;
           }
           if (!-f $request_filename){
              rewrite (.*) /index.php;
             }
           root   /var/www/html;
           index  index.php;
    }

配置代理端口

    location ~ .php$ {
                  root           /var/www/html;
                  fastcgi_pass   127.0.0.1:9000;
                  fastcgi_index  index.php;
                  fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                  include        fastcgi_params;
              }

配置链接方式

在如下路径的文件

/etc/php/7.0/fpm/pool.d/www.conf 
listen = 0.0.0.0:9000#为了实现漏洞 未授权访问因此的来

或者直接用docker-compose

使用已经搭建好的了环境

version: '2'
services:
 php:
   image: php:fpm
   ports:
- "9000:9000"

保存为docker-compose.yml

docker-compose up -d

漏洞分析

nginx通过fastcgi协议与php-fpm通信。那么理论上,我们可以伪造fastcgi协议包,欺骗php-fpm进程,从而执行任意代码

如果主机的管理员不小心将

listen = 127.0.0.1:9000

配置成了

listen = 0.0.0.0:9000

那就说明任何人都能访问9000 端口

简而言之,恶意的用户伪造了fastcgi发包,构造环境变量执行我们传入的代码,就可以实现rce。

漏洞复现

环境好搭建,p牛的原理写的比较详细,这里利用p牛的脚本简单复现一下:

https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75
 python fpm.py  192.168.44.141 /var/www/html/1.php -c "<?php echo `id`; exit;?>"

参考

http://configurebox.xyz/post/10.html

https://evoa.me/index.php/archives/52/

https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html