nmap

端口扫描在百度百科上的定义是:

端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关),但是端口扫描不但可以为黑客所利用,同时端口扫描还是网络安全工作者的必备的利器,通过对端口的扫描,了解网站中出现的漏洞以及端口的开放情况,对网站安全方面有着不可或缺的贡献,是你学习网络安全的第一门课程的首选

目前在市面上主要的端口扫描工具是X_Scan、SuperScan、nmap,其中在这里主推的是nmap,因为nmap具有以下的这一些优点:

1、多种多样的参数,丰富的脚本库,满足用户的个人定制需求,其中脚本库还提供了很多强大的功能任你选择

2、强大的可移植性,基本上能在所有的主流系统上运行,而且代码是开源的

3、详细的文档说明,和强大的社区团队进行支持,方面新人上手

Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具,但是nmap也是有一些缺点的,比如说上手较难,但是难上手是相对的,与其他达到这种功能性的软件产品相比,还是比较容易上手的,但是这也不妨碍nmap成为世界千万安全专家列为必备的工具之一,在其中的一些影视作品中《黑客帝国2》、《特警判官》中都有亮相

废话不多说,开始今天的nmap学习:

nmap的安装:直接从百度上下载,然后安装的步骤跟其他的软件一样,最后确认安装成功只需要在命令行中输入nmap回车,有相关的参数输出即为安装成功,安装的具体步骤可以查看:http://jingyan.baidu.com/article/5bbb5a1b1e0a7713eba179cb.html,在此就不多说了

Nmap包含四项基本功能:

  1. 主机发现(Host Discovery)
  2. 端口扫描(Port Scanning)
  3. 版本侦测(Version Detection)
  4. 操作系统侦测(Operating System Detection)

下面就从主机发现一步一步进行探讨

主机发现顾名思义就是发现所要扫描的主机是否是正在运行的状态,接下来就来一个简单例子

例子要求:获取http://nmap.org 的主机是否开启

输入命令:nmap -F -sT -v nmap.org

-F:扫描100个最有可能开放的端口   -v 获取扫描的信息   -sT:采用的是TCP扫描 不写也是可以的,默认采用的就是TCP扫描

运行如下:

由图中的1,我们可以发现对URL进行解析花了16.5秒,这个地方花费的时间是可以进行优化的,优化的方法会稍后介绍

图中的2,是总共的运行时间

图中的3是说明有96个端口被屏蔽了,也就是说明了网站的防火墙是开启的,因为没有开启防火墙是不会对端口进行屏蔽的,

补充说明:

端口端口一般是有下面这几种状态的

状态 详细的参数说明
 Open  端口开启,数据有到达主机,有程序在端口上监控
 Closed  端口关闭,数据有到达主机,没有程序在端口上监控
 Filtered  数据没有到达主机,返回的结果为空,数据被防火墙或者是IDS过滤
 UnFiltered  数据有到达主机,但是不能识别端口的当前状态
 Open|Filtered  端口没有返回值,主要发生在UDP、IP、FIN、NULL和Xmas扫描中

 Closed|Filtered

 只发生在IP ID idle扫描

 

 

 

 

 

 

 

 

 

 

 

 

图中的4是本次返回的关键信息,其中我们要主要关注的是端口号,端口状态,端口上的服务

那你可能就会要问为什么要关注这些端口呢?那这个问题就要转到探讨为什么要进行扫描?

扫描对于黑客和安全人员来说,主要的流程是这样的

上面的图中的IP写错了,应该改为FTP

从这个图中我们不难发现,我们主要关注的区域就是这些内容

接下来就来讨论下面上面提出来的问题?怎样对URL解析的时间进行优化,在Nmap重提供了不进行解析的参数(-n),这样就不会对域名进行解析了

其中关于域名解析的相关参数还有:

-R 为所有的目标主机进行解析

--system-dns 使用系统域名解析器进行解析,这个解析起来会比较慢

--dns-server 服务器选择DNS解析

说到-R注释的意思你会有所体会,其实nmap的扫描解析不止是对一个目标主机进行解析,还可以对一定范围内的目标主机群进行解析

例如:查找45.33.49.119-120的主机的状态以及端口状态

分析:

1、虽然查找的主机的数量不多,但是这样查找起来也是很浪费时间的, 所有我们可以通过使用快速查找的方法来节约时间

快速查找端口方法的原理如下:

