内网信息收集

概述

首先需要对当前所处的网络环境进行判断。判断涉及三个方面:

  • 我是谁? —— 对当前机器角色的判断

​ 判断当前机器是普通的web服务器、开发测试服务器、文件服务器等。具体判断根据机器的主机名、文件、网络连接等情况综合完成。

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

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

  • 我在哪? —— 对当前机器所处区域的判断

    判断机器处于网络拓扑中的哪个区域,是在DMZ、办公区还是核心区。

收集本机信息

手动收集信息

本机信息包括操作系统、权限、内网IP地址段、杀毒软件、端口、服务、补丁更新频率、网络连接、共享、会话等。如果是域内主机,操作系统、应用软件、补丁、服务、杀毒软件一般都是批量安装的。

通过本机的相关信息,进一步了解整个域的操作系统版本、软件及补丁安装情况、用户命名方式等。

  1. 查询网络配置信息

    1
    ipconfig /all
    ipconfig /all
  2. 查询操作系统及软件信息

    查询操作系统和版本信息

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

    image-20200320170458113

    查看系统体系结构

    1
    echo %PROCESSOR_ARCHITECTURE%

    image-20200320170803258

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

    利用wmic命令,将输出结果到文本文件中

    1
    wmic product get name,version

    image-20200320171109489

    利用powershell命令,收集软件的版本信息

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

    image-20200320171356318

    查询本机服务信息

    1
    wmic service list brief

    image-20200320171545322

    查询进程列表

    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

    wmic共享列表

    查询路由表及所有可用接口的ARP(地址解析协议)缓存表

    1
    2
    route print
    arp -a

    路由表

    arp缓存表

    查询防火墙相关配置

    • 关闭防火墙(管理员权限)

      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端口的代理配置信息
    image-20200320210146225

    查询并开启远程连接服务

    • 查看远程连接端口

      在命令行环境中执行注册表查询语句

      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

Empire下主机信息收集

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

另外,situational_awareness/host/winenum模块激活包含了系统中所有有用的信息,例如目标主机事件日志、应用程序控制策略日志,包含RDP登录信息、powershell脚本运行和保存的信息等。

运行这个模块需要管理员权限。

查询当前权限

  1. 查看当前权限

    1
    whoami

    本地普通用户(commando本机的fireeye用户)

    image-20200321150415512

    本地管理员用户(win-nmcuole3s38本机的administrator用户)

    image-20200321151122737

    域内用户(test域内administrator用户)

    image-20200321150920756

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

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

  2. 获取域SID

    1
    whoami /all
    image-20200321162551515

    500 为域用户administrator的SID,前面的是test域的SID

  3. 查询指定用户的详细信息

    1
    net user xxx /domain
    image-20200321162905059

判断是否存在域

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

  1. 使用 ipconfig 命令

    1
    ipconfig /all

    查看网关IP、DNSIP、域名、本机是否和DNS服务器处于同一网段

    image-20200321163459590

    用 nslookup 解析域名的IP地址。用解析得到的IP地址进行对比,判断域控制器和DNS服务器是否在同一台机器上。

    image-20200321163655780

  2. 查看系统详细信息

    image-20200321163851946

    ”域“即域名test.com、“登录服务器”为域控制器,如果“域”为“WORKGROUP”,表示当前机器不在域内。

  3. 查询当前登录域及登录用户信息

    1
    net config workstation
    image-20200321164309260
  4. 判断主域(域服务器通常会同时作为时间服务器使用)

    1
    net time /domain

    image-20200321164434781

    执行上面的命令,通常有3中情况:

    • 存在域,当前用户不是域用户

      发生系统错误 5。拒绝访问。

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

      image-20200321164840696

    • 不存在域

      image-20200321164821261

探测域内存活主机

利用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="

icmp探测

vbs脚本

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
strSubNet = "192.168.1."
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = Objfso.CreateTextFile("C:\Windows\Temp\Result.txt")
For i = 1 To 254
strComputer = strSubNet & i
blnResult = Ping(strComputer)
If blnResult = True Then
objTS.WriteLine strComputer & " is alived ! :)"
End If
Next

objTS.close
WScript.Echo "All Ping Scan , All Done ! :)"
Function Ping(strComputer)
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_PingStatus Where Address='" & strComputer & "'")
For Each objItem In colItems
Select case objItem.StatusCode
Case 0
Ping = True
Case Else
Ping = False
End select
Exit For
Next
End Function
image-20200322181818410

通过ARP扫描探测内网

  1. arp-scan工具

    直接把arp.exe上传到目标机器中运行,可以自定义掩码、指定扫描范围等

    1
    arp.exe -t 192.168.1.0/20
  2. Empire中的arpscan模块

    该模块用于在局域网内发送ARP数据包、收集活跃主机的IP地址和MAC地址信息。

    1
    useodule situational_awareness/network/arpscan
  3. 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
  4. 通过常规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信息
  • 端口上运行的服务
  • 常见应用的默认端口

利用telnet命令进行扫描