按说天下本无事,却因存在一些好事者而变得不那么太平了。就拿沸腾多媒体新闻系统来说吧,几经改版,自2006年9月份发布1.1版至今,再未做过升级,其官方网站也采用此版本,安全性也算是能经受得起考验,看来一切趋于平和,然而就因为好事,这种和谐就被打破了。一日闲来无事,我便下载了该版本的代码看看,也好学习借鉴,不过这一看却给它带来了灭顶之灾! <BR>所谓蚁穴,其特点就是能毁堤坝,虽小却多,加上洪水不断的侵袭,千里之堤终毁于蚁穴!热锅上的蚂蚁尚不能安生,何况“沸腾”,于是乎蚂蚁便四处打洞以求生存,如果说系统本身的漏洞是堤坝上的蚁穴,那么像我们这些好事者便是“洪水猛兽”了,“沸腾”安能高枕无忧,所谓树欲静而风不止。 <BR>闲话少叙,还是先洞察蚁穴吧!大凡看过沸腾0.45版代码的人都会对这个系统的安全性担忧,好在及时推出了1.1版,该版本代码编写得更条理、专业,安全性也做得不错,除了对超级管理员可以访问的页面未进行变量过滤(即对超级管理员绝对信任,而这些注入点根本就没有利用价值)外,几乎对所有的变量都进行了过滤。但是智者千虑必有一失,以下提及的这些漏洞足以说明这点,而且这些漏洞对该系统几乎是毁灭性的灾难,包括其官方网站!考虑到该系统使用的比较多以及漏洞的危害,在发稿前我已经联系了沸腾,文中也提供了防范方法,希望使用该系统的各网站管理员能及时修补漏洞。 <BR><BR>漏洞公告 <BR>为了节省黑防宝贵的版面,以下说明非必要时均略去代码,大家可以自己下载该系统代码对照阅读。 <BR>漏洞一:Reviewindex.asp的shu变量未过滤,导致可以构造Union语句任意注入! <BR>漏洞二:Result.asp和BlogResult.asp的数字型变量BigClassID用checkstr过滤,导致可以避开单引号继续注入! <BR>漏洞三:RssFeed.asp和Send_submit.asp的数字型变量TopNews、newsid用checkstr过滤。 <BR>漏洞四:Index.asp~Index5.asp文件,当“UserTableType = "DVBBS"”时,即整合动网论坛时未过滤loginuser=Request.cookies(Forcast_SN)("UserName")。 <BR>漏洞五:后台挂马。CreateASP.asp从News表中读取Title写入LastNewsXP.asp文件;Systemsave.asp写网站配置参数到Config.asp;数据库备份时未过滤扩展名后的空格,导致可以直接挂马! <BR>另外,AddReview.asp和Admin_login.asp文件还存在注入点,但因不能得到注入结果而无法利用,危害不大,但还是建议修补! <BR><BR>漏洞利用 <BR>以下如非必要,同样略去了构造Union语句的过程和非必要的分析说明! <BR>漏洞一:因为Reviewindex.asp中没有包含文件Config.asp,导致直接访问该文件时,由 <BR>于conn.execute语句中的db_Review_Table变量无法取值而返回空值。但是我们发现该文件被包含在Index.asp、Bloguser.asp、Index1.asp、Index4.asp、Index5.asp和1.asp等文件中调用,所以在访问这些页面时,提交shu变量便可利用此漏洞。 <BR>我们构造的Union语句如下: <BR><BR>1 * from ReView where passed=1 union select passwd, 0,username,4,5,1,7,lastlogin,9,10,11,12,13,14,15,16 from admin union select top 1 <BR><BR>说明:使用两个Union是为了让第二个Select结果集的各个字段名自动适应第一个Select结果集,这样会减少许多不必要的麻烦;指定top 1是为了减少返回太多不必要的数据;依据代码,当第二个Select的第2、6个字段分别为0、1时,页面将显示出username,链接指向passwd。 <BR>注入点:在“http://*.*.*.*/Index.ap?shu=”后直接输入以上构造的Union语句,即可得到Admin管理员表中的用户名及密码,如图1所示,同理可得到FT_User用户表中所有的用户名及密码。由于shu变量未做任何过滤,所以我们可以任意构造Union语句,如用“where username=’base’”获得base用户的信息,用“where key=’super’”获得所有超级管理员的信息等,如图2所示。我们还可以通过1.asp、Bloguser.asp、Index1.asp、Index4.asp和Index5.asp等文件实现注入,如图3所示。<BR> |
|