【漏洞复现】CVE-2019-11043(PHP远程代码执行漏洞)信息安全论文_含漏洞复现完整过程_含Linux环境go语言编译环境安装

一、信息安全概述

信息安全是一个涵盖广泛的领域,旨在保护信息系统和数据免受未经授权的访问、使用、披露、破坏、修改或干扰的威胁和攻击。它涉及各种技术、策略和措施,旨在确保信息的保密性、完整性和可用性。信息安全的目标是保护组织的敏感信息,包括客户数据、商业机密、财务信息和知识产权,以及防止信息系统遭受破坏、盗窃或滥用。

信息安全的重要性不断增加,因为随着技术的发展,网络攻击和数据泄露的威胁也在不断增加。信息安全涉及多个方面,包括网络安全、应用程序安全、数据保护、身份验证和访问控制等。它需要综合应用技术、政策、教育和意识培训等措施,以建立强大的防御机制和应急响应能力。

信息安全的目标是确保机构和个人的信息资产受到保护,防止数据泄露、身份盗窃、勒索软件攻击和其他恶意活动。为了实现这些目标,信息安全需要综合考虑以下几个方面:

·机构内部的安全政策和流程,包括访问控制、身份验证、密码管理和员工培训等。

·网络安全措施,如防火墙、入侵检测和预防系统、安全监控和日志分析等。

·应用程序安全,包括代码审查、漏洞管理和安全测试等。

·数据保护和加密,以确保数据在传输和存储过程中的安全性。

·应急响应和恢复计划,以应对安全事件和灾难。

总之,信息安全是保护信息系统和数据免受威胁和攻击的重要领域。它需要综合应用技术、策略和措施,以确保信息的保密性、完整性和可用性,并建立强大的防御和应急响应能力。

二、背景

1.CVE-2019-11043(PHP远程代码执行漏洞)简介

CVE-2019-11043漏洞是PHP的一个远程代码执行漏洞,该漏洞产生与Nginx利用fastcgi_split_path_info在处理带有 %0a 的请求时,会因为遇到换行符(%0a)导致PATH_INFO为空,最终可导致任意代码执行。

该漏洞普遍出现在Nginx+php-fpm环境中,且PHP版本在7.0-7.3之间。

****2.****技术以及平台的相关原理

要想理解CVE-2019-11043漏洞成因,我们从Nginx处理PHP类型的文件开始讲起。在早期(Web1.0)时期,web大多是静态页面,所谓静态页面,即HTML、JPG等静态资源组成,没有PHP、JSP等的动态页面语言。

后来PHP等动态语言出现以后,Nginx如何支持PHP语言的网站称为了一个问题。Apache的解决方案是将处理PHP等动态语言的程序编译成一个模块,当我们需要处理PHP页面时,就可以调用这个模块。而对于Nginx而言,选择的是另一种解决方案,即Nginx本身只解析静态资源,如果有PHP页面,就将这个请求给PHP相关程序来进行处理,然后将处理后的结果反馈给用户。

为了解决这种PHP(语言解析器)与Nginx(Web服务器)之间的通信问题,我们制定了cgi协议。有了cgi协议以后,意味着以后出现新的动态语言(比如go语言),出现了新的Web服务器,只要遵循了cgi协议,就可以快速方便的实现语言解析器和Web服务器之间的通信问题。cgi协议非常重要,但是也有其自身的缺点,那就是每次语言解析器和Web服务器之间的通信,都需要创建一个进程,当通信结束后,就要杀死这个进程,这样的机制无疑大大浪费了系统资源。为了解决这一问题我们,我们对cgi协议进行了修改,cgi协议的改良版本有很多,但是其中一个很具有代表性的就是fast-cgi协议。fast-cgi协议改进了进程的处理模式,当一次通信完成后,通信进程会得以保留,不会杀死通信使用的进程,其他的通信还可以继续使用这个进程,这样一来,就大大提升了系统资源使用效率。

对于Nginx而言,为了实现与PHP的通信交互,因此出现了php-cgi和php-fpm。php-cgi支持cgi协议,可以用于处理和解析PHP脚本程序,php-cgi通过调用PHP的php_execute_script函数来解析和运行PHP脚本。php-cgi的问题在于,尽管其本身可以解析和处理PHP脚本程序,但是其本身没有进程管理的相关功能。为了解决这一问题,就出现了php-fpm。php-fpm全称是php Fastcgi Process Manager,php-fpm实现了Fast-cgi协议,并可以提供进程管理的相关功能。在PHP5.4版本之前,Nginx处理PHP的流程是调用php-fpm,php-fpm再创建进程,调用php-cgi,以此实现了Ngixn对PHP的解析问题,此时php-fpm起到的是管理php-cgi的作用。在PHP5.4版本之后,php内核中集成了php-fpm,本身带有了php解析的功能,就不再以来php-cgi来解析PHP了。

  1. 漏洞的成因

Nginx的配置会导致CVE-2019-11043漏洞,主要漏洞成因是在如下配置:

