源码找茬|90%PHP网站都用过的开源组件,一行代码触发远程代码执行!
- 2026-09-26 08:17:10

今天带大家拆解 PHPMailer 远程代码执行漏洞(CVE-2016-10033) 原生源码,依旧先找茬、后解密。
做PHP开发的小伙伴,几乎没人能绕开PHPMailer。作为全球最知名的PHP开源邮件发送组件,它被无数企业官网、后台系统、CMS框架内置使用,普及率极高。
但就是这个公认稳定、安全的老牌开源项目,曾爆出一个封神级高危漏洞,只需一串恶意参数,就能直接拿下服务器权限、执行任意系统命令。
先停30秒思考:看完下面这段官方原版PHP源码,你能快速锁定漏洞位置吗?
没有复杂的漏洞链,只是一个极其隐蔽的正则参数误用,却成为无数PHP站点的噩梦。
01 漏洞原生源码(PHPMailer 官方原版漏洞代码)
这段代码来自 PHPMailer 漏洞版本核心文件 class.phpmailer.php,是邮件内容转换的核心逻辑,100%官方真实源码,未做任何修改伪造,也是本次RCE漏洞的唯一触发点。
/*** 把HTML内容转为纯文本* @param string $html 原始HTML邮件内容* @return string*/protected functionhtml2text($html){// 换行符统一处理$text = preg_replace('/<br\s*\/?>/i', "\n", $html);$text = preg_replace('/</', ' <', $text);// 核心转换逻辑【漏洞所在行】$text = preg_replace('/<\/?(font|span|div|p|h1|h2|h3)[^>]*>/ie', '', $text);// 去除多余空行、空格$text = preg_replace("/\n\n+/", "\n", $text);$text = trim($text);return $text;}
直击提问:这段看似普通的HTML转文本代码,藏了什么致命后门?
不用精通PHP底层,只要懂基础语法,就能看出关键问题,这也是Web安全入门必学的经典函数特性漏洞。

02 漏洞精准定位(答案揭晓)
直接公布核心漏洞:preg_replace 函数末尾的 /e 修饰符,搭配可控用户输入,触发任意代码执行。
整段代码的致命缺陷,全部集中在这一行,我们分步通俗拆解,新手也能看懂:

漏洞核心1:危险的 /e 正则修饰符
PHP中 preg_replace() 函数的 /e 修饰符 是高危特性:它会让正则替换的结果,被PHP引擎当作代码执行,而非普通字符串替换。这是PHP官方早已废弃的危险特性,但老旧开源组件大量沿用。
漏洞核心2:用户输入完全可控
函数接收的 $html 参数,本质是用户可控的邮件发送内容、发件人信息。攻击者可以自主构造包含特殊正则匹配内容的恶意Payload,传入该接口。
漏洞核心3:无过滤、无转义直接执行
程序没有对用户输入做任何特殊字符过滤、正则逃逸处理。当恶意内容匹配到正则规则后,preg_replace 会通过 /e 修饰符,将攻击者构造的恶意代码直接解析执行。
最终攻击效果
攻击者无需登录、无需后台权限,只需发送一封构造好的恶意邮件请求,即可直接在服务器执行任意系统命令,读取网站源码、上传木马、篡改数据、拿下服务器权限,实现完全控权。
03 为什么这个漏洞是PHP圈经典噩梦?
很多人疑惑:一个正则修饰符的问题,危害真的这么大吗?我们盘点它的恐怖之处:
覆盖范围空前广泛:PHPMailer 是PHP生态邮件功能的标配组件,企业官网、商城系统、后台管理、开源CMS几乎全员内置,受影响站点数以百万计
利用门槛极低:无需复杂漏洞链、无需特殊工具,一行恶意请求即可触发,新手脚本小子也能轻松利用
权限彻底失控:直接执行服务器系统命令,权限与网站运行用户一致,可实现全站文件增删改查、数据窃取
隐蔽性极强:攻击行为伪装成正常邮件发送请求,常规日志、防火墙很难拦截溯源
该漏洞爆出后,全网大量PHP站点被批量攻陷,也让它成为PHP开源组件最具代表性的RCE漏洞,被写入各类安全教材。
04 官方修复方案(源码对比学习)
漏洞根因极其明确:滥用高危的 /e 正则修饰符。官方修复思路简单且彻底:彻底移除 /e 修饰符,放弃代码执行特性,改用安全的回调函数完成替换逻辑。
官方修复后核心源码:
// 修复方案:删除危险 /e 修饰符,使用安全回调替换$text = preg_replace_callback('/<\/?(font|span|div|p|h1|h2|h3)[^>]*>/i',function() {return '';},$text);

一句话总结漏洞本质:误用高危正则修饰符,可控用户输入未做过滤,导致任意代码执行。
05 PHP开发者必避的同款高危坑
这个漏洞虽然发布多年,但同类PHP代码执行漏洞至今仍高频出现,所有PHP开发者、运维、安全人员务必牢记:
1. 彻底禁用 /e 正则修饰符:PHP官方已废弃该特性,所有场景优先使用 preg_replace_callback 回调函数,杜绝动态代码执行风险
2. 用户输入零信任原则:所有外部传入参数(邮件内容、表单、URL参数),涉及正则、命令、文件操作时,必须严格过滤转义
3. 及时更新开源依赖:PHPMailer、ThinkPHP、Laravel等常用PHP组件,高危漏洞频发,务必定期升级版本,不使用老旧漏洞版本
互动留言
你第一眼识破这个漏洞了吗?有没有踩过PHP开源组件漏洞的坑?
下期想看哪些PHP经典漏洞?ThinkPHP RCE、Laravel反序列化、phpMyAdmin注入都可以留言!
需要本次漏洞复现POC+修复完整源码包的朋友,点赞留言必回