|
|
4#

楼主 |
发表于 2012-7-14 17:05:17
|
只看该作者
哪位大侠能出手patch一下win7/win8的msv1_0.dll?
转帖一个:
Win8弱爆了,这个还能用。
Windows密码验证之MsvpPasswordValidateFebruary 24, 2011 colinxu Leave a comment Go to comments
Title: Windows密码验证之MsvpPasswordValidate
Author: Colin.Xu@gmail.com
Date: 2011/02/24
在codeproject.com闲逛,看到捷克人fhrdina写的一篇有趣的文章。
http://www.codeproject.com/KB/security/Bootkit.aspx
在windows用户登陆界面输入密码后,Local Security Authentication Server(lsass.exe)会做用户密码的校验,模块msv1_0.dll中的msv1_0!MsvpPasswordValidate会做密码的hash比较。所以最简单有效的办法是,只要brute force该函数比较成功,则登陆时就会以为密码校验成功。
这个方法在06年就被人发现了,http://www.rootkit.com/blog.php?newsid=549. fhrdian做了一个可启动的iso,通过在load msv1_0.dll时hook上去,然后patch了它的IAT,把用于hash值比较的函数RtlCompareMemory指向了自己定义的函数,从而使得密码校验永远能够成功。
看完文章后我试了一下win7,发现该方法仍然有效。
来看一下函数原型:
msv1_0!MsvpPasswordValidate (unsigned char, _NETLOGON_LOGON_INFO_CLASS, void *, struct _USER_INTERNAL1_INFORMATION *, unsigned long *, struct _USER_SESSION_KEY *, struct _CLEAR_BLOCK *)
关键部分:
77c798a4 ff153012c777 call dword ptr [msv1_0!_imp__RtlCompareMemory (77c71230)]
77c798aa 83f810 cmp eax,10h
77c798ad 7511 jne msv1_0!MsvpPasswordValidate+0×94 (77c798c0)
;这里,发现hash正确的话,就直接返回了,eax=1,表示校验成功。
;如果不正确,跳到msv1_0!MsvpPasswordValidate+0×94去做其他事情。
77c798af b001 mov al,1
77c798b1 8b4dfc mov ecx,dword ptr [ebp-4]
77c798b4 5f pop edi
77c798b5 5e pop esi
77c798b6 5b pop ebx
77c798b7 e80182ffff call msv1_0!__security_check_cookie (77c71abd)
77c798bc c9 leave
77c798bd c21c00 ret 1Ch
我试着patch了一下msv1_0.dll,然后替换上去,输入任何密码都能进系统了。不过不清楚这样做了之后,user security token以及EFS加密后的数据是否能够访问。如果用户密码的校验最后都在这里完成的话,似乎也太弱了一些。 |
评分
-
查看全部评分
|