fastcgi_split_path_info ^(.+.php)(/.*)$

向目标服务器 URL 发送 %0a 符号时,服务返回异常,疑似存在漏洞。

如果用户传入的信息存在换行符(URL编码是%0a),则会破坏fastcgi_split_path_info参数后面的正则表达式匹配,从而导致PATH_INFO变量为空,从而触发漏洞。

在使用这些有错误的Nginx配置的情况下,攻击者通过精心的构造和利用数据包,即可让PHP-FPM执行任意代码。

关于该漏洞详细分析可参考文章:

CVE-2019-11043 Nginx配置详解-CSDN博客

Vulhub - Docker-Compose file for vulnerability environment

  1. 影响范围

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

PHP 7.0 版本

PHP 7.1 版本

PHP 7.2 版本

PHP 7.3 版本

三、攻击操作步骤(以及防御操作)

  1. 实验环境要求:

1.1靶机:kali-linux-2024.1-vmware-amd64

安装Vulhub搭建docker镜像,搭建PHP、nginx环境

靶机IP(192.168.6.124)、Doker镜像IP如图1所示:

图1靶机及镜像IP

1.2攻击机:kali-linux-2024.1-vmware-amd64

安装go编译环境golang、漏洞利用工具phuip-fpizdam

攻击机IP(192.168.6.243)、测试攻击机和靶机能够ping通,如图2所示:

图2攻击机和靶机ping通

2 ****.****CVE-2019-11043(PHP远程代码执行漏洞)漏洞环境搭建

2.1靶机环境搭建

为了复现该漏洞,我们首先需要搭建靶机漏洞环境。我们使用Vulhub来搭建该漏洞环境。安装完Vulhub后,我们可以在Vulhub的PHP目录下,找到该漏洞,建漏洞PHP、nginx环境。

具体步骤如下:

<1>执行命令cd vulhub/php/CVE-2019-11043进入该漏洞目录;

<2>执行命令docker-composebuild构建该漏洞;

<3>执行命令docker-compose up -d即可搭建漏洞的环境(PHP、nginx);

<4>执行命令docker-compose config可以查看该漏洞的docker配置。

界面如图3所示:

图3靶机漏洞环境搭建

