漏洞详情
来自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环境 github.com/vulhub/vulh…
docker-compose up -d
docker镜像下载完成
环境准备好了:》
利用的工具:
克隆到本地
git clone github.com/neex/phuip-…
编译利用工具
没有go环境
安装go环境
wget -c storage.googleapis.com/golang/go1.…
解压到/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、最近工作闲暇漏洞复现一下(安全贵在坚持),如果有纰漏,望大佬指正。
这个是前面复现的存货(给以前单位实验室投过稿),最近有时间整理发一下。
免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!
参考:
公众号:
thelostworld:
个人知乎:www.zhihu.com/people/fu-w…
个人简书:www.jianshu.com/u/bf0e38a8d…
本文使用 文章同步助手 同步