网络事件解读(2):CVE-2024-4577漏洞之PHP-CGI安全事件

文摘   2024-09-13 11:40   北京  

前段时间新出现一个攻击范围很广的漏洞,一些XAMPP服务器受到攻击。这个攻击事件是怎么发生的呢?背后的原因以及技术细节是什么呢?本文带领大家透过这次PHP CGI攻击事件了解网络攻击的背后真相以及相关原理。


  1. 1.     常见Web漏洞

Web安全漏洞是Web应用中的一些安全缺陷,可能导致黑客利用来进行一些恶意的网络活动。常见的安全漏洞有:


SQL注入漏洞

通过将恶意的SQL代码插入到应用程序处理的SQL语句中,导致攻击者可以修改数据库查询,从而读取,修改或者删除数据。

跨站脚本(XSS)漏洞

跨站脚本漏洞是客户端代码注入攻击,利用Web应用程序对用户输入检查不足的漏洞,将恶意脚本注入到网页中。当用户访问该网页时候,恶意脚本在用户的浏览器端执行,从而窃取用户数据。

弱口令漏洞

弱口令漏洞是通常设置容易被别人猜测或被破解工具破解的口令,从而导致泄露敏感信息。

跨站请求伪造(Cross-Site Request Forgery, CSRF

攻击者功过伪装成合法用户发送恶意请求到Web应用,已到达非法授权操作的目的。

目录遍历漏洞

目录遍历漏洞允许攻击者通过URL中的特殊字符访问未授权的目录和文件,导致敏感信息泄露或系统文件被篡改。

RCE漏洞

RCE漏洞即远程代码执行(Remote Code Execution)漏洞,是软件缺陷导致攻击者可以在后台服务器并在上面执行任意代码。


RCE漏洞是指Web开发中,开发人员使用了一些特殊函数,这些函数以一些字符串作为输入,功能是将输入的字符串当做代码或者命令来执行。当攻击者可以控制这些函数的输入时,就产生了RCE漏洞。正如本文接下来要介绍的PHP-CGI漏洞就是这种安全漏洞。


  1. 2.     PHP-CGI安全事件

时间:20246

目标:  使用PHP-CGIWeb服务器

结果:  Web服务器受到黑客攻击,所有的文件都被加密锁住,黑客在服务器目录下留下勒索文件Read_Me.html,打开后内容如下:

  1. 3.     CVE-2024-4577漏洞

本次攻击事件是黑客使用locked勒索病毒,通过利用XAMPPPHP-CGI模式下在六月公布的远程代码执行漏洞CVE-2024-4577后对使用低版本的PHP Web服务器发起的典型Day1攻击。

该漏洞是由DEVCORE团队发现,PHP-CGI在设计实现时未能考虑Windows平台的Best-Fit字符编码转换特性,使得黑客可以构造特定的请求,绕过安全机制,从而直接在远程服务器上任意执行代码。当前主要影响特定语系设置的Windows系统,包括简体中文(936),繁体中文(950)以及日文(932), 影响的PHP版本包括PHP8.3(<8.3.8)/PHP8.2(<8.2.20)/PHP8.1(<8.1.29)以及其他可能低于PHP8或者已经不维护的版本。


漏洞背景原理

1) PHP CGI

CGI (Common Gateway Interface通用网关接口) 是通用网关协议,可以将客户端请求传给其他程序(如PHP),收集程序的输出再返回给客户端。PHP-CGI是用于Web服务器和PHP代码之间的通信,通常用于PHP 5.x版本。也正是在PHP-CGI模式下爆出了CVE-2012-1823这个安全缺陷。


2) CVE-2012-1823漏洞

该漏洞不能正确处理缺少=(等号)字符的查询字符串。根据RFC3875规范,如果查询字符串缺少未解码的等号,那么整个查询字符串应当被视为CGI参数进行传递,这给攻击者带了注入非法命令行参数的机会,攻击者可以通过在查询字符串中添加命令行选项来执行任意代码。


PHP-CGI的命令行参数如下图所示:

那么攻击者如果利用上述参数去构造RCE攻击呢?他们需要利用以下参数和配置:

a. -d选项,该参数可以通过修改ini条目更改php配置。

b. allow_url_include, 设置它为on,可以开启php://inputphp代码发到服务器并执行。

c. auto_prepend_file, 指定每个php脚本执行前自动包含的文件,它是全局的,对所有脚本生效。


通过上述参数和配置就可以构造出如下攻击url:

Post “http://ip/?-d allow_url_include=on -d auto_prepend_file=php://input”

攻击者只需要将自己的php恶意代码构造到http内容中,就可以发送到服务器上并被执行从而达到攻击的目的。


3Windows ‘Best-Fit’编码

PHP后来对上述的CVE-2012-1823漏洞做了修复,只要匹配到上传参数中没有=(等号)且第一个字符是-的话,则不会去执行并解析命令行。

Windows ‘Best-Fit’编码给黑客绕过了这个修复的机会。


Windows系统使用代码也来支持不同语言和区域的字符编码,如简体中文使用代码页936来映射字符和计算机的数值。如果用户输入了代码页中不支持的字符,为了能继续运行,不能因为无法识别字符而崩溃,Windows使用了Best-Fit这种兼容机制,采用最接近的字符来替换无法识别的字符。

bestfit936显示如下的映射部分截取图所示。


CVE-2024-4577利用了WindowsBest-Fit编码,使用%ad来替代之前查询字符串中的- 则可以绕过之前CVE-2012-1833修复中对-的检测,而Windows在解析的时候,给转化成-了,从而又重新完成了命令的执行。这也是本次CVE-2024-4577漏洞的根本原因。


新的RCE攻击的url格式则被构造如下所示:

Post “http://ip/?%ADd allow_url_include=on %ADd auto_prepend_file=php://input”

  1. 4.     CyberFlood漏洞库抓包示例

PHP CGI安全漏洞公布后,CyberFloodTestCloud漏洞库中也迅速更新了此漏洞,我们可以利用测试平台抓包看一下该漏洞的具体信息。  


漏洞的信息描述:

把漏洞加入CTA测试模板运行后,抓包可以看到Post的构造的URL跟前文一致


5. 5.  解决方案建议

 对于此次安全漏洞,推荐如下一些应对措施但不限于:

  •     升级到最新的版本,目前官方已经发布了PHP版本的更新,修复了漏洞。

  •     加强Web服务器的安全配置,例如限制访问,使用防火墙规则等。

  •     使用Web应用防火墙(WAF)来增强防护。

  •     建立良好的备份策略,以便在遭受攻击时快速恢复。

     

本  期为大家介绍了CVE-2024-4577 PHP-CGI漏洞的相关知识及原理,后续我们可以继续探讨一些相关热点安全问题,欢迎大家关注思博伦技术公众号。


     关键字:  漏洞,Web安全,PHP,网络安全,CVE,CyberFlood,RCE,远程代码执行漏洞,TestCloud,病毒


 





思博伦技术中心
思博伦技术中心由思博伦全球服务部的技术团队管理和维护。我们致力于提供完善的技术支持,并定期更新。通过我们的微信平台您将获取最新的产品发布信息,全面的产品使用技巧,实用的常见问题解决方案,以及完善的售后服务流程。
 最新文章