使用浏览器访问镜像的8080端口(http://172.17.0.1:8080/),验证该漏洞环境已搭建好,界面如图4所示:

图4 靶机漏洞环境验证

2.1攻击机环境搭建

为了复现该漏洞,我们首先需要搭建攻击机环境。我们使用的Github上该漏洞的公开POC,git克隆该poc的安装包。在这之前,为了编译该环境,需要本地安装go语言环境。

2.1.1 go语言环境搭建

相关过程可以参考文章:http://t.csdnimg.cn/aFIob具体步骤如下:

<1>下载Linux的二进制包,攻击机Kali Linux系统上,执行命令:

wgethttps://studygolang.com/dl/golang/go1.19.4.linux-amd64.tar.gz

<2>将下载后的安装包解压,执行命令:

tarxf go1.19.4.linux-amd64.tar.gz

如下图5所示:

图5 go语言环境搭建

<3>配置环境变量,执行命令:

export GOPATH=/home/kali/go

export PATH=$GOPATH/bin

<4>测试go语言编译环境,执行命令:

go version

Go

如下图6所示:

图6 go语言环境测试

2.1.2漏洞利用工具安装

相关过程可以参考文章:http://t.csdnimg.cn/SfIil具体步骤如下:

<1>git克隆漏洞利用工具phuip-fpizdam安装包,执行命令:

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

下载后,可以看到本地出现了phuip-fpizdam的目录,查看目录内文件,如下图7示:

图7 安装漏洞利用工具

3 ****.****CVE-2019-11043(PHP远程代码执行漏洞)漏洞复现

3.1编译环境

进入phuip-fpizdam的目录,使用go语言编译该环境完成安装漏洞利用POC,,执行命令:

go env -w GOPROXY=https://goproxy.cn

go get -v && go build

上述命令执行结果如下图8所示:

图8 漏洞利用POC安装

3.2 漏洞利用

使用https://github.com/neex/phuip-fpizdam中给出的工具,发送数据包使用该工具执行命令:

go run . "http://靶机IP:8080/index.php"

上述命令执行结果如下图9所示:

图9 发送数据包

打开浏览器访问"http://192.168.6.124:8080/a=cat /etc/passwd"即可查看到命令已成功执行。界面结果如下图10所示:

图10 漏洞利用

4 ****.****CVE-2019-11043(PHP远程代码执行漏洞)漏洞利用

4.1 执行cat /etc/passwd命令

图11 漏洞利用1

4.2 执行pwd命令

可以看到当前位于/var/www/html hello world目录下:

图12 漏洞利用2

4.3 执行ls命令

图13 漏洞利用3

4.4 执行id命令

图14 漏洞利用4

4.5 执行whoami命令

图15 漏洞利用5

5 ****.****CVE-2019-11043(PHP远程代码执行漏洞)漏洞防御操作

5.1 解决方案1

在不影响正常业务的情况下,删除 Nginx 配置文件中的如下配置:

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

fastcgi_param PATH_INFO $fastcgi_path_info;

5.2解决方案********2

更新PHP版本:高于PHP 7.3 版本

5.3解决方案********3

打开UFW防火墙,命令如下:sudo ufw enable

四、总结

通过对CVE-2019-11043(PHP远程代码执行漏洞)的复现和研究,我们深入了解了该漏洞的原理和危害。这个漏洞的存在使得攻击者可以通过精心构造的请求,远程执行恶意代码,从而获取系统权限、窃取敏感信息或者对系统进行破坏。

我们的研究不仅揭示了该漏洞的具体利用方式,还突显了PHP和Nginx等常用技术在安全性方面的薄弱环节。这个漏洞的存在提醒我们,信息安全是一个持续的挑战,我们不能放松对安全性的重视。

为了有效应对这类漏洞,我们需要采取一系列的安全措施。首先,及时更新和升级软件、组件和框架,以修复已知的漏洞。其次,加强网络安全防护,包括使用防火墙、入侵检测系统和加密传输等技术手段。此外,开发人员应该注重编写安全的代码,进行安全测试和代码审查,以减少潜在的漏洞。

在我的研究中,我们成功地复现了CVE-2019-11043漏洞,并提供了相应的解决方案。我们的研究对于加强对这类漏洞的认识和理解,为安全团队和开发人员提供了宝贵的参考和指导。

然而,我们也意识到这个漏洞只是众多安全威胁中的一个,信息安全的挑战远未结束。我们需要不断学习和更新知识,跟踪最新的漏洞和攻击技术,以保持对安全问题的敏感性。只有通过共同努力,我们才能构建一个更加安全可靠的网络环境。

五、结束语

这次研究不仅揭示了漏洞的具体利用方式,还突显了PHP和Nginx等常用技术在安全性方面的薄弱环节。我们应该认识到,信息安全的重要性不容忽视,特别是对于Web应用程序和服务器环境。只有充分了解和意识到这些潜在的漏洞,我们才能更好地保护系统和数据的安全。

为了有效应对这类漏洞,我们需要采取一系列的安全措施。首先,及时更新和升级软件、组件和框架,以修复已知的漏洞。其次,加强网络安全防护,包括使用防火墙、入侵检测系统和加密传输等技术手段。此外,开发人员应该注重编写安全的代码,进行安全测试和代码审查,以减少潜在的漏洞。

最后,信息安全是一个持续的过程,需要不断地学习和更新知识,跟踪最新的漏洞和攻击技术,并采取相应的防护措施。只有通过全面的安全意识和行动,我们才能确保信息系统和数据的安全,并有效应对未来的安全挑战。

在未来的研究中,我们可以进一步探索其他相关的漏洞和安全问题,并提出更加有效的解决方案。通过不断的研究和实践,我们可以为信息安全的发展和保护做出更大的贡献。让我们共同努力,为构建一个安全可靠的网络环境而努力。

六、参考文献

1\]陈忠,张乾林. PHP程序安全与漏洞挖掘\[M\]. 电子工业出版社,2018. \[2\]张瑞,杨夏峰,李炜. PHP Web应用安全防护与漏洞挖掘\[J\]. 中国科技论文在线,2017,12(6):621-626. \[3\]Kaur, A., \& Sharma, S. (2018). Analysis of PHP Vulnerabilities and Techniques of Prevention. In International Conference on Information Systems Design and Intelligent Applications (pp. 571-579). Springer, Singapore. \[41\]冯刚,周琪. 基于PHP的Web应用漏洞分析与防范\[J\]. 现代计算机,2016,(12):62-65. \[5\]Alshammari, A., \& Alghamdi, M. (2020). Vulnerability Analysis of PHP Web Applications. International Journal of Computer Science and Network Security, 20(6), 38-43. \[6\]Rios, M., \& Baudot, A. (2019). Web Application Security: Exploiting Common Vulnerabilities in PHP Applications. In International Conference on Cyber Security Intelligence and Analytics (pp. 37-49). Springer, Cham. \[7\]王永正,王瑞勤. 基于PHP的Web应用安全漏洞与防范\[J\]. 现代信息,2019,(9):57-59. \[8\]刘东. PHP程序安全漏洞分析与防范探讨\[J\]. 计算机技术与发展,2018,28(11):117-123. \[9\]Kim, H., Lee, D., \& Huh, J. H. (2020). An Analysis of Security Vulnerabilities and Countermeasures in PHP Web Applications. In International Conference on Security with Intelligent Computing and Big-data Services (pp. 118-126). Springer, Cham. \[10\]Bortolameotti, R., \& Massacci, F. (2017). Vulnerability Analysis of PHP Web Applications: A Case Study. In International Conference on Computer Aided Verification (pp. 304-319). Springer, Cham.

相关推荐
chlk12311 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑12 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件12 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
BingoGo15 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack15 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI1 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端