【渗透-主机发现】从0到1,结合工具,入门渗透中的主机发现技术
要实现一次成功的渗透操作,先要有一些预动作,例如:主机发现、信息收集、漏洞扫描等。主机发现的根本目的就是找到你要进行渗透操作的目标,其中,可以有很多思想方法可以借鉴,有很多工具可以利用。
Table of Contents
在本个专栏《渗透-主机发现》中,我将尽自己所收集到的相关资料和学习笔记进行整理,并分享出来,一起进步成长,抵御可能发生在未来的一些事情。enjoy...
主机发现方式(扫描方式):
- 主动扫描:主动发送一些数据包进行扫描,以找到网络中活动的主机。例如,主动发送一个ARP请求包,等待目标主机的响应。有响应则说明该机器存活,无响应则说明该机器没存活。
- 被动扫描:长期监听广播包,来发现某一网络中的活动主机。
PS:为了能对下文所述进行实操,建议搭建靶机环境,如Metasploitable2-Linux、VM中安装不同版本的Windows系统,因为网络上对于这些的文章教程太多了,我也不打算讲述这些。另外,以下的很多操作目标是Metasploitable2-Linux。
基于ARP协议的主机发现
ARP(Address Resolution Protocol)地址解析协议,其核心作用是根据IP获得MAC。
nmap实现ARP协议的主机发现:
nmap -sn -PR 10.253.6.0/24
Netdiscover(是一个主动/被动的ARP侦查工具):
- 对某一范围进行扫描:netdiscover -r 192.168.0.0/24
- 对某个范围进行扫描:netdiscover -r 192.168.3.0/24 -i eth0
- 静态扫描:netdiscover -p(表示被动模式,不发送任何数据包) 目标
- -r:指定IP范围
- -i:指定扫描的接口
arp-scan(ARP扫描工具):
- 可以单一扫描,也可以进行批量扫描(CIDR、地址范围、列表文件的方式制定);
- 支持定制ARP数据包;
- 支持自动解析MAC,返回厂商;
语法:arp-scan <target>
arping(基于ARP的ping工具,在局域网内向其他主机发送ARP指令):
语法:arping -c 数据包数量 <target>
基于ICMP协议的主机发现
ICMP(Internet Control Message Protocol)
- 因特网控制报文协议,工作在OSI的网络层,向数据通信中的源主机报告目标主机是否可达等信息。
- 其核心作用就是让用户能够检测网络的连续状态,也是“错误侦测与回报实施机制”。
- 通过ICMP ping扫描,可以发现目标主机是否存活。
- 用于在IP主机和路由器之间传递控制消息。控制消息值“网络通不通,主机是否可达,路由是否可用等网络本身的消息”。
ping(通用于UNIX,Linux,Windows)
语法格式:ping <target>
例:ping hackyle.net
nmap(基于ICMP协议)
- nmap -PE <target> (-PE:表示发送一个ICMP echo,timestamp和netmask请求)
- nmap -PP <target> (-PP:发送ICMP时间戳扫描存活主机)
- nmap -PM <target> (-PM:试图用备选的ICMP登记ping指定的主机,这种类型的ping可以绕过配置有封锁标准ICMP请求策略的防火墙)
fping(可以定义任意多的IP地址或主机)
基于TCP协议的主机发现
理解TCP3次握手建立连接:
- 发送方:你听得到吗(SYN)?
- 接收方:我听得到(ACK),你能听得到我吗(SYN)?
- 发送方:我听得到(ACK)。
- 此时双方都知道彼此具备收发数据的能力!
TCP-SYN扫描(又叫隐蔽扫描或半打开扫描)
原理:向目标主机的指定端口发送SYN数据包。如果源主机收到RST数据包,则说明端口是关闭的;如果源主机收到SYN+ACK数据包,则说明目标端口处理监听状态。
特性:
- 由于源主机已经获取了目标主机的端口状态信息,并不需要建立连接,所以传送一个RST数据包给目标主机,从而停止了正常了三次握手连接。
- 在SYN扫描中,由于客户端与服务端并没有形成3次握手,所有没有建立一个正常的TCP连接,因此不会被防火墙和日志所记录,也即不会在目标主机上留下任何痕迹。
语法:
- nmap -PS <target> (Nmap默认使用的这种方式来扫描,基于TCP ACK和ICMP Echo请求来判断主机是否响应)
- nmap -sS <target> (-s:即scan,告诉nmap要运行那种类型的扫描,-S:即SYN,表示要执行的TCP SYN类型的扫描)
使用这两种方式扫描Metasploitable2-Linux漏洞主机:
TCP-ACK扫描
原理:
- 向目标主机的一个端口发送一个只有ACK标志的TCP数据包,无论目标主机的该端口是否开启,都会返回一个相应的RST数据包,然后通过RST包中的TTL,来判断目标主机的端口是否开启。
- 其中TTL<64表示端口开启,TTL>64时表示端口关闭。
语法:
- nmap -PA <target> (可以探测阻止了TCP-SYN包和ICMP Echo请求的主机,但有可能会被防火墙阻止)
- nmap -sA <target> (-s:即scan,表明你要使用哪种类型的扫描,-A:即TCP-ACK扫描)
TCP全连接扫描
原理:试图与目标主机上的端口进行完整的三次握手。
特性:
- 最基础、最稳定
- 速度慢,但准确度搞
- 容易被防火墙和IDS(入侵检测系统)发现
语法:
nmap -sT <target> (-s:即scan,-T:TCP)
TCP窗口扫描
原理:和ACK扫描一样,它通过检测返回的RST报文的TCP窗口域,来判断目标端口是否开放。当端口关闭,则表明窗口为0;当端口开放,即窗口大于0。
语法:nmap -sW <target>
TCP-FIN扫描
诞生背景:
如果目标主机有防火墙,会组织SYN数据包,这是可以考虑使用TCP-FIN扫描。因为TCP FIN标志的数据包,并不需要完成TCP的握手。
原理:
TCP-FIN扫描就是想目标端口发送一个FIN包。如果收到目标主机的响应RST包,则说明端口是关闭的;如果没有收到RST包,则说明端口可能是开放的或是被隐蔽的。
语法:nmap -sF <target> (-s:即scan;-F:FIN)
TCP-Xmas扫描
原理:又称为圣诞树扫描,它发送带有URG、PSH和FIN标志(注:URG、PSH、FIN是TCP报文中的标识位)的TCP数据包。如果目标主机响应一个RST标志的数据包,则说明目标主机的端口是关闭的。
语法:nmap -sX <target>
TCP-null扫描
原理和TCP-Xmas扫描一样,也是通过发送非常规的TCP通信数据包对目标计算机进行探测。在很多情况下,Null扫描和Xmas树扫描正好相反,因为TCP-null扫描向目标主机发送没有任何标记的数据包。如果目标主机的相应端口是关闭的话,则会响应一个RST数据包;如果目标主机的端口是开启的话,则不会响应任何信息。
语法:nmap -sN <target>
基于UDP协议
ping命令的原理就是向目标主机发送UDP数据包,如果数据包及时到达目标主机并做出响应,则认为网络是连通。
UDP扫描
原理:专门针对UDP端口。如果目标返回ICMP不可达的错误,则说明端口是关闭的;如果能够得到正确或者适当的响应,则说明目标端口是开启的。
语法:nmap -sU <target>
UDP-ping扫描
原理:通过发送UDP数据包到目标主机并等待响应。如果目标返回ICMP不可达的错误,则说明端口是关闭的;如果能够得到正确或者适当的响应,则说明目标端口是开启的。
语法:nmap -PD[端口] <target> (-P:即ping,使用ping类型扫描;D:即UDP)
上层网络&路由追踪
路由追踪(确定自己与该IP/域名需要经过几级路由):
- traceroute <IP/域名> (例如:traceroute hackyle.net)
- nmap --traceroute <IP/域名> (例如:nmap --traceroute )