php-fpm (CVE-2019-11043)漏洞复现
编写者:thelostworld_fv
漏洞详情
来自Wallarm的安全研究员Andrew Danau在9月14号至16号举办的Real World CTF中,向服务器发送%0a(换行符)时,服务器返回异常信息,疑似存在漏洞。
当Nginx使用特定的fastcgi配置时,存在远程代码执行漏洞,但这个配置并非Nginx默认配置。
当fastcgi_split_path_info字段被配置为 ^(.+?\.php)(/.*)$;时,攻击者可以通过精心构造的payload,造成远程代码执行漏洞,该配置已被广泛使用,危害较大
影响版本
当Nginx + php-fpm 的服务器有如下配置时,存在此漏洞。
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
...
}
实验环境
docker环境 https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043
docker-compose up -d
docker镜像下载完成
环境准备好了:》
利用的工具:
https://github.com/neex/phuip-fpizdam
克隆到本地
git clone https://github.com/neex/phuip-fpizdam.git
编译利用工具
没有go环境
安装go环境
wget -c https://storage.googleapis.com/golang/go1.13.3.linux-amd64.tar.gz
解压到/usr/local
目录tar -C /usr/local/ -xzf go1.13.3.linux-amd64.tar.gz
vim 编辑/etc/profile
文件最后加上export PATH=$PATH:/usr/local/go/bin
执行 source /etc/profile 命令 就安装成功了
获取工具
执行exp攻击 在/tmp/写入 文件a
攻击成功后会在tmp目录下写入a
winddows下面也是类似的。
修复建议:
1.修改nginx配置文件中fastcgi_split_path_info的正则表达式,不允许.php之后传入不可显字符
2.暂停使用 nginx+php-fpm 服务
根据实际生产环境的业务需求,将以下配置删除
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
总结:
1、docker环境相对实现容易一些(Linux本机尝试构造漏洞,但是花的时间很多,建议docker)。
2、还有就是go语言下载的phuip-fpizdam注意最后编译后的位置(本机在此目录下)
3、最近工作闲暇漏洞复现一下(安全贵在坚持),如果有纰漏,望大佬指正。
参考:
https://mp.weixin.qq.com/s/pnuMJ8x6k_r2lmgId93Cuw
https://mp.weixin.qq.com/s/NFPVPSUHJKr4ghfa0ofoWQ
https://mp.weixin.qq.com/s/kE4nP8sewd7OnJ0WUDw3iA
个人:https://www.jianshu.com/u/bf0e38a8d400
个人知乎:https://www.zhihu.com/people/fu-wei-43-69/columns