前段时间新出现一个攻击范围很广的漏洞,一些XAMPP服务器受到攻击。这个攻击事件是怎么发生的呢?背后的原因以及技术细节是什么呢?本文带领大家透过这次PHP CGI攻击事件了解网络攻击的背后真相以及相关原理。
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漏洞就是这种安全漏洞。
2. PHP-CGI安全事件
时间:2024年6月
目标: 使用PHP-CGI的Web服务器
结果: Web服务器受到黑客攻击,所有的文件都被加密锁住,黑客在服务器目录下留下勒索文件Read_Me.html,打开后内容如下:
3. CVE-2024-4577漏洞
本次攻击事件是黑客使用locked勒索病毒,通过利用XAMPP在PHP-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://input将php代码发到服务器并执行。
c. auto_prepend_file, 指定每个php脚本执行前自动包含的文件,它是全局的,对所有脚本生效。
通过上述参数和配置就可以构造出如下攻击url:
Post “http://ip/?-d allow_url_include=on -d auto_prepend_file=php://input”
攻击者只需要将自己的php恶意代码构造到http内容中,就可以发送到服务器上并被执行从而达到攻击的目的。
3)Windows ‘Best-Fit’编码
PHP后来对上述的CVE-2012-1823漏洞做了修复,只要匹配到上传参数中没有=(等号)且第一个字符是-的话,则不会去执行并解析命令行。
而Windows ‘Best-Fit’编码给黑客绕过了这个修复的机会。
Windows系统使用代码也来支持不同语言和区域的字符编码,如简体中文使用代码页936来映射字符和计算机的数值。如果用户输入了代码页中不支持的字符,为了能继续运行,不能因为无法识别字符而崩溃,Windows使用了Best-Fit这种兼容机制,采用最接近的字符来替换无法识别的字符。
如bestfit936显示如下的映射部分截取图所示。
CVE-2024-4577利用了Windows的Best-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”
4. CyberFlood漏洞库抓包示例
该PHP CGI安全漏洞公布后,CyberFlood在TestCloud漏洞库中也迅速更新了此漏洞,我们可以利用测试平台抓包看一下该漏洞的具体信息。
漏洞的信息描述:
把漏洞加入CTA测试模板运行后,抓包可以看到Post的构造的URL跟前文一致。
5. 5. 解决方案建议
符 对于此次安全漏洞,推荐如下一些应对措施但不限于:
升级到最新的版本,目前官方已经发布了PHP版本的更新,修复了漏洞。
加强Web服务器的安全配置,例如限制访问,使用防火墙规则等。
使用Web应用防火墙(WAF)来增强防护。
建立良好的备份策略,以便在遭受攻击时快速恢复。
本 本期为大家介绍了CVE-2024-4577 PHP-CGI漏洞的相关知识及原理,后续我们可以继续探讨一些相关热点安全问题,欢迎大家关注思博伦技术公众号。
关键字: 漏洞,Web安全,PHP,网络安全,CVE,CyberFlood,RCE,远程代码执行漏洞,TestCloud,病毒