内网渗透之信息收集

学习学习

Posted by lll-yz on May 13, 2021

本文来自《内网安全攻防》

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

内网信息收集概述

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

  • 我是谁?——对当前机器角色的判断。
  • 这是哪?——对当前机器所处网络环境的拓扑结构进行分析和判断。
  • 我在哪?——对当前机器所处区域的判断。

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

对当前机器所处网络环境的拓扑结构进行分析和判断,是指对所处内网进行全面的数据收集和分析整理,绘制出大致的内网整体拓扑结构图。

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

收集本机信息

不管是在外网还是在内网中、信息收集都是重要的第一步。对于内网中的一台机器,其所处内网的结构是什么样的、其角色是什么、使用这台机器的人的角色是什么,以及这台机器上安装了什么杀毒软件、这台机器是通过什么方式上网的、这台机器是笔记本电脑还是台式机等问题,都需要通过信息收集来解答。

手动收集信息

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

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

1.查询网络配置信息

执行如下命令,获取本机网络配置信息:

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

(1)查询操作系统和版本信息:

systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

如果为中文版操作系统,则输入如下命令:

systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"

(2)查看系统体系结构:

ehco %PROCESSOR_ARCHITECTURE%

(3)查看安装的软件及版本、路径等。

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

wmic product get name,version

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

powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version"
3.查询本机服务信息

执行如下命令,查询本机服务信息:(brief 短暂的,简单的,指示,向…介绍情况,简报)

wmic service list brief
4.查询进程列表

执行如下命令,可以查看当前进程列表和进程用户,分析软件、邮件客户端、VPN和杀毒软件等进程:

tasklist

执行如下命令,查看进程信息:

wmic process list brief

常见杀毒软件的进程:

g0Xj3Q.png

5.查看启动程序信息

执行命令:(capton:给…加说明文字)

wmic startup get command,caption
6.查看计划任务

(schtasks:计划任务)

schtasks /query /fo LIST /v
7.查看主机开机时间

(net 网,statistics 统计数字,统计资料数据)

net statistics workstation
8.查询用户列表
net user

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

执行如下命令,获取本地管理员(通常包含域用户)信息:(istrators:网络管理员)

net localgroup administrators

查看当前在线用户:(console 控制台,安慰,抚慰)

query user || qwinsta
9.列出或断开本地计算机与所连接的客户端之间的会话
net session
10.查询端口列表
netstat -ano

此时可以看到当前机器和哪些主机建立了连接,以及TCP、UDP等端口的使用和监听情况。可以先通过网络连接进行初步判断(例如,在代理服务器中可能会有很多机器开放了代理端口,更新服务器可能开放了更新端口8530,DNS服务器可能开放了53端口等),再根据其他信息进行综合判断。

11.查看补丁列表

查看系统的详细信息:

systeminfo

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

使用wmic命令查看安装在系统中的补丁,具体如下:

wmic qfe get Caption,Description,HotFixID,InstalledOn

可以得到补丁的名称、描述、id、安装时间等信息。

12.查询本机共享列表

执行如下命令,查看本机共享列表和可访问的域共享列表(域共享在很多的时候是相同的):

net share

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

wmic share get name,path,status
13.查询路由表及所有可用接口的ARP缓存表
route print
arp -a
14.查询防火墙相关配置

(1)关闭防火墙

Windows Server 2003 及以下版本:

netsh firewall set opmode disable

Windows Server 2003 之后的版本:

netsh advfirewall set allprofiles state off

(2)查看防火墙配置:

netsh firewall show config

(3)修改防火墙配置

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"
  • 允许指定程序退出:
netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C: \nc.exe"
  • 允许3389端口放行:
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

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

netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"
15.查看代理配置情况

执行如下命令,可以看到服务器127.0.0.1的1080端口的代理配置信息:

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
16.查询并开启远程连接服务

(1)查看远程连接端口

在命令行环境中执行注册表查询语句,连接的端口为0xd3d,转换后为3389:

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber

(2)在Windows Server 2003 中开启3389端口:

wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1

(3)在Windows Server 2008 和 Windows Server 2012 中开启 3389端口:

wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1
reg add "HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f

自动收集信息

为了简化操作,可以创建应该脚本,在目标机器上完成流程、服务、用户账号、用户组、网络接口、硬盘信息、网络共享信息、操作系统、安装的补丁、安装的软件、启动时运行的程序、时区等信息的查询工作。

g2BpHH.png

查询当前权限

1.查看当前权限

whoami

获取一台主机的权限后,有如下三种情况:

  • 本地普通用户。
  • 本地管理员用户。
  • 域内用户。

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

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

2.获取域SID

whoami /all

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

net user xxx /domain

判断是否存在域

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

1.使用ipconfig命令

ipconfig /all

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

g2y3o4.png

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

g2yJY9.png

2.查看系统详细信息

systeminfo

如下图:”域”即域名,”登录服务器”为域控制器。如果”域”为”WORKGROUP”,表示当前服务器不在域内。

