端口扫描与nmap

文章最后更新时间为:2018年08月14日 10:51:20

端口介绍

端口理解起来很简单,如果把主机电脑当作一个罗马,那么端口就是条条大路,但是不同的是我们给每条路做了一定的分配。

一个计算机最多有65535个端口,端口不能重复,一般主机只会开放需要的端口,比如http端口和ssh端口来保证其与外界的通信。

端口以数字来标识,但是同一条路也分为tcp端口和udp端口,但是这些是不会引起歧义的,比如TCP的80端口和UDP的80端口,因为数据报在标明端口的同时,还将标明端口的类型。

端口扫描简介

百度百科上说:

端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关)。实质上,端口扫描包括向每个端口发送消息,一次只发送一个消息。接收到的回应类型表示是否在使用该端口并且可由此探寻弱点。

因此,学习端口扫描是学习网络安全的第一步,我们往往能从其中寻找突破口。

端口扫描简单的说逐次对主机上特定的端口发送信息,如果收到了回应说明这个端口是开放的。

常用的端口服务

端口号名称注释
21ftp文件传输协议(FTP)端口;有时被文件服务协议(FSP)使用
22ssh安全 Shell(SSH)服务
23telnetTelnet 服务
25smtp简单邮件传输协议(SMTP)
80http用于万维网(WWW)服务的超文本传输协议(HTTP)
443httpsHTTPS服务器
3306mysqlMySQL 数据库服务
33893389win server远程登陆

端口扫描分类

了解扫描的分类必须得知道tcp三次握手的相关知识,这里假设读者已经知道。

TCPconnect扫描

tcp全连接扫描。使用系统提供的connect()函数来连接目标端口,如果目标端口正在监听这个端口,那么connect()函数将会被成功返回,否则,说明改端口不可访问。通过完整的tcp三次握手(也即一次tcp连接),来判断目标端口的状态。

这种方式容易被主机检测到,会被主机记录下来。

TCPSYN扫描

半打开扫描。首先客户端向要扫描的端口发送一个SYN分组(tcp连接的第一次握手),然后等待服务器返回的SYN/ACK应答(tcp连接的第二次握手),如果收到SYN/ACK应答,那么表示这个端口处于监听状态;如果收到RST/ACK(重置连接)则认为这个端口不在监听状态或者被防火墙拒绝了;如果什么都收不到那么表示被防火墙直接丢弃了。而客户端无论收到什么分组,都会向该端口发送一个RST/ACK分组,这样就没有建立一个完整的TCP连接,但是客户端却知道了这个端口是否开放,并且这种扫描并不会在目标系统上产生连接日志。

TCPFIN扫描

客户端首先向目标端口发送一个FIN分组(结束连接),按照RFC793的规定,目标端口如果是一个关闭的端口,那么将会返回一个RST分组;如果是一个打开的端口将会忽略这个请求。
PS:只对给予UNIX的TCP/IP协议栈有效

TCPACK扫描

该扫描方式,无法判断目标端口是否开放。首先客户端直接发送一个ACK分组给服务端,而目标端口无论是否开放都会返回一个RST分组,所以无法判断端口是否开放。但是可以通过这种方法判断防火墙配置和规则的设计,测试安全策略的有效性。

TCPWindows扫描

基于tcp窗口大小的报告方式不规则,可检测AIX和FreeBSD系统上打开的以及被过滤/不被过滤的端口

TCPXmas树扫描

客户端向目标端口同时发送URG(指示数据时紧急数据,应立即处理),PUSH(强制将数据压入缓冲区),FIN(在结束TCP会话时使用)标志位,由于这三个标志位不能被同时设置,所以可以用来判断端口开放,如果目标端口开放,则这个数据包将被丢弃,什么都不返回;如果目标端口开放,则将会返回一个RST分组
PS:同样是利用了RFC793规定,只对基于UNIX的系统有效

TCPNULL扫描

客户端发送一个不带任何标志位的tcp数据包给目标主机,如果目标端口关闭,那么就会返回一个RST分组;如果目标端口开放则什么都不返回,直接丢弃这个数据包
PS:同样只对遵守RFC793规定的基于UNIX的主机有效,windows主机无论关闭与否都会返回RST标志位,可用来判断目标操作系统

TCPRPC扫描

主要用于识别定位远程过程调用(rpc)端口及相关程序和版本号

UDP扫描

向目标端口发送一个UDP数据包,如果目标端口返回一个ICMP端口不可达的icmp响应,那么此端口是关闭的;如果没有任何响应(被直接丢弃了)则认为是开放的
PS: 由于UDP的无连接不可靠性,扫描准确性受外界干扰。另外由于RFC1812对生成ICMP错误报文的速度做出了限制,扫描速度会很慢

其中对于我们来说只需要关注前三种扫描方式就可以了。

nmap扫描端口

nmap简介

