内网信息收集
概述
首先需要对当前所处的网络环境进行判断。判断涉及三个方面:
- 我是谁? —— 对当前机器角色的判断
判断当前机器是普通的web服务器、开发测试服务器、文件服务器等。具体判断根据机器的主机名、文件、网络连接等情况综合完成。
这是哪? —— 对当前机器所处的网络环境的拓扑结构进行分析和判断
对所处的内网进行全面的数据收集和分析整理,绘制出大致的内网整体拓扑结构图。
我在哪? —— 对当前机器所处区域的判断
判断机器处于网络拓扑中的哪个区域,是在DMZ、办公区还是核心区。
收集本机信息
手动收集信息
本机信息包括操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁更新频率、网络连接、共享、会话等。如果是域内主机,操作系统、应用软件、补丁、服务、杀毒软件一般都是批量安装的。
通过本机的相关信息,进一步了解整个域的操作系统版本、软件及补丁安装情况、用户命名方式等。
查询网络配置信息
1
ipconfig /all
查询操作系统及软件信息
查询操作系统和版本信息
1
2
3systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
中文版
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"查看系统体系结构
1
echo %PROCESSOR_ARCHITECTURE%
查看安装的软件及版本、路径等
利用
wmic
命令,将输出结果到文本文件中1
wmic product get name,version
利用powershell命令,收集软件的版本信息
1
powershell.exe "Get-WmiObject -class Win32_Product |Select-Object -Property name,version"
查询本机服务信息
1
wmic service list brief
查询进程列表
1
tasklist
查看进程信息
查看启动程序信息
1
wmic startup get command,caption
查看计划任务
1
schtasks /query /fo LIST /v
查看主机开机时间
1
net statistics workstation
查询用户列表(可以找出内网机器的命令规则)
1
net user
获取本地管理员信息(通常包含域用户)
1
net localgroup administrators
查询当前在线用户
1
query user || qwinsta
列出或断开本地计算机与所连接的客户端之间的会话
1
net session
查询端口列表
1
netstat -ano
查看补丁列表
1
systeminfo
需要注意系统的版本、位数、域、补丁信息及更新频率等。域内主机的补丁通常是批量安装的通过查看本机的补丁列表,就可以找到为打补丁的漏洞。
使用wmic命令查看安装在系统中的补丁
1
wmic qfe get Caption,Description,HotFixID,InstalledOn
查看本机共享列表和可访问的域共享列表
1
net share
1
wmic share get name,path,status
查询路由表及所有可用接口的ARP(地址解析协议)缓存表
1
2route print
arp -a查询防火墙相关配置
关闭防火墙(管理员权限)
1
netsh firewall set opmode disable # win server 2003及之前的版本
1
netsh advfirewall set allprofiles state off # win server 2003之后版本
查看防火墙配置
1
netsh firewall show config
修改防火墙配置
1
2
3
4
5
6
7
8# win server 2003及之前版本,允许指定程序全部连接
netsh firewall add allowedprogram c:\nc.exe "allow nc" enable
# win server 2003之后版本
netsh advfirewall firewall add rule name="pass nc" dir in action=allow program="c:\nc.exe" # 允许指定程序进入
netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="c:\nc.exe" # 允许指定程序退出
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow # 允许3389端口放行自定义防火墙日志的存储位置
1
netsh advfirewall set currentprofile logging filename "c:\windows\temp\fw.log"
查看代理配置情况
1
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" # 可以看到服务器127.0.0.1的1080端口的代理配置信息
查询并开启远程连接服务
查看远程连接端口
在命令行环境中执行注册表查询语句
1
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
连接的端口为0xd3d,转换后为3389
在Windows server 2003中开启3389
1
wmic path win32_terminalservicesetting where (_CLASS !="") callsetallowtsconnections 1
在Windows server 2008和Windows server 2012中开启3389
1
wmic/namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (_CLASS !="") call setallowsconnections 1
1
wmic/namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1
1
reg add "HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
自动收集信息
为了简化操作,可以创建一个脚本,在目标机器上述完成流程、服务、用户账号、用户组、网络接口、硬盘信息、网络共享信息、操作系统、安装补丁、安装软件、启动时运行的程序、时区等信息的查询工作。
推荐使用利用WMIC
收集目标信息。在默认情况下,任何版本的Windows XP的低权限用户不能访问wmic,Windows 7以上版本的低权限用户允许访问wmic并执行相关查询操作。
http://www.fuzzysecurity.com/scripts/files/wmic_info.rar 执行该脚本后会将所有结果写入一个 html 文件。
![image-20200321150034222](/post/12754/images\image-20200321150034222.png)
Empire下主机信息收集
Empire提供了用于收集主机信息的模块。输入命令usemodule situational_awareness/host/winenum
,即可查看本机用户、域成员、密码设置时间、剪切板内容、系统基本信息、网络适配器信息、共享信息等。
另外,situational_awareness/host/winenum
模块激活包含了系统中所有有用的信息,例如目标主机事件日志、应用程序控制策略日志,包含RDP登录信息、powershell脚本运行和保存的信息等。
运行这个模块需要管理员权限。
查询当前权限
查看当前权限
1
whoami
本地普通用户(commando本机的fireeye用户)
本地管理员用户(win-nmcuole3s38本机的administrator用户)
域内用户(test域内administrator用户)
如果当前内网中存在域,那么本地普通用户只能查询本机相关信息,不能查询域内信息,而本地管理员用户和域内用户可以查询域内信息。其原理是:域内的所有查询都是通过域控制器实现的(基于LDAP协议),而这个查询需要经过权限认证,所以只有域用户才有这个权限;当域用户执行查询命令时,会自动使用Kerberos协议进行认证,无需额外输入账号密码。
本地管理员administrator权限可以直接提升为Ntauthority或system权限,因此在域中,除普通用户外,所以的机器都有一个机器用户(用户名是机器名+$)。在本质上,机器的system用户对应的就是域里面的机器用户。所以使用system权限可运行域内的查询命令。
获取域SID
1
whoami /all
500 为域用户administrator的SID,前面的是test域的SID
查询指定用户的详细信息
1
net user xxx /domain
判断是否存在域
获得了本机的相关信息后,就要判断当前内网中是否存在域,如果存在,就要判断所控主机是否在域内。
使用 ipconfig 命令
1
ipconfig /all
查看网关IP、DNSIP、域名、本机是否和DNS服务器处于同一网段
用 nslookup 解析域名的IP地址。用解析得到的IP地址进行对比,判断域控制器和DNS服务器是否在同一台机器上。
查看系统详细信息
”域“即域名test.com、“登录服务器”为域控制器,如果“域”为“WORKGROUP”,表示当前机器不在域内。
查询当前登录域及登录用户信息
1
net config workstation
判断主域(域服务器通常会同时作为时间服务器使用)
1
net time /domain
执行上面的命令,通常有3中情况:
存在域,当前用户不是域用户
发生系统错误 5。拒绝访问。
存在域,当前用户是域用户
不存在域
探测域内存活主机
利用NetBIOS快速探测内网
NetBIOS是局域网程序使用的一种应用程序编程接口,为程序提供了请求低级服务的统一的命令集,为局域网提供了网络及其他特殊功能。NetBIOS也是计算机的命名标识,主要用于局域网中计算机的互访。NetBIOS的工作流程就是正常的机器名解析查询应答过程,因此推荐使用。
nbtscan是一个命令行工具,用于扫描本地或远程TCP/IP网络上的开放NetBIOS名称服务器。有Windows和Linux两个版本,体积很小,不需要安装特殊的库或DLL就能使用。
将其上传的目标上,然后直接输入IP地址范围并运行。输入nbtscan.exe
查看帮助文档。
利用ICMP协议快速探测内网
一次对内网中的每个IP地址执行ping命令,可以快速找到内网存活主机。在渗透测试中可以探测整个C段。
1 | for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.1.%I | findstr "TTL=" |
vbs脚本
1 | strSubNet = "192.168.1." |
![image-20200322181818410](/post/12754/images\image-20200322181818410.png)
通过ARP扫描探测内网
arp-scan工具
直接把arp.exe上传到目标机器中运行,可以自定义掩码、指定扫描范围等
1
arp.exe -t 192.168.1.0/20
Empire中的arpscan模块
该模块用于在局域网内发送ARP数据包、收集活跃主机的IP地址和MAC地址信息。
1
useodule situational_awareness/network/arpscan
Nishang中的Invoke-ARPScan.ps1脚本
将脚本上传到目标机器上运行,也可以直接远程加载脚本、自定义掩码和扫描范围
1
powershell.exe -exec bypass -Command "& {Import-Module C:\windows\temp\Invoke-ARPScan.ps1; Invoke-ARPScan -CIDR 192.168.1.0/20}" >> C:\windows\temp\log.txt
通过常规TCP/UDP端口扫描探测内网
ScanLine是一款经典的端口扫描工具,可以在所有版本的Windows操作系统中使用,体积小,仅使用单个文件,同时支持TCP/UDP端口扫描
1
scanline -h -t 22,80-89,110,389,445,3389,1099,1433,2049,6379,7001,8080,1521,3306,5432 -u 53,161,137,139 -O c:\windows\temp\log.txt -p 192.168.1.1-254 /b
扫描域内端口
注意以下几点:
- 端口的Banner信息
- 端口上运行的服务
- 常见应用的默认端口