端口扫描与nmap
文章最后更新时间为:2018年08月14日 10:51:20
端口介绍
端口理解起来很简单,如果把主机电脑当作一个罗马,那么端口就是条条大路,但是不同的是我们给每条路做了一定的分配。
一个计算机最多有65535个端口,端口不能重复,一般主机只会开放需要的端口,比如http端口和ssh端口来保证其与外界的通信。
端口以数字来标识,但是同一条路也分为tcp端口和udp端口,但是这些是不会引起歧义的,比如TCP的80端口和UDP的80端口,因为数据报在标明端口的同时,还将标明端口的类型。
端口扫描简介
百度百科上说:
端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关)。实质上,端口扫描包括向每个端口发送消息,一次只发送一个消息。接收到的回应类型表示是否在使用该端口并且可由此探寻弱点。
因此,学习端口扫描是学习网络安全的第一步,我们往往能从其中寻找突破口。
端口扫描简单的说逐次对主机上特定的端口发送信息,如果收到了回应说明这个端口是开放的。
常用的端口服务
端口号 | 名称 | 注释 |
---|---|---|
21 | ftp | 文件传输协议(FTP)端口;有时被文件服务协议(FSP)使用 |
22 | ssh | 安全 Shell(SSH)服务 |
23 | telnet | Telnet 服务 |
25 | smtp | 简单邮件传输协议(SMTP) |
80 | http | 用于万维网(WWW)服务的超文本传输协议(HTTP) |
443 | https | HTTPS服务器 |
3306 | mysql | MySQL 数据库服务 |
3389 | 3389 | win 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