我们将主机扫描的场景大致可分为三种
1)直接在webshell下执行,通过系统自带命令或上传脚本工具进行扫描探测
2)通过反弹shell进行内网渗透,msf等渗透测试框架自带一些扫描模块
3)通过socks代理扫描内网(例如 proxychains+Nmap扫描)。
支持存活探测的协议,包括了 ARP、ICMP、SMB、 UDP、NETBIOS、SNMP协议
支持端口扫描的方式,包括ACK扫描、SYN扫描、TCP扫描、UDP扫描、ICMP扫描

存活主机探测

0x01 Netbios协议探测

1.1 netbios简介

IBM公司开发,主要用于数十台计算机的小型局域网。该协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的同一的命令集,作用是为了给局域网提供网络以及其他特殊功能。系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名-——特指基于NETBIOS协议获得计算机名称——解析为相应IP地址,实现信息通讯,所以在局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享

0x02 ICMP协议探测

2.1 ICMP简介

它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

0x03 UDP协议探测

3.1 UDP简介

UDP(User Datagram Protocol)是一种无连接的协议,在第四层-传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

0x04 ARP协议探测(速度快,好用)

4.1 ARP简介

ARP,通过解析网路层地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议。根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址
这个东西是个广播请求,通俗来讲相当于我这边像域内主机发送广播,在说谁的ip是xxxxxx,每个主机都能听到然后如果不是自己的ip就无视掉,如果是的话这个主机就会喊,我的ip是这个,我的mac地址是xxxxxx,然后攻击机就能获取ip是否有主机存活了

0x05 SNMP协议探测

5.1 SNMP简介

SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。

0x06 SMB协议探测

6.1 SMB简介

直接通过扫描445或者139端口来探测主机是否存活,总归还是TCP/IP协议的东西这里就不多描述了

端口探测

0x01 TCP扫描

这是一种最为普通的扫描方法,这种扫描方法的特点是:扫描的速度快,准确性高,对操作者没有权限上的要求,但是容易被防火墙和IDS(防入侵系统)发现
运行的原理:通过建立TCP的三次握手连接来进行信息的传递
① Client端发送SYN;
② Server端返回SYN/ACK,表明端口开放;
③ Client端返回ACK,表明连接已建立;
④ Client端主动断开连接。

0x02 SYN扫描

这是一种秘密的扫描方式之一,因为在SYN扫描中Client端和Server端没有形成3次握手,所以没有建立一个正常的TCP连接,因此不被防火墙和日志所记录,一般不会再目标主机上留下任何的痕迹,但是这种扫描是需要root权限(对于windows用户来说,是没有root权限这个概念的,root权限是linux的最高权限,对应windows的管理员权限)
运行的原理图如下:

0x03 ACK扫描

ACK扫描的原理是发送一个ACK包给目标主机,不论目标主机的端口是否开启,都会返回相应的RST包,通过判断RST包中的TTL来判断端口是否开启
运行原理图:

TTL值小于64端口开启,大于64端口关闭
大致上主要的扫描方法就是这些,除了我们可以按照这样些参数去执行扫描外,还可以自己定义一个TCP扫描包

0x04 UDP扫描

UDP扫描比较简单,一般如果返回ICMP port unreachable说明端口是关闭的,
而如果没有回应或有回应(有些UDP服务是有回应的但不常见)则认为是open,但由于UDP的不可靠性,无法判断报文段是丢了还是没有回应,
所以一般扫描器会发送多次,然后根据结果再判断。这也是为什么UDP扫描这么慢的原因。

0x05 ICMP扫描

根据网络协议,如果按照协议出现了错误,那么接收端将产生一个icmp的错误报文。这些错误报文并不是主动发送的,而是由于错误,根据协议自动产生