nmap的使用

参考

  1. https://zhuanlan.zhihu.com/p/343709343

图形化界面

  1. zenmap

分布式框架

  1. Dnamp

作用

  1. 主机探测
  2. 端口扫描
  3. 版本检测
  4. 系统检测
  5. 支持探测脚本的编写

Nmap在实际中应用场合如下:

  1. 通过对设备或者防火墙的探测来审计它的安全性
  2. 探测目标主机所开放的端口
  3. 通过识别新的服务器审计网络的安全性
  4. 探测网络上的主机

原理

  1. 端口扫描工具,即借助工具,试图了解所扫描IP提供的计算机网络服务类型(网络服务均与端口号相关),从而发现攻击弱点,常见服务对应端口号
  2. 首先判断nmap输入的命令行中是否包含域名,如果包含则需要用DNS服务器进行域名解析,然后发送ICMP Echo Request来探测主机的存活性
  3. 根据返回的数据包来得到机器信息

Nmap进行完整全面的扫描

nmap –T4 –A –v

参数

  1. 其中-A选项用于使用进攻性(Aggressive)方式扫描;
  2. -T4指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4;
  3. -v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态。

最重要的是-T

  1. 扫描速度过快,容易被系统拦截,导致访问一堆200,结果打开全是503,所以应避免扫描过快

主机扫描

端口扫描

扫描方式选项

端口参数和扫描顺序

版本侦测的用法

端口状态

  1. Open 端口处于开放状态:进行TCP链接时,目标主机返回SYN+ACK的报文,就认为端口开放且使用了TCP服务
  2. Closed 端口处于关闭状态:返回RST类型的报文(关闭的端口也是可以访问的,只是没有上层的服务在监听此端口,而且只是我们在扫描的这个时刻为关闭,当我们在另一个时间段进行扫描时,这些关闭的端口可能会处于open状态)
  3. Filterd 端口处于过滤,无法收到返回的probe状态:报文无法到达指定端口,nmap不能决定端口的开放状态,主要是由于网络或者主机安装了一些防火墙导致,收到icmp报文主机不可达报文,或者目标主机无应答
  4. UnFilterd 端口收到返回的Probe,但是无法确认
  5. Opend/UnFilterd 表示端口处于开放或者被过滤状态
  6. Closed/UnFilterd 表示端口处于关闭或者未过滤状态

具体操作

用nmap扫描特定IP地址

用-vv对结果进行详细输出

自行设置端口范围进行扫描

指定端口号进行扫描

对端口进行ping扫描

路由跟踪

扫描一个段的主机在线情况

操作系统探测

万能开关扫描

SYN,FIN,ACK等其它扫描方式

使用具体dns服务器进行扫描

nmap --dns-servers 8.8.8.8 scanme.nmap.org

扫描远程机器开放的端口

  1. 对于已经知道主机存活或者防火墙开启的机器,可以使用 -Pn 参数来停止探测之前的ICMP请求,来达到不处罚防火墙的安全机制

  2. ```
    nmap -Pn scanme.nmap.org

    
    ### 列举远程机器开放的端口
    
    1.   对于所有默认的端口范围,并不能满足日常工作的需要,可以使用-p m-n来指定探测端口范围为m-n之间的所有端口
    
    2.   ```
         nmap -p 1-10000 scanme.nmap.org

Nmap识别目标机器上的服务指纹

什么是服务指纹

  1. 为了确保有一个成功的渗透测试和网络设备监控,必须需要知道目标系统中服务的指纹信息。服务指纹信息包括服务端口、服务名和版本等
  2. 通过分析目标往Nmap发送的数据包中某些协议标记、选项和数据,我们可以推断发送这些数据包的操作系统等

识别服务指纹

  1. 使用命令 nmap -sV IP 地址来识别目标机器的服务信息
  2. 按回车可以看发送进度

Nmap的侵略性探测

  1. ```
    nmap -A -v -T4 IP地址

    
    2.   探测目标主机的操作系统、服务等信息
    
    3.   ![](https://strongwillpro.oss-cn-beijing.aliyuncs.com/img/20230707115955.png)
    
    4.   ```
         nmap -sC -sV -O IP地址
  2. 探测目标主机的操作系统、服务等信息,其中-sC参数表示使用Nmap脚本进行探测,sV表示探测目标主机上的服务信息,O表示探测目标机器的操作系统信息

  3. ```
    nmap -sC -sV -O

    
    7.   ```
         nmap --script=default 和上面相等

探测局域网中存活主机

一个局域网中有很多台设备,如何获取哪些设备正在开机状态

使用ping来进行探测,但是网络很大的情况下,手工探测很费力

  1. ```
    ping IP地址

    
    #### 使用不同工具来进行批量探测
    
    1.   CIDR五类别域间路由、网络前缀来快速表示一个网络
    2.   172.16.1.1/24 表示前24位不能动,只有最后8位可动,可以表示172.168.1.1-172.168.1.255之间的所有主机IP地址
    
    #### 使用nmap对该网络中的所有主机进行ping扫描,以探测主机存活性。扫描过程中使用了TCP SYN扫描、ICMP echo Request来探测主机存活
    
    1.   ```
         nmap -sP CIDR地址
  2. ```
    nmap -sn CIDR地址

    
    3.   上面两种用法结果类似
    
    
    
    ## nmap主机发现的结果输出
    
    1.   ```bash
         nmap -sn CIDR地址 -oX test.xml
  3. 对该网络中的所有主机进行ping扫描,以探测主机存活性

  4. 同时将结果输出到test.xml文件中,以便后续使用

实际场景下的Nmap端口探测技巧

  1. 渗透测试时,一般是对某个或某个范围内的服务进行探测,而不是全扫,否则费力不讨好,全端口探测会对服务器造成较大压力

对某个端口或某个范围内的端口探测

  1. ```bash
    nmap -p80 scanme.nmap.org
    nmap -p80,135 scanme.nmap.org
    nmap -p1-100 scanme.nmap.org
    nmap -p- scanme.nmap.org

    
    2.   使用逗号去分隔不同的端口
    
    3.   使用短横线 - 去链接端口范围
    
    4.   -p- 端口参数后面不加具体数字,表示对所有端口进行探测
    
    ### 指定协议探测端口
    
    1.   ```
         nmap -p T:25,U:53 scanme.nmap.org
  2. T:25 指定TCP25号端口

  3. U:53 指定UDP53号端口