vBulletin 5 远程命令执行(无需登录)

官方公告:http://www.vbulletin.org/forum/showthread.php?p=2558144

POC 原文地址:http://pastie.org/pastes/10527766/text?key=wq1hgkcj4afb9ipqzllsq

有个叫 Coldzer0 的家伙在 http://0day.today 上卖 vBulletin 的 RCE exp,vBulletin 的主论坛已经被攻破,据称该漏洞已经存在3年以上。下面是漏洞分析:

vBulletin 在 /core/vb/api 提供了一些 ajax 的 API 调用,其中有个 hook.php 用到了反序列化:

值得注意的是在[之前的 vBulletin 漏洞](http://drops.wooyun.org/papers/8261)中也出现过反序列化造成的问题。

看起来这次 unserialize() 不会有什么漏洞了,但是在 /core/vb/db/result.php 里发现了可疑的地方:

每次用 foreach() 访问一个迭代器对象时,rewind() 这个函数都会被首先调用。我们再看看 /core/vb/database.php 中的 free_result() 函数:

因此这里产生了一个对象注入,原理可以看看 OWASP 里的 [PHP Object Injection](https://www.owasp.org/index.php/PHP_Object_Injection)。

我们可以构造一个序列化对象测试下:

得到 URL 编码后的字符串:

解一下码便于分析:

PHP 序列化的格式可以参看这篇文章:[PHP 序列化(serialize)格式详解](http://www.neatstudio.com/show-161-1.shtml)。

所以最终的 POC 就是:

修复方案在上文提到的 OWASP 的资料中已经说明:

>Do not use unserialize() function with user-supplied input, use JSON functions instead.

把 unserialize() 换成 json_decode() 就行。

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录