nmap学习

发布时间 2023-04-28 14:57:21作者: kalixcn

Nmap概述

Namp是一个免费的开源网络扫描和嗅探工具,可以用来扫描计算机上开放的端口,确定哪些服务运行在那些端口,并且推断出计算机运行的操作系统。利用该工具,可以评估网络基础的安全性。
Nmap的四项功能:

  • 主机发现
  • 端口扫描
  • 版本侦测
  • 操作系统探测

工作原理:

  1. 发送探针并分析响应包的特征。(探针(Probe)是基于协议功能和特性,使用特定端口和数据载荷所构建的数据包)。
  2. 指纹信息就是目标主机响应包的特征信息,如TCP标志位、ARP应答报文、ICMP应答报文等等,通过这些指纹信息可以判断主机的状态和端口状态。

在Linux系统中,Nmap工具默认安装在/usr/share/nmap目录下,脚本默认在/usr/share/nmap/scripts.

nmap -V    #查看nmap版本信息

#输出*********************************
# map version 7.93 ( https://nmap.org )
#版本号
# Platform: x86_64-pc-linux-gnu
#操作系统
# Compiled with: liblua-5.3.6 openssl-3.0.7 libssh2-1.10.0 libz-1.2.13 libpcre-8.39 nmap-libpcap-1.7.3 nmap-libdnet-1.12 ipv6
#编译库
# Compiled without:
# Available nsock engines: epoll poll select    
#可以套接字引擎                                     

--dns-servers <serv1,[serv2],...>:指定特定的NDS服务器地址。
--system-dns:使用操作系统的DNS解析器。
-sL(Scan List):列出扫描的目标
-iL(Input from List)<inputfilename>:指定主机或网络列表文件
--resolve-all:指定扫描主机中的所有IP地址

实例:

nmap --dns-servers 114.114.114.114 www.baidu.com

nmap --system-dns www.baidu.com

#扫描连续主机IP地址,如扫描10.10.1.100-10.10.1.200

#cat ip.txt
# 10.10.1.132
# 10.10.1.135
# 10.10.1.168
nmap -iL ip.txt    #对指定文件中的IP进行扫描
nmap -iL ip.txt -sL   #

nmap --resolve-all www.baidu.com  #扫描主机www.baidu.com中的所有IP地址

--exclude <host1,host2..>:指定排除的主机
--excludefile <exclude_file>:指定排除的主机文件列表
#扫描192.168.198.0/24网络中所有主机,但不扫描192.169.0-100范围内的主机
nmap 192.169.198.0/24 --exclude 192.168.198.1-100 -sL

--iR <num hosts>:指定随机扫描的主机数
#随机扫描5个主机并列出来
nmap -iR 5 -sL

-A:实施全部扫描,探测目标主机的操作系统和版本信息

渗透步骤:

  1. 发现主机
    在Nmap中,可以通过不同的方式来发现主机,如IP发现,ICMP发现、TCP发现和UDP发现。

    • IP发现
      -PO <protocol list>:使用IP数据包探测目标主机是否开启,其中,protocol list是协议编号列表。如17(UDP)、1(ICMP)、6(TCP)、4(IP)。
      -sn:实施ping扫描,禁止端口扫描
      -PE:实施ICMP Echo探测请求发现。其中P是ping的首字母,E是ICMP Echo的首字母。
      -PP:ICMP时间戳Ping扫描。
      -PM:进行ICMP地址掩码Ping扫描。
      -PS<portlist>:实施TCP SYN Ping扫描
      -PA<portlist>:实施TCP ACK扫描
      -PU<portlist>:实施UDP Ping扫描
      -PR:实施ARP Ping扫描
      -R:对IP地址进行反向域名解析
      -n:禁止域名解析
      --traceroute:实施路由追踪
      --packet-trace:显示包发送
      如果目标主机禁用Ping发现,则可以跳过主机发现,直接进行其他扫描,使用这种方法可以很好地规避防火墙
      -P0:跳过主机发现
      -Pn:跳过主机发现
  2. 扫描端口
    -p:指定扫描端口
    实例:

    扫描UDP的53和137端口,扫描TCP的25和80端口
    nmap  -Pn -sU -sS U:53,137,T:25,80
    

    --exclude-ports<portranges>:指定排除端口
    namp -r <target>:实施顺序扫描

    -sT:TCP全连接扫描
    -sS:SYN半连接扫描

    隐蔽扫描:

    nmap 10.10.10.129 -p 80 -sF  # Fin扫描
    nmap 10.10.10.129 -p 80 -sN  # Null扫描(所有flags都为0的TCP包)
    nmap 10.10.129 -p 80 -sX  # Xmas扫描(flags的FIN、URG、PUSH都为1的包)
    
  3. 服务识别

