【ASP.NET代码审计】逐浪CMS(ZOOMLA!CMS)漏洞挖掘

0X00 综述

逐浪CMS是基于.net编写的一款CMS,号称还是军工单位也采用过这套CMS,更号称开源,那天下了他所谓的“源代码“下来,纠结了,页面除了aspx文件,连cs和其它文件基本都不见一个,这叫做开源吗?坑人也不至于这样吧……好吧,虽然不是高手,但是也先拿他开刀吧,各种被坑不爽啊……

0X01 PRE-1(LOCALDB)

挖掘这货的漏洞之前先了解一点其它方面的东西,没什么兴趣的可以跳过。先推荐一个mssql2012的新版本,localdb版(2012版独有的),在mssql的大部分版本中,这个版本最精简,安装简单,不用纠结很多其它方面的东西,而且还有一个问题,老版本的数据库无法恢复高版本数据库备份出来的数据,比如2005无法恢复2008备份出来的bak数据库文件。

提供一下mssql 2012 express的地址:

http://www.microsoft.com/zh-cn/download/details.aspx?id=35579

另外单独给下localdb的下载:

http://download.microsoft.com/download/5/F/9/5F955661-5AA9-400D-ACFA-44F14311BC14/CHS/x86/SqlLocalDB.msi

下面介绍一些简单的使用,或者参考以下链接也可以:

http://www.kodyaz.com/sql-server-2012/sql-server-localdb-management-utility-sqllocaldb.aspx

安装好之后,可以使用sqllocaldb.exe来管理数据库实例的创建、开启、停用等。

比如创建一个数据库的实例:Sqllocaldb create localdb

1

启动数据库实例:SqlLocalDB.exe start localdb,使用该命令后会有如下提示:

LocalDB 实例“LocalDB”已启动。

创建好实例之后,查看实例的连接参数,他启用了一个管道的信息,这个比较重要。

查看实例信息:SqlLocalDB.exe info localdb,结果如下图(重点记住实例管道的名称):

2

 

随便找一个连接工具,比如分离精简出来的查询分析器,直接连接,如图:

3

 

这样既可成功连接到本地的数据库中,但是注意只能使用SQL语句进行查询。

0X02 PRE-2(对象浏览器)

另外也要先了解vs2008的对象浏览器的使用,主要介绍用对象浏览器来查找dll中包含的类名、方法名等,懂的可以跳过。找到视图-对象浏览器:

4

 

打开之后,选择自定义组件集:

5

点击旁边的…按钮添加dll等:

6

在搜索框内输入信息进行查询:

7

随便选中一个类名或方法名就可以看见该方法在哪个dll里面,这对于没有源码的情况下查找相关信息比较有用,比如下图的方法就在ZoomLa.BLL.dll中:

8

当然还可以用其它方法。这只是给一个例子。

0X03 SQL注入的挖掘

按PRE-2的方法,我们看看manage_Config_sousuo这货所在的dll,找到在App_Web_m5rncppr.dll里面,使用如ilspy等工具直接去查看源代码,找到对应的类,先看Page_Load:

没有任何特别的地方,就是说没有任何的验证等,找找哪个aspx文件还有这个类和dll名,/manage/Config/sousuo.aspx里的信息是:

包括有类名和dll名。所以可以完全断定我们要看的就是这个页面了。

查看click方法:

TextBox1.Text就是搜索的文本框本身,cmdText就是拼接的字符串,很明显有注入的问题。至于对于declare怎样进行注入,再研究下declare基本就可以搞了。

不过这个sql注入不是什么最致命的问题。后面一个漏洞才是有点威胁的。

0X04 无验证数据库备份与数据库下载

简单说,就是非管理员可以随意备份数据库,而且可以直接下下来……

好了,直接简单说下过程:

无意中看到另外一个类manage_Config_BackupRestore中的page_load方法:

从上面的代码可以看出,无论是第一次打开页面还是已经有提交过数据到页面中去,都没有做某种限制,什么限制?限制未登录人员进行操作。好,再看另外一个比较关键的方法,就是按钮点击事件的click方法:

上面的操作简单说就是把数据备份到网站目录下的temp文件夹中去。然后也没有做任何的访问控制!!

好吧,既然那么悲剧,拿官网来测试一下:

9

小小备份一个:

10

还会自动压缩让你下载的,很不错。整个数据库都在手上了,一个爽啊。

不过在恢复这个数据库的时候遇到了不少问题,不是安装这里出错就是哪个东西找不到,所以就折腾出了上面的localdb,不过也还是遇到一些问题,下面我也提供一个恢复数据库的操作过程给大家,以便大家以后做相关的测试的时候,无需搞太多很复杂的东西。

具体操作是参考以下链接进行的:

http://www.cnblogs.com/adandelion/archive/2006/09/30/519534.html

恢复数据库第一步,连接上之后执行下面的操作:

12

可以查询到logicalname,这两个信息比较重要,把他拼凑到命令中,第二步执行的命令如下:

执行了这步之后,就恢复出了一个DB数据库了。直接use这个数据库,进行下面的查询:

结果就不发出来了。

0X05 SHELL

登录后台,选择模板管理——新建模板,直接写aspx文件,无亮点了。

0X06 无法成功破解MD5的情况下?

官网后台的admin密码,在cmd5目前是没有破解出来的。那如果遇到这种情况的话,该怎么办?无法登录了?

我们看看下面一段代码:

我再提供一段cookie的测试数据:

其它自行分析了。

0X07写在最后

之前我也在另外一个文档里面提到过,asp.net的机制和php不一样,所以可以产生的都是比较常规的漏洞。比如上面的sql注入、数据库备份等问题的产生也都是比较常规的问题,还有拿shell也是,都不用去做分析都知道问题产生的地方了。

这套CMS最新版是CMS2 X1.0(官网上厂商吹得很强大啊),上面的问题有好几个比较新点的版本都有,估计下去越更新问题越多,很明显厂家就不是特别的注重安全方面的问题,而且号称开源,但是又不是真正的开源,只是一个幌子,当然了可以反编译出来就是后话了。

目前上面脱裤的问题厂商已经修复了,但是SQL注入暂时还是没有修复的。

link:http://zone.wooyun.org/content/4099

本文由网络安全攻防研究室(www.91ri.org)信息安全小组收集整理,转载请注明出处。