Nginx 上 fastcgi_split_path_info 在处理带有 %0a 的请求时,会因为遇到换行符 \n 导致 PATH_INFO 为空。而 php-fpm 在处理 PATH_INFO 为空的情况下,存在逻辑缺陷。攻击者通过精心的构造和利用,可以导致远程代码执行
漏洞复现
利用大佬的docker
不可以远程代码执行:
PHP 7.0 版本
PHP 7.1 版本
PHP 7.2 版本
PHP 7.3 版本
漏洞利用poc
git clone https://github.com/neex/phuip-fpizdam
需要安装go
https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
tar -C /usr/local/ -xzf go1.13.4.linux-amd64.tar.gz
临时添加到环境变量
export PATH=
P
A
T
H
:
/
u
s
r
/
l
o
c
a
l
/
g
o
/
b
i
n
永
久
添
加
到
环
境
变
量
v
i
m
/
e
t
c
/
p
r
o
f
i
l
e
添
加
e
x
p
o
r
t
P
A
T
H
=
PATH:/usr/local/go/bin 永久添加到环境变量 vim /etc/profile 添加 export PATH=
PATH:/usr/local/go/bin永久添加到环境变量vim/etc/profile添加exportPATH=PATH:/usr/local/go/bin
执行source /etc/profile
进入poc目录运行go build 进行编译
如果超时的话添加如下环境变量
export GOPROXY=https://goproxy.io
使用phuip-fpizdam编译好的工具,发送数据包:
攻击成功