内网信息收集
内网信息收集
概述
首先需要对当前所处的网络环境进行判断。判断涉及三个方面:
- 我是谁? —— 对当前机器角色的判断
 判断当前机器是普通的web服务器、开发测试服务器、文件服务器等。具体判断根据机器的主机名、文件、网络连接等情况综合完成。
- 这是哪? —— 对当前机器所处的网络环境的拓扑结构进行分析和判断 - 对所处的内网进行全面的数据收集和分析整理,绘制出大致的内网整体拓扑结构图。 
- 我在哪? —— 对当前机器所处区域的判断 - 判断机器处于网络拓扑中的哪个区域,是在DMZ、办公区还是核心区。 
收集本机信息
手动收集信息
本机信息包括操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁更新频率、网络连接、共享、会话等。如果是域内主机,操作系统、应用软件、补丁、服务、杀毒软件一般都是批量安装的。
通过本机的相关信息,进一步了解整个域的操作系统版本、软件及补丁安装情况、用户命名方式等。
- 查询网络配置信息 - 1 - ipconfig /all   
- 查询操作系统及软件信息 - 查询操作系统和版本信息 - 1 
 2
 3- systeminfo | 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 
 2- route 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 文件。
 
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." | 
 
通过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信息
- 端口上运行的服务
- 常见应用的默认端口