最近玩新云时,在COOKIE欺骗的时候,经常会遇到已经有管理员在线,不允许多用户同时登陆,导致进不了后台,拿不了webshell,很是郁闷,下了新云的源码回来看了下。在admin_login.asp文件里发现了个小问题,一起来看看(由于小弟ASP算不上入门,仅简单分析下,出错了别拿番茄炸我):
Sub logout()
'清除COOKIES中管理员身份的验证信息.
Session.Abandon
Session("AdminName") = ""
Session("AdminPass") = ""
Session("AdminGrade") = ""
Session("AdminFlag") = ""
Session("AdminStatus") = ""
Session("AdminID") = ""
Session("AdminRandomCode") = ""
Response.Cookies(Admin_Cookies_Name) = ""
Response.Redirect ("../")
End Sub
这里可以到,我们COOKIE提交的时候主要是提交AdminName,AdminPass,AdminGrade,AdminFlag,AdminStatus,AdminID,AdminRandomCode这几个参数,RandomCode是随机码,也就是登陆时验证管理员是否在线的参数。
Sub chklogin()
Dim adminname, password,RandomCode
adminname = Trim(Replace(Request("adminname"), "'", ""))
password = md5(Trim(Replace(Request("password"), "'", "")))
If Newasp.CheckPost = False Then
ErrMsg = ErrMsg + "您提交的数据不合法,请不要从外部提交登陆。"
Founderr = True
End If
If Newasp.IsValidStr(Request("adminname")) = False Then
ErrMsg = ErrMsg + "<li>用户名中含有非法字符。</li>"
Founderr = True
End If
If Newasp.IsValidPassword(Request("password")) = False Then
ErrMsg = ErrMsg + "<li>密码中含有非法字符。</li>"
Founderr = True
End If
If Request("verifycode") = "" Then
ErrMsg = ErrMsg + "<br>" + "<li>请返回输入确认码。</li>"
Founderr = True
ElseIf Session("getcode") = "9999" Then
Session("getcode") = ""
ErrMsg = ErrMsg + "<br>" + "<li>请不要重复提交,如需重新登陆请返回登陆页面。</li>"
Founderr = True
ElseIf CStr(Session("getcode"))<>CStr(Trim(Request("verifycode"))) Then
ErrMsg = ErrMsg + "<br>" + "<li>您输入的认码和系统产生的不一致,请重新输入。</li>"
Founderr = True
End If
Session("getcode") = ""
If adminname = "" Or password = "" Then
Founderr = True
ErrMsg = ErrMsg + "<br>" + "<li>请输入您的用户名或密码。</li>"
Exit Sub
End If
If Founderr = True Then Exit Sub
If Not IsObject(Conn) Then ConnectionDatabase
Set Rs = Server.CreateObject("ADODB.Recordset")
SQL = "select * from NC_Admin where password='" & password & "' And username='" & adminname & "'"
Rs.Open SQL, Conn, 1, 3
If Rs.BOF And Rs.EOF Then
FoundErr = True
ErrMsg = ErrMsg + "<li>您输入的用户名和密码不正确或者您不是系统管理员。!</li>"
Exit Sub
Else
If password <> Rs("password") Then
FoundErr = True
ErrMsg = ErrMsg + "<br><li>用户名或密码错误!!!</li>"
Exit Sub
End If
If Rs("isLock") <> 0 Or Rs("isLock") = "" Then
Founderr = True
ErrMsg = "<li>你的用户名已被锁定,你不能登陆!如要开通此帐号,请联系管理员。</li>"
Exit Sub
End If
End If
这里定义了三个变量adminname, password,RandomCode 可以看到,从事件开始到结束都没有对RandomCode变量进行判断。
[1] [2] 下一页