目录
Part1 内网域渗透基础概念
1 什么是域
1. 权限管理比较集中,管理成本降低
2. 保密性加强
3. 安全性加强
4. 提高了便捷性
2 域渗透思路
Part2 域管理员定位基础
Part3 域管理员手动定位
Part4 自动化收集时常用的域管理员定位工具
SPN扫描
psloggedon.exe
PVEFindADUser.exe
netview.exe
Name的NSE脚本
PowerView.PS1脚本
将网络中多台计算机逻辑上组织到一起,进行集中管理,这种区别于工作组的逻辑环境叫做域,域是组织与存储资源的核心管理单元,在域中,至少有一台域控制器,域控制器中保存着整个域的用户帐号和安全数据库。
那么域网络结构有什么优点呢?域的优点主要有以下几个方面:
域环境中,所有的网络资源,包括用户均是在域控制器上维护的,便于集中管理,所有用户只要登入到域,均能在域内进行身份验证,管理人员可以较好的管理计算机资源,管理网络的成本大大降低;同时在域环境中也可以防止企业员工在域成员主机上违规安装软件,增强客户端安全性,减少客户端故障,降低维护成本。
有利于企业的一些保密资料的管理,可以单独对资源进行权限控制,允许或拒绝特定的域账户对资源的请求。
使用漫游账户和文件夹重定向,个人账户的工作文件及数据等可以存储在服务器上,进行统一备份及管理,使用户的数据更加安全有保障;同时域控制器能够分发应用程序、系统补丁,用户可以选择安装,也可以由系统管理员指派自动安装,数据及系统安全性大大提高。
可由管理员指派登陆脚本映射,用户登录后就可以像使用本地盘符一样,使用网络上的资源,且不需要再次输入密码。
基于以上原因,很多企业的内网均会采用域环境,所以作为一名合格的渗透测试人员,域渗透的常规思路和技巧要熟练掌握。
域渗透的思路就是:通过域成员主机,定位出域控制器IP及域管理员账号,利用域成员主机作为跳板,扩大渗透范围,利用域管理员可以登陆域中任何成员主机的特性,定位出域管理员登陆过的主机IP,设法从域成员主机内存中dump出域管理员密码,进而拿下域控制器、渗透整个内网。
而其中收集域以及域内用户信息主要是包括以下方面
- 收集域内域控制器信息
- 收集域控上域用户登录日志信息
- 收集域内所有用户名以及全名、备注等信息
- 收集域内工作组信息
- 收集域管理员帐号信息
- 收集域内网段划分信息
- 收集域内组织单位信息
所以今天我们就来详细讲一下如何完成域管理员的信息收集及定位,讲一些在信息收集中,定位域管理员的小知识点。
在内网中,通常会部署大量的网络安全系统和设备,例如IDS、IPS、日志审计、安全网关、反病毒软件等。在域网络攻击测试中,获取域内的一个支点后,需要获取域管理员权限。
在一个域中,当计算机加入域后,会默认给域管理员组赋予本地系统管理员权限。也就是说,当计算机被添加到域中,成为域的成员主机后,系统会自动将域管理员组添加到本地系统管理员组中因此域管理员组的成员均可访问本地计算机,且具备完全控制权限。
定位域内管理员的常规渠道,一是日志,二是会话。日志是指本地机器的管理员日志,可以使用脚本或Wevtutil工具导出并查看。会话是指域内每台机器的登录会话,可以使用netsess.exe或 PowerView 等工具查询(可以名查询,不需要权限)。
而通过在域中任意机器上执行以下命令,可以手动逐步定位域管理员。
net view /domain 查看当前域名
net view /domain:域名 查看域内部所有计算机名
net group /domain 查看域内部所有用户组列表
net group "domain computers" /domain 查看所有域成员计算机列表
net accounts /domain 查看域密码信息
nltest /domian_trusts 获取域信任信息
nltest /DCLIST:域名 查看域控制器机器名
net time /domain 查看当前时间,因为时间服务器也是主域服务器,可以看到域服务器的机器名
net group "Domain Controllers" /domain 查看域控制器组,因为可能有不止一台域控,有主备之分
net user /domain 查询域内用户,会看到熟悉的krbtgt用户
wmic useraccount get /all 获取域内用户详细信息
dsquery user 查看域内存在的用户
net localgroup administrators 查看本地管理员用户组
net group "domain admins" /domain 查询域管理员用户
不同于常规的tcp/udp端口扫描,由于spn本质就是正常的Kerberos请求,所以扫描是非常隐蔽,日前针对此类扫描的检测暂时也比较少。
大部分win系统默认已自带spn探测工具即:setspn.exe
此操作无需管理权限
域内机器执行
setspn -T 域名 -Q */*
即可完整查出当前域内所有spn。
使用psloggedonexe,可以查看本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。如果指定的是用户名而不是计算机名,psloggedon.exe会搜索网上邻居中的计算机,并显示该用户当前是否已经登录。其原理是通过检查注册表HKEY_USERS 项的key值来查询谁登录过(需要调用NetSessionEnum API),但某些功能需要管理员权限才能使用。
常用参数有:
-:显示支持的选项和用于输出的单位
-1:仅显示本地登录不显示本地和网络资源登录
-x:不显示登录时间
\computer:指定要列出登录信息的计算机名称
username:指定用户名,在网络中搜索该用户登录的计算机
工具下载地址:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/psloggedon
PVEFindADUserexe可用于查找活动目录用户登录的位置、枚举域用户,以及查找在特定计算机上登录的用户,包括本地用户、通过RDP登录的用户、用于运行服务和计划任务的用户。运行该工具的计算机需要配置NETFramework2.0环境,并且需要具有管理员权限。
常用参数有:
-h:显示帮助信息
-u:检查程序是否有新版本
-current[“username”]:如果仅指定了-current参数,将获取目标计算机上当前登录的所有用户。如果指定了用户名(Domain\Username),则显示该用户登录的计算机
-last[“username”]:如果仅指定了-last参数,将获取目标计算机的最后一个登录用户。如果指定了用户名(Domain\Username),则显示此用户上次登录的计算机。根据网络的安全策略,可能会隐藏最后一个登录用户的用户名,此时本工具无法得到该用户名
-noping:阻止工具在尝试获取用户登录信息之前对目标计算机执行ping命令
-target:可选参数,用于指定要查询的主机。如果未指定此参数,将查询当前域中的所有主机。如果指定了此参数,则后跟一个有逗号分隔的主机名列表
工具下载地址:
https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
netview.exe 是一个枚举工具,使用WinAPI枚举系统、利用NetSessionEnum 找寻登录会话利用NetShareEnum 找寻共享,利用NerWkstaUserEnum 枚举登录的用户。同时,netview.exe 能够查询共享入口和有价值的用户。绝大部分功能不需要管理员权限。
常用参数:
-f filename.txt:指定要提取主机名列表的文件
-e filename.txt:指定要排除的主机名的文件
-o filename.txt:将所有输出重定向到指定文件
-d domain:指定要提取主机列表的域。如果没有指定,则从当前域中提取
-g group:指定搜索的组名。如果没有指定,则在Domain Admins组中搜索
-c:对已找到的共享目录/文件的访问权限进行检查
工具下载地址:
https://github.com/mubix/netview
如果存在域账户或者本地账户就可以使用Nmap的smb-enum-sessions.nes引擎获取远程机器的登录会话。
常用参数:
smb-enum-domain:对域控制器进行信息收集,可以获取主机的信息、用户、可使用密码策略的用户等
smb-enum-users:在进行域渗透测试时,如果获得了域内某台主机的权限,无法获取更多的域用户信息,就可以借助这个脚本对域控制器进行扫描
smb-enum-shares:遍历远程主机的共享目录
smb-enum-processes:对主机的系统进行遍历。通过这些信息,可以知道目标主机上正在运行哪些软件。
smb-enum-sessions:获取域内主机的用户登录会话,查看当前是否有用户登录。
smb-os-discovery:收集目标主机的操作系统、计算机名、域名域林名称、NetBIOS机器名、NetBIOS域名,工作组、系统时间等信息
工具下载地址:
htts://nmap.org/nsedoc/scripts/smb-enum-sessions.html
powerview脚本可以用来获取当前域管理员在线登录的服务器
Invoke-UserHunter:搜索本地域中域管理员当前在线的主机,并验证当前用户是否具有对这些主机的本地管理员访问权限。它可以使用 Get-NetSessions 和Get-NetLoggedon 扫描每台服务器并对扫描结果进行比较,从而找出目标用户集,并且无需管理员权限。
打开powershell,进入脚本目录,输入Import-Module .\PowerView.ps1 导入脚本
然后输入Invoke-UserHunter即可
详细使用方法如下
Import-Module为powershell导入脚本命令,这里假设我们下载的powerview.ps1脚本在C:\PowerView.ps1
命令格式:powershell.exe -exec bypass -Command "& {Import-Module C:\PowerView.ps1; powerview的命令参数}"
定位域管理员
powershell.exe -exec bypass -Command "& {Import-Module C:\PowerView.ps1; Invoke-UserHunter}"
更多PowerView命令参数
Get-NetDomain: 获取当前用户所在域的名称
Get-NetUser: 获取所有用户的详细信息
Get-NetDomainController: 获取所有域控制器的信息
Get-NetComputer: 获取域内所有机器的详细信息
Get-NetOU: 获取域中的OU信息
Get-NetGroup: 获取所有域内组和组成员信息
Get-NetFileServer: 根据SPN获取当前域使用的文件服务器信息
Get-NetShare: 获取当前域内所有网络共享信息
Get-NetSession: 获取指定服务器的会话
Get-NetRDPSession: 获取指定服务器的远程连接
Get-NetProcess: 获取远程主机的进程
Get-UserEvent: 获取指定用户的日志
Get-ADObiect: 获取活动目录的对象
Get-NetGPO: 获取域内所有的组策略对象
Get-DomainPolicy: 获取域默认策略或域控制器策略
Invoke-UserHunter: 获取域用户登录的计算机信息及该用户是否有本地管理员权限
Invoke-ProcessHunter: 通过查询域内所有的机器进程找到特定用户
Invoke-UserEvenHunter: 根据用户日志查询某域用户登录过哪些域机器。
工具下载地址:
https://github.com/PowerShellEmpirc/PowerTools/tree/master/PowerView
当然域控与域管定位方式多种多样,这里只介绍了常用的几种,而在日常内网渗透中,还是要尽量做到隐蔽,避免因为某些敏感操作导致功亏一篑。
“D&X 安全实验室”
专注渗透测试技术
全球最新网络攻击技术