默认的情况下,我们的查找是查找最有可能开放的1000端口,但是使用快速端口查找(参数 -F )会查找最有可能开放的100个端口,这样也就节约了10倍的时间

 2、这里我们需要获取端口的状态,所以就不能使用参数(-sn),这个参数是可以跳过端口扫描,直接进行主机发现的

输入命令:nmap -F -sT -v -n 45.33.49.119-120      45.33.49.119:nmap.org的IP地址

PS:1、-sn参数只能扫描的主机,不能扫描端口,另一个参数也要特别注意的是(-PE)通过ICMP echo判定主机是否存活

运行情况如下:

图片中的1处指的是,采用sT的扫描方法,这种扫描方法准确,速度快,但是这样的扫描容易被防火墙和IDS发现并记录,所以这种方法,实际中并不多用

由图中的3处我们可以知道在不进行解析的情况下扫描用时为26.92秒,比解析的时候用的时间节约了不少

图中的4说明了扫描了2个主机,然后只有一个主机为开启

 提示:

在nmap运行的时候,如果我们可以像其他编程一样打“断点”,直接按键盘的d键就行了,如果想知道运行的进度可以按下X键

好了,示例也讲完了,下面我们就来分析一下扫描的各种方法:

端口扫描

1、TCP扫描(-sT)

这是一种最为普通的扫描方法,这种扫描方法的特点是:扫描的速度快,准确性高,对操作者没有权限上的要求,但是容易被防火墙和IDS(防入侵系统)发现

运行的原理:通过建立TCP的三次握手连接来进行信息的传递

① Client端发送SYN;

② Server端返回SYN/ACK,表明端口开放;

③ Client端返回ACK,表明连接已建立;

④ Client端主动断开连接。

 2、SYN扫描(-sS)

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

运行的原理图如下:

3、NULL扫描

NULL扫描是一种反向的扫描方法,通过发送一个没有任何标志位的数据包给服务器,然后等待服务器的返回内容。这种扫描的方法比前面提及的扫描方法要隐蔽很多,但是这种方法的准确度也是较低的, 主要的用途是用来判断操作系统是否为windows,因为windows不遵守RFC 793标准,不论端口是开启还是关闭的都返回RST包

但是虽然NULL具有这样的一些用处,但是本人却认为不宜使用NULL

1、NULL方法的精确度不高,端口的状态返回的不是很准确

2、要获取目标主机的运行系统,可以使用参数(-O),来获取对于一些操作系统无法准确判断的,可以加上参数(-osscan-guess)

3、NULL扫描易被过滤

4、FIN扫描

FIN扫描的原理与NULL扫描的原理基本上是一样的在这里就不重复了

5、ACK扫描

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

运行原理图:

TTL值小于64端口开启,大于64端口关闭

大致上主要的扫描方法就是这些,除了我们可以按照这样些参数去执行扫描外,还可以自己定义一个TCP扫描包

6、自定义TCP扫描包的参数为(--scanflags)

例如:定制一个包含ACK扫描和SYN扫描的安装包

命令:nmap --scanflags ACKSYN nmap.org

 好了,接下来还有各种扫描方法的端口列表参数

-PS 端口列表用,隔开[tcp80 syn 扫描]
-PA 端口列表用,隔开[ack扫描](PS+PA测试状态包过滤防火墙【非状态的PA可以过】)【默认扫描端口1-1024】
-PU 端口列表用,隔开[udp高端口扫描 穿越只过滤tcp的防火墙]

其他的常见命令

输出命令

-oN 文件名 输出普通文件

-oX 文件名 输出xml文件

错误调试:

--log-errors 输出错误日志

--packet-trace 获取从当前主机到目标主机的所有节点

 

 

使用技巧

基本使用:
进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测):
nmap -sP 192.168.1.0/24

仅列出指定网络上的每台主机,不发送任何报文到目标主机:
nmap -sL 192.168.1.0/24

探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80):
nmap -PS 192.168.1.234

使用UDP ping探测主机:
nmap -PU 192.168.1.0/24

使用频率最高的扫描选项:SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快:
nmap -sS 192.168.1.0/24

当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描:
nmap -sT 192.168.1.0/24

UDP扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口:
nmap -sU 192.168.1.0/24

确定目标机支持哪些IP协议 (TCP,ICMP,IGMP等):
nmap -sO 192.168.1.19