实际上现如今的端口扫描工具太多了,甚至可以自己写一个出来,但是我们为什么选择nmap,首先是因为其功能很全,支持很多种扫描方式,其次是其开源,还带windows下的可视化工具zenmap。上手难度也已经很简单了,当然了你如果要说站长工具网站使用起来更简单那我也无话可说啦。

其官方网站是https://nmap.org/,上面其实已经有很详细教程了,如何下载安装这里也不再赘述。

nmap本身是跨平台的,既可以linux也可以windows,但是作为目标成为专业人士的我们最好还是选择linux(kali),但是操作和windows下的shell是一样的。(在shell下使用需要把nmap加入环境变量)。

nmap功能主要有:
主机发现(Host Discovery)、端口扫描(Port Scanning)、版本侦测(Version Detection)、操作系统侦测(Operating System Detection)

nmap使用介绍

主机发现

网络探测任务的最初几个步骤之一就是把一组IP范围(有时该范围是巨大的)缩小为 一列活动的或者您感兴趣的主机。

什么样的主机令您感兴趣主要依赖于扫描的目的。网管也许只对运行特定服务的 主机感兴趣,而从事安全的人士则可能对一个马桶都感兴趣,只要它有IP地址:-)。

下列选项控制主机发现。

#sP :进行ping扫描,(不进行其他测试)
nmap -sP 127.0.0.1/24

# sn
#ping探测扫描主机,不进行端口扫描
#测试过对方主机把icmp包都丢弃掉,依然能检测到对方开机状态
nmap  -sn 127.0.1-6

# -sA
# 发送tcp的ack包进行探测,可以探测主机是否存活
nmap 127.0.0.1 -sA

这里只列举了一部分命令。更多主机扫描查阅https://nmap.org/man/zh/man-host-discovery.html

端口扫描:

  • 基本扫描

    # 基本扫描
    nmap 120.78.49.230
    
    #扫描多个地址
    nmap 192.168.1.2 192.168.1.5
    
    #扫描一个范围内的主机
    nmap 192.168.1.1-100
    
    #扫描txt列表中的ip(同目录下)
    nmap -iL target.txt
    
    #扫描特定端口
    nmap 120.78.49.231 -p 80,443
    

端口状态一般下面几种:

状态详细的参数说明
Open端口开启,数据有到达主机,有程序在端口上监控
Closed端口关闭,数据有到达主机,没有程序在端口上监控
Filtered数据没有到达主机,返回的结果为空,数据被防火墙或者是IDS过滤
UnFiltered数据有到达主机,但是不能识别端口的当前状态
OpenFiltered无法确定端口是开放还是被过滤的,如开放的端口不响应
ClosedFiltered不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。

上图2中可看出有很多包没有到主机,,说明开启了防火墙被过滤了。

  • 指定扫描方式

如果我们不指定扫描方式的话,那么我们的扫描默认的是采用TCPSYN扫描方式。
我们也可以指定扫描方式:

# TCPSYN扫描(默认快速,需root权限)
nmap -sS 192.168.1.1 

# TCPconnect扫描(端口状态和svn一样,耗时长)
nmap -sT 192.168.1.1

# udp扫描
nmap -sU 192.168.1.1

# TCPWindows扫描
nmap -sW  192.168.1.3

# TCPFIN扫描
#有时候TcpSYN扫描不是最佳的扫描模式,因为有防火墙的存在.目标主机有时候可能有IDS和IPS系统的存在,防火墙会阻止掉SYN数据包。
#发送一个设置了FIN标志的数据包并不需要完成TCP的握手.
#和sS扫描效果差不多,比sT速度快
nmap -sF  192.168.1.1

#TCPXmas树扫描
nmap -sX  192.168.1.1

#TCPNULL扫描
nmap -sN 192.168.1.1

后三种扫描方式都是基于unix的,一般用于sT方式如果使用这种扫描方式可以发现打开的端口,你就可以确定目标注意运行的不是Windows系统。

如果使用-sF、-sX或者-sN扫描显示所有的端口都是关闭的,而使用-sS(SYN)扫描显示有打开的端口,你可以确定目标主机可能运行的是Windwos系统。

更多信息扫描

#版本检测(sV)
#是用来扫描目标主机和端口上运行的软件的版本
nmap -sV 192.168.1.3

#协议扫描,获取服务器支持哪些协议(sO)
nmap -sO 192.168.1.1 

#探测目标主机的操作系统(O)
nmap -O 192.168.1.1

总结

nmap是一个很强大的工具,还有很多支持的命令没有记录,高级的使用还是得在实践中才能掌握。

对于tcp/ip协议、tcp三次握手等这些计算机网络知识还是需要好好学习一下,整天瞎想着日站没有啥意义,争取在web安全上更进一步!

本文参考:
https://nmap.org
https://blog.csdn.net/shang_cm/article/details/52149288
http://tool.oschina.net/commons?type=7
https://www.cnblogs.com/st-leslie/p/5115280.html
https://www.cnblogs.com/nmap/p/6232969.html

1 + 7 =
快来做第一个评论的人吧~