☆ SYSKEY机制的一个完整验证集及讨论 https://scz.617.cn/windows/200401131559.txt 参看flashsky、Nicola Cuomo的文章([11]、[13])。 -------------------------------------------------------------------------- Class A : C5 1F 3D DE : ("c51f3dde") : (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\JD) Class B : 3F 88 75 0D : ("3f88750d") : (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Skew1) Class C : EE F2 5F C1 : ("eef25fc1") : (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\GBG) Class D : 31 AF 75 4B : ("31af754b") : (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Data) Class : C5 1F 3D DE 3F 88 75 0D EE F2 5F C1 31 AF 75 4B MIX : 08 0A 03 07 02 01 09 0F 00 05 0D 04 0B 06 0C 0E BOOTKEY/SYSKEY : EE 88 3F 3D C1 F2 AF DE C5 75 1F 31 75 5F 4B 0D -------------------------------------------------------------------------- ACCOUNT_F_VALUE : 02 00 01 00 00 00 00 00 C0 4D 55 34 10 BC C2 01 : D8 00 00 00 00 00 00 00 00 80 A6 0A FF DE FF FF : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 : 00 CC 1D CF FB FF FF FF 00 CC 1D CF FB FF FF FF : 00 00 00 00 00 00 00 00 EC 03 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 01 00 00 00 03 00 00 00 : 01 00 00 00 01 00 01 00 01 00 00 00 38 00 00 00 : 0E 13 6D 8F 01 17 04 DE D8 71 1A 32 43 92 8A A0 : 54 30 21 81 56 76 7B D5 D6 EC 9D AD FE 7A 8E 16 : 50 7D 76 53 CC A3 54 CD 33 4D 67 BD C3 F0 C6 52 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 : (HKEY_LOCAL_MACHINE\SECURITY\SAM\Domains\Account\F) ACCOUNT_F_VALUE_A : 0E 13 6D 8F 01 17 04 DE D8 71 1A 32 43 92 8A A0 MagicStringA : 21 40 23 24 25 5E 26 2A 28 29 71 77 65 72 74 79 : 55 49 4F 50 41 7A 78 63 76 62 6E 6D 51 51 51 51 : 51 51 51 51 51 51 51 51 29 28 2A 40 26 25 00 : ("!@#$%^&*()qwertyUIOPAzxcvbnmQQQQQQQQQQQQ)(*@&%") BOOTKEY/SYSKEY : EE 88 3F 3D C1 F2 AF DE C5 75 1F 31 75 5F 4B 0D MagicStringB : 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 : 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31 : 32 33 34 35 36 37 38 39 00 : ("0123456789012345678901234567890123456789") MD5/RC4KEY : 83 B3 19 2F 34 41 FB 10 2D CB 8C AC 98 FE DD 8E ACCOUNT_F_VALUE_B/RC4 IN : 54 30 21 81 56 76 7B D5 D6 EC 9D AD FE 7A 8E 16 : 50 7D 76 53 CC A3 54 CD 33 4D 67 BD C3 F0 C6 52 RC4 : CA 7C 56 6F 36 9F 17 64 CC 30 77 3E 00 A5 67 60 : 7E DC AC CD F7 D5 01 72 E8 63 4A 26 58 28 D5 BF SampSecretSessionKey : CA 7C 56 6F 36 9F 17 64 CC 30 77 3E 00 A5 67 60 -------------------------------------------------------------------------- SampSecretSessionKey : CA 7C 56 6F 36 9F 17 64 CC 30 77 3E 00 A5 67 60 RID : E8 03 00 00 (1000) SampMagicConstantStringA : 4C 4D 50 41 53 53 57 4F 52 44 00 ("LMPASSWORD") MD5/RC4KEY : 30 58 58 7D 01 14 0F FA BE 2C E3 99 8C F3 0D 10 Encrypted LM Hash/RC4 IN : D3 B8 C2 84 97 05 50 83 B0 55 46 A3 C9 F4 5B C6 RC4/DES Encrypted Message : ED 0E B6 92 76 8E 43 25 B1 52 28 32 18 05 43 32 E8030000E8030000E8030000E803 (Derived From RID) | str_to_key() | V E800C0000E400C00007400600006A006 (DESKEY Derived From RID) DESKEY1 Derived From RID : E8 00 C0 00 0E 40 0C 00 DESKEY2 Derived From RID : 00 74 00 60 00 06 A0 06 DES/LM Hash : 42 2B 15 72 AE 4B 9C DE E2 C2 FA D4 5B 16 A0 FF -------------------------------------------------------------------------- SampSecretSessionKey : CA 7C 56 6F 36 9F 17 64 CC 30 77 3E 00 A5 67 60 RID : E8 03 00 00 (1000) SampMagicConstantStringB : 4E 54 50 41 53 53 57 4F 52 44 00 ("NTPASSWORD") MD5/RC4KEY : 96 BE 87 40 08 8B 57 18 35 A0 E9 6E 50 95 C9 E7 Encrypted NTLM Hash/RC4 IN : 93 75 EE 45 2C 8D E1 FD D3 50 F6 62 FC 5B 3C 5E RC4/DES Encrypted Message : D3 38 99 8E 85 03 DA 20 A6 D5 09 1C 48 2A 81 4A E8030000E8030000E8030000E803 (Derived From RID) | str_to_key() | V E800C0000E400C00007400600006A006 (DESKEY Derived From RID) DESKEY1 Derived From RID : E8 00 C0 00 0E 40 0C 00 DESKEY2 Derived From RID : 00 74 00 60 00 06 A0 06 DES/NTLM Hash : 6E AB 0E A8 EB 87 C8 E9 38 22 D6 D9 E5 59 87 81 -------------------------------------------------------------------------- 提供这个完整验证集的目的在于让C程序员最快速度地搞清楚SYSKEY机制中的加密过 程。我是以学生的姿态学习[11]、[13]的,未做任何Hacking,荣誉归于二文之作者。 需要批评的是flashsky的自然语言描述太不精确,精确的C语言描述又因未使用标准 加密算法API接口而显得不够清晰,以致我被迫动用SoftICE远程调试getlmhashdll, 仅仅为了确认一些数据的16进制转储形式(这可能是最精确的演示方式)。瑕不掩瑜, [11]是国内2003年不可多得的自Hacking高水平文章,此番学习收获颇大,谢谢作者 的文档共享。 我折腾这个的起因有点怪。写扫描插件时,涉及到操作远程注册表。一般套路是先用 Win32 API写一个应用程序,再用Ethereal抓包分析。既然要写应用程序,当然想写 一个有点实际意义的。tombkeeper曾告诉我微软Support Tools中的nltest可以远程 读取SAM数据,他还简单分析了一下,nltest并不像pwdump3那样利用远程线程注入以 及服务,而是直接操作远程注册表了。 > nltest /server:192.168.7.152 /user:test User: test Rid: 0x3eb LmOwfPassword: bfac2f26 7a122258 a1ca9c44 fb0029fb NtOwfPassword: 2dc1a2c8 2d82eb15 2511678a 9b5522ca 上述LM Hash、NTLM Hash是错误的,因为nltest不能对付SYSKEY机制,对于早期的NT 可以用nltest获取正确的LM Hash、NTLM Hash。nltest的算法就是pwdump.c的算法, 换句话说,nltest有点像远程版的pwdump.c。 我的想法就是写一个samdump.c,类似nltest的做法,只不过能对付SYSKEY机制,按 LC4(.lc文件)格式输出。 pwdump2在终端服务环境中不可用,pwdump3利用服务倒是继续可用,samdump.c并没 有太多必要存在,我只不过是练练手。由于LM Hash、NTLM Hash从未直接出现在网络 通信中,samdump.c不采用任何加密传输处理。如果目标的远程注册表服务未启动, 可用sc修理它: > sc \\192.168.7.152 config remoteregistry start= demand > sc \\192.168.7.152 start remoteregistry > samdump -t 192.168.7.152 > sc \\192.168.7.152 stop remoteregistry > sc \\192.168.7.152 config remoteregistry start= disabled 本来samdump.c可以自己完成sc的上述功能,不过实在没兴趣堆积木了,正经活是抓 包分析网络通信。 ☆ 参考资源 [11] SAM的散列存储加密解密算法以及SYSKEY的计算 - flashsky[2003-06-04] http://www.xfocus.net/releases/200306/a550.html [13] Windows 2k/NT/XP's syskey encryption - Nicola Cuomo http://studenti.unina.it/~ncuomo/syskey/syskey.txt