源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

动网dvbbs7.1论坛权限提升漏洞及防范(图)

  • 时间:2021-12-05 01:53 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:动网dvbbs7.1论坛权限提升漏洞及防范(图)
在6月份的黑防上看到《动网7.1漏洞惊现江湖》一文,说是admin_postings.asp文件 存在注入漏洞,但利用的前提是拥有超级斑竹或前台管理员权限。我想起以前发现的动网7.x版本存在一个前台权限提升漏洞, 正好可以结合起来利用。这个前台权限提升漏洞对7.x的Access和 Sql版都有效。下面我们就以7.0 sp2 sql版,讲解这个漏洞的利用。 漏洞分析 我们知道动网是通过GroupID来判断当前用户所在的组的,然后再通过组的信息判断用户的权限。它是如何取得这个GroupID的呢?让我们看看登录验证的那一段: login.asp的525行左右 Rem ==========论坛登录函数========= Rem 判断用户登录 Function ChkUserLogin(username,password,mobile,usercookies,ctype) …………前面的代码省略 Sql="Select UserID,UserName,UserPassword,UserEmail,UserPost,UserTopic,UserSex,UserFace ,UserWidth,UserHeight,JoinDate,LastLogin,UserLogins,Lockuser,Userclass,UserGroupID,UserGroup, userWealth,userEP,userCP,UserPower,UserBirthday,UserLastIP,UserDel,UserIsBest,UserHidden, UserMsg,IsChallenge,UserMobile,TitlePic,UserTitle,TruePassWord,UserToday " Sql=Sql+" From [Dv_User] Where "&sqlstr&"" set rsUser=Dvbbs.Execute(sql) If rsUser.eof and rsUser.bof Then ChkUserLogin=false Exit Function Else iMyUserInfo=rsUser.GetString(,1, "|||", "", "") rsUser.Close:Set rsUser = Nothing End If iMyUserInfo = "Dvbbs|||"& Now & "|||" & Now &"|||"& Dvbbs.BoardID &"|||"& iMyUserInfo &"||||||Dvbbs" iMyUserInfo = Split(iMyUserInfo,"|||") If trim(password)<>trim(iMyUserInfo(6)) Then ChkUserLogin=false ElseIf iMyUserInfo(17)=1 Then ChkUserLogin=false ElseIf iMyUserInfo(19)=5 Then ChkUserLogin=false Else ChkUserLogin=True Session(Dvbbs.CacheName & "UserID") = iMyUserInfo Dvbbs.UserID = iMyUserInfo(4) RegName = iMyUserInfo(5) Article = iMyUserInfo(8) UserLastLogin = iMyUserInfo(15) UserClass = iMyUserInfo(18)  GroupID = iMyUserInfo(19) TitlePic = iMyUserInfo(34) If Article<0 Then Article=0 End If …………后面的代码省略 可以看到,动网将用户的信息先用”|||”三个竖线连起来,做为一个字符串传给iMyUserInfo,然后iMyUserInfo由”|||”分隔成一个字符串数组。用户密码验证正确后就把数组的第20个元素的值:iMyUserInfo(19) 赋给GroupID。看到没,GroupID只是数组对应的第20个元素的值,如果iMyUserInfo(19)的值为1的话,动网就以为现在登录的用户是前台管理员了。 在inc目录下的Dv_ClsMain.asp文件中也有这么验证用户身份的一段代码,用来在用户更新信息后检测用户的权限。 Dv_ClsMain.asp的650行左右 Public Sub TrueCheckUserLogin() ……前面的省略 Dim Rs,SQL Sql="Select UserID,UserName,UserPassword,UserEmail,UserPost,UserTopic,UserSex, UserFace,UserWidth,UserHeight,JoinDate,LastLogin,UserLogins,Lockuser,Userclass,UserGroupID, UserGroup,userWealth,userEP,userCP,UserPower,UserBirthday,UserLastIP,UserDel,UserIsBest, UserHidden,UserMsg,IsChallenge,UserMobile,TitlePic,UserTitle,TruePassWord,UserToday" Sql=Sql+" From [Dv_User] Where UserID = " & UserID Set Rs = Execute(Sql) If Rs.Eof And Rs.Bof Then Rs.Close:Set Rs = Nothing UserID = 0 EmptyCookies LetGuestSession() Else MyUserInfo=Rs.GetString(,1, "|||","","") Rs.Close:Set Rs = Nothing If IsArray(Session(CacheName & "UserID")) Then MyUserInfo = "Dvbbs|||"& Now & "|||" & Session(CacheName & "UserID")( 2) &"|||"& BoardID &"|||"& MyUserInfo &"||||||Dvbbs" Else MyUserInfo = "Dvbbs|||"& Now & "|||" & DateAdd("s",-3600,Now()) &"|||" & BoardID &"|||"& MyUserInfo &"||||||Dvbbs" End IF Response.Write MyUserInfo MyUserInfo = Split(MyUserInfo,"|||") ……  End If End Sub ’用户登录成功后,采用本函数读取用户数组并判断一些常用信息 Public Sub GetCacheUserInfo() MyUserInfo = Session(CacheName & "UserID") UserID = Clng(MyUserInfo(4)) MemberName = MyUserInfo(5) Lastlogin = MyUserInfo(15) If Not IsDate(LastLogin) Then LastLogin = Now() UserGroupID = Cint(MyUserInfo(19))     ……后面代码省略  两处检验的方式一模一样,所以我们可以利用这两个中的任意一个来达到我们的目的。看它的sql语句部分: Sql="Select UserID,UserName,UserPassword,UserEmail,UserPost,UserTopic,UserSex, UserFace,UserWidth,UserHeight,JoinDate,LastLogin,UserLogins,Lockuser,Userclas s,UserGroupID,UserGroup,userWealth,userEP,userCP,UserPower,UserBirthday,UserLa stIP,UserDel,UserIsBest,UserHidden,UserMsg,IsChallenge,UserMobile,TitlePic,UserTit le,TruePassWord,UserToday" Sql=Sql+" From [Dv_User] Where UserID = " & UserID javascript:window.open(this.src); src="/article/UploadPic/2006/8/27/200682723275512.GIF" onload="javascript:if(this.width>screen.width-500)this.style.width=screen.width-500;" align=baseline border=0>
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部