首页
社区
课程
招聘
[原创]输出挑战响应计算值
发表于: 2025-5-31 22:30 102

[原创]输出挑战响应计算值

2025-5-31 22:30
102

XPSP3文件共享访问使用NTLMSSP的挑战响应机制。


本机客户端访问对方文件,对方返回服务端挑战。


客户端产生挑战以及用对方挑战计算响应。


在如下地方:

xpsp3 msv1_0.dll [5.1.2600.5512]


msv1_0!MspLm20GetChallengeResponse+0x5aa:

77c48e35 6a08            push    8

77c48e37 8d45ec          lea     eax,[ebp-14h]

77c48e3a 50              push    eax // ebp-14h = clicha[8] 自己的挑战

@@77c48e3b e85794ffff      call    msv1_0!SspGenerateRandomBits (77c42297) //036产生随机数

^^sysfun036(clicha,8)

77c48e40 8d4318          lea     eax,[ebx+18h]

77c48e43 8b08            mov     ecx,dword ptr [eax]

77c48e45 894de4          mov     dword ptr [ebp-1Ch],ecx

77c48e48 8b4804          mov     ecx,dword ptr [eax+4]

77c48e4b 894de8          mov     dword ptr [ebp-18h],ecx

77c48e4e 50              push    eax // [ebx+18h] 计算后输出

77c48e4f 8d4dec          lea     ecx,[ebp-14h]

77c48e52 51              push    ecx // ebp-14h = clicha[8] 自己的挑战

77c48e53 50              push    eax // ebx+18h = srvcha[8] 对方的挑战

@@77c48e54 e853fdffff      call    msv1_0!MsvpCalculateNtlm2Challenge (77c48bac) //md5

^^md5(srvcha,clicha,srvchaencry)

77c48e59 8d9578fdffff    lea     edx,[ebp-288h]

77c48e5f 52              push    edx // 计算后客户响应18h

77c48e60 8d4610          lea     eax,[esi+10h]

77c48e63 8d4b18          lea     ecx,[ebx+18h]

77c48e66 50              push    eax // esi+10h 可能是密码散列之类18h

77c48e67 51              push    ecx // ebx+18h //md5后的对方挑战8h

@@77c48e68 e8cbfdffff      call    msv1_0!SystemFunction009 (77c48c38) //009计算响应 des??

^^sysfun009(srvchaen,hashxx,resp)

77c48e6d 8bf8            mov     edi,eax

77c48e6f 85ff            test    edi,edi


挑战都是用036系统函数计算出来的。


响应是用009系统函数计算出来。


其他已知的006系统函数计算lm,007系统函数计算ntlm


用调试脚本也可以输出这些挑战响应,但是格式不太好控制。


用调试脚本如下:

bp 77c48e40 ".echo ==clicha==;db @ebp-14 l8;g"

bp 77c48e54 ".echo ==md5 a1_3==;dd @esp l3;.echo =srvcha=;db poi(@esp) l8;.echo =clicha=;db poi(@esp+4) l8;g"

bp 77c48e59 ".echo =after md5=;db @ebx+18 l8;g"

bp 77c48e68 ".echo =009 des a1_3=;dd @esp l3;.echo =a1=;db @ebx+18 l8;.echo =a2=;db @esi+10 l18;g"

bp 77c48e6d ".echo =after 009 a3=resp=;db ebp-288 l18;g"


测试输出如下:

==clicha==

00c9f410  15 bf b1 e9 ef 67 d7 40


==md5 a1_3==

00c9f0c0  00c9f490 00c9f410 00c9f490

=srvcha=

00c9f490  e7 58 2f 13 e9 00 8b ce

=clicha=

00c9f410  15 bf b1 e9 ef 67 d7 40

=after md5=

00c9f490  99 82 5d 8f 48 b9 a0 23


=009 des a1_3=

00c9f0c0  00c9f490 000c2438 00c9f19c

=a1=

00c9f490  99 82 5d 8f 48 b9 a0 23

=a2=

000c2438  0b ed 68 39 1b 48 18 b8 33 27 23 40 ff 7f 9a 70 72 f2 f9 cb 35 32 47 e7

=after 009 a3=resp=

00c9f19c  23 b4 26 7d 9a 82 0e c9 c9 41 9f bb b8 b0 be 4a 37 5b b2 21 e8 b6 26 4a


以上输出不太好用中文,不太方便认识。。。


所以用hook方法做一个简易输出测试dll,注入调试输出即可。


/*

77c48e54 e853fdffff      call    msv1_0!MsvpCalculateNtlm2Challenge (77c48bac) //md5

*/

int WINAPI hv_hrecvchal(LPBYTE srvcha8, LPBYTE clicha8, LPBYTE srvcha8encry)

{

    showinfo("[*] ====hv_hrecvchal====\n");


    int r;


    showinfo("[*] 接收的服务端挑战:");

    showhex((unsigned char*)srvcha8, 8);

    showinfo("[*] 产生的客户端挑战:");

    showhex((unsigned char*)clicha8, 8);

    r = ((Phv_hrecvchal)sets[Idxhv_hrecvchal].oldfun)(srvcha8, clicha8, srvcha8encry);

    showinfo("[*] 加密后的服务端挑战:");

    showhex((unsigned char*)srvcha8encry, 8);


    return r;

}


/*

77c48e68 e8cbfdffff      call    msv1_0!SystemFunction009 (77c48c38)

*/

int WINAPI hv_hsendauth(void* srvcha8encry, void* hashxx18h, void* cliresp18h)

{

    showinfo("[*] ====hv_hsendauth====\n");


    int r;

    showinfo("[*] 加密后的服务端挑战:");

    showhex((unsigned char*)srvcha8encry, 8);

    showinfo("[*] 可能是密码散列之类:");

    showhex((unsigned char*)hashxx18h, 0x18);

    r = ((Phv_hsendauth)sets[Idxhv_hsendauth].oldfun)(srvcha8encry, hashxx18h, cliresp18h);

    showinfo("[*] 计算后的客户端响应:");

    showhex((unsigned char*)cliresp18h, 0x18);


    return r;

}


这样调试输出就直观多了。


[*] ====hv_hrecvchal====

[*] 接收的服务端挑战:e1e8b184de2edd87

[*] 产生的客户端挑战:20ec0adb729ff040

[*] 加密后的服务端挑战:3e53800867fb71b8

[*] ====hv_hsendauth====

[*] 加密后的服务端挑战:3e53800867fb71b8

[*] 可能是密码散列之类:0bed68391b4818b833272340ff7f9a7072f2f9cb353247e7

[*] 计算后的客户端响应:c7963d4f3f488f0b0f287f6071236054e882cea03c8431ff

[*] ====hv_hrecvchal====

[*] 接收的服务端挑战:03b9d6f2bfe79dbb

[*] 产生的客户端挑战:b78102557f4255ec

[*] 加密后的服务端挑战:12e72a0d58af9fb5

[*] ====hv_hsendauth====

[*] 加密后的服务端挑战:12e72a0d58af9fb5

[*] 可能是密码散列之类:0bed68391b4818b833272340ff7f9a7072f2f9cb353247e7

[*] 计算后的客户端响应:5841f3a6bafe05595e71acc8fdfc6b560de670c110f4112d




[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2025-6-1 10:36 被HelloCrack编辑 ,原因: 【因为要注入所以被微软杀毒给删了,加密了打包,密码123456】
上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回