端口扫描

一、常用端口

有一些服务使用固定的端口号,比如如下的:

21 FTP文件传输协议的命令端口
22 SSH较安全的远程连接协议
23 Telnet 早期的连接服务器软件
25 SMTP邮件传输协议
53 DNS域名解析服务器
80 www服务器
110 pop3邮件接受协议
443 https有加密安全的www服务器
3306 mysql

二、端口扫描工具

常见的端口扫描工具有nmap,nmap,Metasploit。nmap更慢更全面,zmap则更快更粗略,Metasploit提供多种扫描。

为什么zmap扫描更快一些,关键性的问题出现在对回复的SYN-ACK进行seq number的校验。传统上就需要记录状态。而ZMap是将对方receiver ip地址进行hash,将其处理保存到了sender port和seq number两个字段中,当SYN-ACK回来的时候,就可以根据sender ip、receiver port、ack number这些字段进行校验。因此避免了状态存储,接近了网络带宽极限。

nmap使用

默认使用SYN方式扫描

扫描单个主机或IP地址

 

1
2
3
4
5
6
7
8

//IP地址
$nmap220.181.112.244
 
//主机域名
$nmap blog.topspeedsnail.com
 
//v列出详细扫描信息
$nmapvblog.topspeedsnail.com

Screen Shot 2016-01-22 at 11.15.38

扫描多个IP或子网

 

1
2
3
4
5

//扫描多个IP
$nmap220.181.112.1220.181.112.2220.181.112.3
 
//子网
$nmap220.181.112.1,2,3

扫描IP地址范围:

 

1

$nmap192.168.1.120

扫描IP地址范围,使用通配符:

 

1

$nmap192.168.1.*

扫描整个子网:

 
 

1

$nmap192.168.1.0/24

在文件中读取主机/IP

使用-iL允许nmap从文件中读取主机/IP,在扫描很多主机时很有用。创建一个文件文件,如下:

 

1

$vimhost.list

 

1
2
3
4
5

blog.topspeedsnail.com
220.181.112.244
localhost
192.168.1.1/24
192.168.1.0/24

扫描文件中的主机:

 

1

$nmapiL host.list

三、端口扫描种类

3.1 ICMP扫描

ICMP报文格式如下;


ICMP报文分为两种,差错报文和询问报文。很具报文的作用不同,选项数据也不同。
可用于ICMP扫描的有如下:

ICMP时间戳请求报文,可以向其他机器请求时间
ICMP地址掩码请求报文,用于无盘机请求掩码
ICMP端口不可达报文,如果收到一份UDP数据报而目的端口与正在使用的端口不符合,则UDP返回一个端口不可达报文
ICMP回显请求报文,ping使用的就是这个,也是最常用的
异常IP包,比如伪造IP包的头部长度和IP选项,则会返回ICMP parameter problem error,不同系统和路由器的返回不同,可用于检测OS或网络
超长包,但设置禁止分片,则会收到差错报文
对于目标主机在防火墙内部,则可以构造可能的IP地址列表,逐个发送数据包。对不在其服务范围内的则对方路由器会返回ICMP Host Unreachable或ICMP Time Exceeded,没有收到则被认为IP地址在网络中

 3.2 TCP扫描

TCP扫描速度慢,且容易留下审计数据,TCP扫描主要有以下几种实现,

直接建立TCP连接
SYN扫描,如果发送SYN包的时候,返回RST包,则表示端口不开
ACK扫描,不管端口是否打开,都会返回RST,所以不能测试端口是否打开,但是可以用来测试防火墙的策略,时有状态还是无状态,那些端口时被过滤的
FIN扫描,如果端口关闭,则收到RST,如果端口打开,则无回复,如果收到ICMP差错报文,则端口状态未知
NULL扫描,发送没有任何位的TCP包,如果没有回复,则端口打开,如果有RST包则表示端口关闭
x-mas扫描发送一个URG、FIN、PUSH位全部打开的包,同样时没有意义的数据包,结果同NULL

3.3 UDP扫描

一般是构造空的UDP包,如果返回ICMP端口不可达,则表示端口时关闭的,如果没有反应,则表示端口可能时开放的

3.4 空闲扫描

在IP头中,有一个16位的标识,表示IP的ID,标识(identification)的用途是让目标主机确定一个新到达的分段是哪一个数据流的。同一个数据流所有包都是一个相同的标识。他是可以预测的,增量是固定的(是每次侦听到一个包就增加1吗?)。

首先找一个空闲机器,不发出或接受任何流量。先和它通信,获得IP的ID增长值,然后假冒空闲机器,想目的机器发出SYN包,则有以下两种情况:

端口打开,则目的机器回复SYN/ACK,然后空闲机器回复RST包
端口关闭,目的主机就不回复SYN/ACK,空闲机器也不回复RST包

最后检测空闲机器的IP的ID值,如果增长1,则表示后一种情况,增长2表示第一种情况。

3.5 隐秘扫描

不容易留下扫描信息,包括了FIN扫描、XMAS扫描、NULL扫描、UDP扫描等。

四、端口扫描的实现

 原生套接字可以实现。

 
 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注