探测目标主机的操作系统:
nmap -O 192.168.1.19
nmap -A 192.168.1.19

nmap官方文档中的例子:
nmap -v scanme.nmap.org
这个选项扫描主机scanme.nmap.org中 所有的保留TCP端口。选项-v启用细节模式。
nmap -sS -O scanme.nmap.org/24
进行秘密SYN扫描,对象为主机Saznme所在的“C类”网段 的255台主机。同时尝试确定每台工作主机的操作系统类型。因为进行SYN扫描 和操作系统检测,这个扫描需要有根权限。

nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127
进行主机列举和TCP扫描,对象为B类188.116网段中255个8位子网。这 个测试用于确定系统是否运行了sshd、DNS、imapd或4564端口。如果这些端口 打开,将使用版本检测来确定哪种应用在运行。

nmap -v -iR 100000 -P0 -p 80
随机选择100000台主机扫描是否运行Web服务器(80端口)。由起始阶段 发送探测报文来确定主机是否工作非常浪费时间,而且只需探测主机的一个端口,因 此使用-P0禁止对主机列表。

nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20
扫描4096个IP地址,查找Web服务器(不ping),将结果以Grep和XML格式保存。

host -l company.com | cut -d -f 4 | nmap -v -iL -
进行DNS区域传输,以发现company.com中的主机,然后将IP地址提供给 Nmap。上述命令用于GNU/Linux -- 其它系统进行区域传输时有不同的命令。

其他选项:
-p <port ranges> (只扫描指定的端口)

单个端口和用连字符表示的端口范 围(如 1-1023)都可以。当既扫描TCP端口又扫描UDP端口时,可以通过在端口号前加上T: 或者U: 指定协议。 协议限定符一直有效直到指定另一个。 例如,参数 -p U:53,111,137,T:21-25,80,139,8080 将扫描 UDP 端口53,111,和137,同时扫描列出的TCP端口。

-F (快速 (有限的端口) 扫描)
 
高级使用:
获取远程主机的系统类型及开放端口
nmap -sS -P0 -sV -O <target>
这里的 < target > 可以是单一 IP, 或主机名,或域名,或子网
1.      -sS TCP SYN 扫描 (又称半开放,或隐身扫描)
2.      -P0 允许你关闭 ICMP pings.
3.      -sV 打开系统版本检测
4.      -O 尝试识别远程操作系统
其它选项:
-A 同时打开操作系统指纹和版本检测
-v 详细输出扫描情况.
nmap -sS -P0 -A -v < target >
 
列出开放了指定端口的主机列表
nmap -sT -p 80 -oG – 192.168.1.* | grep open
 
在网络寻找所有在线主机
nmap -sP 192.168.0.*
或者也可用以下命令:
nmap -sP 192.168.0.0/24
指定 subnet
 
Ping 指定范围内的 IP 地址
nmap -sP 192.168.1.100-254
 
在某段子网上查找未占用的 IP
nmap -T4 -sP 192.168.2.0/24 && egrep "00:00:00:00:00:00" /proc/net/arp
 
在局域网上扫找 Conficker 蠕虫病毒
nmap -PN -T4 -p139,445 -n -v --script=smb-check-vulns --script-args safe=1 192.168.0.1-254
 
扫描网络上的恶意接入点 (rogue APs).
nmap -A -p1-85,113,443,8080-8100 -T4 --min-hostgroup 50 --max-rtt-timeout 2000 --initial-rtt-timeout 300 --max-retries 3 --host-timeout 20m --max-scan-delay 1000 -oA wapscan 10.0.0.0/8
 
使用诱饵扫描方法来扫描主机端口
sudo nmap -sS 192.168.0.10 -D 192.168.0.2
 
为一个子网列出反向 DNS 记录
nmap -R -sL 209.85.229.99/27 | awk '{if($3=="not")print"("$2") no PTR";else print$3" is "$2}' | grep '('
 
显示网络上共有多少台 Linux 及 Win 设备?
sudo nmap -F -O 192.168.0.1-255 | grep "Running: " > /tmp/os; echo "$(cat /tmp/os | grep Linux | wc -l) Linux device(s)"; echo "$(cat /tmp/os | grep Windows | wc -l) Window(s) device"
posted @ 2018-04-13 14:58  蓝天平和1  阅读(358)  评论(0)    收藏  举报