动网7.0sp2 cookie欺骗原理

来源:互联网 发布:韩侂胄 知乎 编辑:程序博客网 时间:2024/05/15 16:19

动网7.0sp2 cookie欺骗原理

cookie欺骗必须要收集到密文,cookie是怎么收集的呢?不允许上传,不允许html,不允许flash,防止网页带毒,防止asp木马。防止跨站漏洞攻击。建议:强制不允许长时间保存cookie。
是不是只要收集到cookie密文就可以进行cookie欺骗呢?是的,如果password存放在cookie中的话。
动网作这个为什么?相比较而言降低很多,因为你只要再登陆,前面的cookie就失效,动网就是让你这个失效。
以动网数据库和注册、登陆、注销为核心建立passport是可以信赖的。
李涛 2006-11-22
http://hi.baidu.com/donetmao/item/fc025126a60399cfdcf69af9
动网7.0sp2 cookie欺骗原理 (本文发于<黑客防线>杂志)
似乎近年来asp脚本的漏洞都来自动网,从sql注入到cookie欺骗,动网无一不首当其冲。树大招风,无不为奇,但在严酷的磨练下,动网最新的版本似乎无懈可击。但网上关于动网入侵的案例不少,总结起来,其实并非动网本身问题,而属论坛配置或管理不当。
动网论坛目前最新版本sql注入似乎不太可能了,而md5加密的16位密码如果设置比较合理的话,暴力破解也非其对手。
目前直接入侵动网无非找一些管理上的不当入侵,比如默认的管理员用户名密码,根据默认的数据库路径盗得数据库等。当有了数据库而无法暴力破解管理员密码的话,cookie欺骗就能大展身手!
然而在多次cookie欺骗得手而要对动网下黑手时候,问题出现了,在cookie其中几个值进行修改欺骗并不成功,仔细研究后发现,其中password字段并非md5加密的密文(图1),一般的md5密文均为数字加小写字母或数字加大写字母的形式,大写字母和小写字母放在一起,一定是利用了另外的算法处理了密码。
图1
打开动网的源代码,从index.asp文件中跟踪到inc/Dv_ClsMain.asp,发现这样几个函数:   引用  If checkStr(Trim(Request.Cookies(Forum_sn)("password")))=TruePassWord Then
Execute("UpDate [Dv_user] Set TruePassWord='"&TruePassWord&"' where UserID="&UserID)
MemberWord = TruePassWord
Dim iUserInfo
iUserInfo = Session(CacheName & "UserID")
iUserInfo(35) = TruePassWord
Session(CacheName & "UserID") = iUserInfo
End If 第一句校验如果用户cookie中的password字段值等于数据库中truepassword的值,等会,truepassword,这是什么意思?打开动网的数据库,果然在dv-user字段中发现userpassword和truepassword两个字段,那这个truepassword是做什么用的呢?
继续跟踪这个函数:   引用  Public Sub NewPassword0()
If UserID=0 Then Exit Sub
If Not Response.IsClientConnected Then
Exit Sub
End If
Dim TruePassWord,usercookies
usercookies=Request.Cookies(Dvbbs.Forum_sn)("usercookies")
TruePassWord=Createpass
If (Isnull(usercookies) or usercookies="") And Not Isnumeric(usercookies) Then usercookies=0
Select Case Cint(usercookies)
Case 0
Response.Cookies(Forum_sn)("usercookies") = usercookies
Case 1
Response.Cookies(Forum_sn).Expires=Date+1
Response.Cookies(Forum_sn)("usercookies") = usercookies
Case 2
Response.Cookies(Forum_sn).Expires=Date+31
Response.Cookies(Forum_sn)("usercookies") = usercookies
Case 3
Response.Cookies(Forum_sn).Expires=Date+365
Response.Cookies(Forum_sn)("usercookies") = usercookies
End Select
Response.Cookies(Forum_sn).path=cookiepath
Response.Cookies(Forum_sn)("username") = MemberName
Response.Cookies(Forum_sn)("UserID") = UserID
Response.Cookies(Forum_sn)("userclass") = checkStr(Request.Cookies(Forum_sn)("userclass"))
Response.Cookies(Forum_sn)("userhidden") = UserHidden
Response.Cookies(Forum_sn)("password") = TruePassWord
'检查写入是否成功如果成功则更新数据
If checkStr(Trim(Request.Cookies(Forum_sn)("password")))=TruePassWord Then
Execute("UpDate [Dv_user] Set TruePassWord='"&TruePassWord&"' where UserID="&UserID)
MemberWord = TruePassWord
Dim iUserInfo
iUserInfo = Session(CacheName & "UserID")
iUserInfo(35) = TruePassWord
Session(CacheName & "UserID") = iUserInfo
End If
End Sub 可以看出,论坛在对用户的cookie进行校验的时候,其中的密码项是用一个truepassword进行对照的,而在这个函数中,truepassword定义后赋值的时候给的是这个值:TruePassWord=Createpass,查看createpass函数,   引用  Public Function Createpass()
Dim Ran,i,LengthNum
LengthNum=16
Createpass=""
For i=1 To LengthNum
Randomize
Ran = CInt(Rnd * 2)
Randomize
If Ran = 0 Then
Ran = CInt(Rnd * 25) + 97
Createpass =Createpass& UCase(Chr(Ran))
ElseIf Ran = 1 Then
Ran = CInt(Rnd * 9)
Createpass = Createpass & Ran
ElseIf Ran = 2 Then
Ran = CInt(Rnd * 25) + 97
Createpass =Createpass& Chr(Ran)
End If
Next
End Function 这是一个系统分配随机密码的函数,通过跟踪下边这个函数:   Public Sub NewPassword()
 If UserID=0 Then Exit Sub 
 Response.Write "<iframe width=""0"" height=""0"" src=""newpass.asp"" name=""Dvnewpass""></iframe>"
 End Sub 可以得出结论:动网在用户打开页面的时候,通过cookie检查用户的信息,然后进行密码校验的时候并不是通过用户的真实password,而是通过一个truepassword进行验证,如果验证通过,则重新分配一个随机密码createpass,刷新数据库中truepassword的值为createpass,然后用户登陆信息写入服务器端session;当cookie校验不能通过的时候,显示登陆错误信息,调用登陆页面,提示用户登陆,当用户输入正确的用户名密码的时候(这次的验证在login.asp页面中的Dvbbs_ChkLogin函数中),用户正确登陆,系统仍然分配一个随机的密码储存在truepassword字段中,供下次登陆校验用。
可以看出,动网论坛在防止cookie欺骗上确实下了一番工夫,是不是这样就不能进行欺骗了呢?不是:当你要进行对动网的欺骗的时候,只要把cookie中password中的值替换成数据库中truepassword的值就可以,但要注意:从你盗得数据库到你进行欺骗的中间,你要使用的帐户不能再登陆,否则数据库中的truepassword值又会更新,那你那时候肯定是欺骗不成功的!
可以看出,动网论坛在各个地方考虑都是很周到的,虽然cookie验证的代码增加了好多,但为了安全性的提高降低了程序的效率,也是有必要的,这样一来,动网的安全性才能在磨练中不断提升!
通过这次分析,初学者应该学会对程序的跟踪和分析,其实也是每个学编程的必须掌握的知识。在碰到这类问题的时候,拿出程序的代码仔细分析,你肯定会有新的发现,可能下一个首发漏洞的发现者就是你! 
0 0
原创粉丝点击