nmap 10.10.10.129 -p -sV
  1. 系统识别
nmap 10.10.10.129 -O
  1. 扫描结果导出
    1. 导出为文本格式
    nmap 10.10.10.129 -oN result.txt
    
    1. 导出为xml格式
    nmap 10.10.10.129 -oX result.xml
    

6. 逃避防火墙和IDS检测
--source-port <portnum>:指定信任源端口
-g <portnum>:指定信任的源端口

实例:使用被信任的源端口67对目标实施主机发现

nmap -sn -PS --source-port 67 10.10.10.129

img

--badsum:使用一个伪TCP/UDP/SCTP校验值发送探测数据包。
--adler32:用于指定SCTP校验值。

nmap --badsum -sn 10.10.10.129

数据载荷指发送的数据报中所包含的数据,通过添加数据载荷伪造成有意义的数据包,逃避防火墙或者IDS检测。
--data-length<num>:指定数据包长度的随机数
--date-string:指定一个文本值的数据

img

报文分段是将一个数据包分成许多更小的分片,来逃避防火墙或者IDS检测。
-f<var>:设置分片大小
--mtu<val>:设置最大传输单元值

--ttl<val>:设置一个TTL值,其中,TTL值的范围为0~255。

脚本使用

Nmap脚本主要分为以下几类:
auth:负责处理认证证书(绕过认证)的脚本,如enum-users。
broadcast:在局域网内探测更多的服务开启情况脚本。
brute:用来暴力破解的脚本,如http-brute和snmp-brute。
discovery:对网络进行扫描,如SMB枚举和SNMP查询。
dos:用来进行拒绝访问工具。
fuzzer:探测主机潜在漏洞。
vuln:负责检查目标主机是否有常见的漏洞
malware:探测目标主机是否开启后门或者感染病毒。
intrusive:入侵性脚本。
safe:安全类型

更新脚本

nmap --script-updatedb

--script-help=<Lus scripts>:查看脚本帮助信息
img

实例:
使用ftp-anon脚本对目标实施扫描

nmap -p 21 --script=ftp-anon 10.10.10.129

使用vuln类脚本实施扫描

nmap --script=vuln 10.10.10.129

指定脚本参数,如果不指定将使用默认参数
--script-args-file=filename:指定脚本参数文件列表
--script-args=<n1..n2>:指定参数
实例:使用ftp-brute对服务进行暴力破解

nmap -p 21 --script=ftp-brute --script-args userdb=user.txt,passdb=password.txt

扫描整个局域网中活动的主机

nmap -sL --script=targets-sniffer --script-args=newtargets,targets-sniffer.timeout=4s,targets-sniffer.iface=eth0 

监听广播包

nmap --script=broadcast-listener -e eth0 

探测防火墙

nmap --script=firewalk --traceroute www.baidu.com

img

获取路由器跟踪位置

nmap --traceroute --script=traceroute-geolocation www.baidu.com

img

广播ping发现主机

nmap -e eth0 --script=broadcast-ping <target > [--ttl <ttl>][--data-length]<payload_length>

探测IP转发

 nmap -sn <target> --script ip-forwarding --script-args='target=www.example.com'

使用字典暴力爆破子域名

nmap --script=dns-brute baidu.com

img

探测基本认证信息

nmap --script http-auth 10.10.22.1

探测默认账号

nmap --script=http-default-accounts 10.10.11.1

探测使用方法

nmap --script=http-methods 10.10.10.1

获取HTTP注释信息

nmap -p 80 --script=http-comments-displayer.nse 10.10.10.129

img

获取邮件地址

nmap --script=http-grep -p 80 10.10.10.129

img

查看http是否开启TRACE方法

nmap --script=http-trace -p 80 10.10.10.129

探测目标主机Telnet服务是否支持加密

nmap -p 23 --script=telnet-encrytion 10.10.10.129

破解Telnet服务密码

nmap -p 23 --script=telnet-brute 10.10.10.129

探测SSH服务
查看SSH服务的密钥信息

nmap --script=ssh-hostkey --script-args=ssh_hostkey=full 10.10.10.129

查看目标主机支持的SSH2协议算法

nmap --script=ssh2-enum-algos 10.10.10.129

img

检查MySQL空密码

nmap --script=mysql-empty-password 10.10.10.129  

暴力破解mysql用户密码

nmap --script=mysql-brute -p 3306 10.10.10.129

枚举MySQL数据库用户信息

nmap --script=mysql-enum -p 3306 10.10.10.129

SQL Server的超级用户sa,使用端口为1433
破解SQL Server数据库的用户密码

nmap -p 1433 --script=ms-sql-info 10.10.10.129
nmap -p 1433 --script=ms-sql-brute 10.10.10.129

查看ftp是否允许匿名登录

nmap --script=ftp-anon 10.10.10.129