g2yOXV.png

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

“工作站域DNS名称”为域名(如果为”WORKGROUP”,表示当前为非域环境),”登录域”用于表示当前登录的用户是域用户还是本地用户,此处表示当前登录的用户是域用户。

net config workstation

g261jP.png

4.判断主域

判断主域(域服务器通常会同时作为时间服务器使用)

net time /domain

执行以上命令后,通常有如下三种情况:

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

g26X8A.png

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

g26zKP.png

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

g2cmrV.png

搜集域内基本信息

查询域

net view /domain

查询域内所有计算机

net view /domain:SECURITY

查看域内所有用户组列表

net group /domain
  • Domain Admins:域管理员组
  • Domain Computers:域内机器
  • Domain Controllers:域控制器
  • Domain Guest:域访客,权限较低
  • Domain User:域用户
  • Enterprise Admins:企业系统管理员用户

默认 Domain Admins、Enterprise Admins 对域内机器有完全控制权。

查询所有域成员计算机列表

net group "domain computers" /domain

获取域密码信息

net accounts /domain

获取域信任信息

net /domain_trusts

查看域控制器

查看域控制器的机器名

nltest /DCLIST:security

查看域控制器的主机名

nslookup -type=SRV_ldap_tcp

查看当前时间

net time /domain

查看域控制器组

net group "domain controllers" /domain

netdom query pdc

获取域内用户和管理员信息

查询所有域用户列表

net user /domain

获取域内用户详细信息

wmic useraccount get /all

查看存在的用户

dsquery user

常见的dsquery命令
dsquery computer - 查找目录中的计算机
dsquery contact - 查找目录中的联系人
dsquery subnet - 查找目录中的子网
dsquery group - 查找目录中的组
dsquery ou - 查找目录中的组织单位
dsquery site - 查找目录中的站点
dsquery server - 查找目录中的 AD DC/LDS 实例
dsquery user - 查找目录中的用户
dsquery quota - 查找目录中的配额规定
dsquery partition - 查找目录中的分区
dsquery * - 用通用的 LDAP 查询来查找目录中的任何对象

查询本地管理员组用户

net localgroup administrators

查询域管理用户组

查询域管理员用户net

net group "domain admins" /domain

查询管理员用户组 (enterprise: 公司,企业单位)

net group "enterprise admins" /domain

定位域管理员

域管理员定位概述

内网中通常会有大量的网络安全系统和设备,IDS,IPS,日志审计,安全网关,反病毒软件等。

在一个域中,当计算机加入域之后,会默认给域管理员组赋予本地系统管理员权限。因此,域管理员组的成员均可访问本地计算机,且具有完全控制权限。

定位域管理员渠道:

  • 日志,本地机器管理员日志,使用脚本或者Wevtuil工具导出查看。
  • 会话,域内每台机器的登录会话,netsess.exe, powerview等工具查询。

探测域内存活主机

利用NetBIOS快速探测内网

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

nbtscan是一个命令行工具,用于扫描本地或远程TCP/IP网络上开放NetBIOS名称服务器。

nbtscan -r 192.168.216.0/24

gRfuJU.png

显示结果的第一列为IP地址,第二列为机器名和所在域的名称,最后一列是机器所开启的服务的列表。

参数说明:

gRfgFf.png

利用ICMP协议快速探测内网

依次对内网中的每个IP地址执行ping命令,可以快速找出内网中所有存活的主机。在渗透测试中,可以使用如下命令循环探测整个C段。

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

通过arp协议探测

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

arp.exe -t 192.168.216.1/24

通过常规TCP/UDP端口扫描探测内网

MSF, Nmap。

扫描域内端口

通过查询目标主机的端口开放信息,不仅可以了解目标主机所开放的服务,还可以找出其开发服务的漏洞、分析目标网络的拓扑结构等:

  • 端口的Banner信息。
  • 端口上运行的服务。
  • 常见应用的默认端口。

利用telnet命令进行扫描

Telnet协议是TCP/IP协议族的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在目标计算机上使用Telnet协议,可以与目标服务器建立连接。如果只是想快速探测某台主机的某个常规高危端口是否开放,使用telnet命令最方便:

telnet DC xx(端口号)

需要在控制面板–>程序和功能–>打开或关闭Windows功能–>找到Telnet客户端,打开才能使用。开启后:进入cmd

telnet
telnet DC xx

msf

search portscan

use auxiliary/scanner/portscan/tcp
show options

端口Banner信息

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

  • 安全焦点:其中的BugTraq是一个出色的漏洞和Exploit数据源,可以通过CVE编号或者产品信息漏洞直接搜索。 —->SecurityFocus
  • Exploit-DB:取代了老牌安全网站milw0rm,提供了大量的Exploit程序和相关报告。 —->exploit-db

常见的端口及其说明:

gRLCKf.png

gRLkVg.png

gRLAaQ.png

gRLZPs.png

gRLnx0.png