主动扫描-Nmap

时间:2024-02-18 09:35:24

仅供个人学习!

主动扫描

  相对于被动扫描而言,主动扫描的范围要小得多。主动扫描一般都是针对目标发送特制的数据包,然后根据目标的反应来获得一些信息。这些信息主要包括目标主机是否在线、目标主机的指定端口是否开放、目标主机的操作系统、目标主机上运行的服务等。

Namp

  攻击只是Nmap的副业,扫描才是Nmap的主要功能。

  2009年7月17日,开源网络安全扫描工具Nmap正式发布了5.00版,这是自1997年以来最重要的发布,代表着Nmap从简单的网络端口扫描软件变身为全方面的安全工具组件。

  目前的Nmap已经具备了主机发现功能、端口扫描功能、服务及版本检测功能、操作系统检测功能。另外除了这些基本功能之外,Nmap还可以实现一些高级的审计技术,例如伪造发起扫描端的身份、进行隐蔽的扫描、规避目标的防御设备(例如防火墙)、对系统进行安全漏洞检测并提供完善的报告选项等在后来的不断发展中,随着Nmap强大的脚本引擎NSE的推出,任何人都可以自己向Nmap中添加新的功能模块。

  使用Nmap对一台计算机进行审计的话,最终可以获得如下的目标信息:
目标主机是否在线。
目标主机所在网络的结构。
目标主机上开放的端口,例如80端口、135端口、443端口等。
目标主机所使用的操作系统,例如Windows 7、Windows10、Linux 2.6.18、Android 4.1.2等。

目标主机上所运行的服务以及版本,例如Apache httpd 2.2.14、OpenSSH 5.3p1 Debian 3ubuntu4等。

目标主机上所存在的漏洞,例如弱口令、ms08_067、ms10_054等

  Nmap对目标的在线状态、端口开放情况、操作系统、运行的服务和软件进行扫描。主动扫描的工具其实很多,在Kali Linux 2中就提供了多达数十种,但是最为优秀的扫描工具却非Nmap莫属。

  Nmap功能极为强大,提供了数十种的扫描技术。新版本的Nmap还实现了NSE脚本编写,极大地扩充了Nmap的功能。这些功能极为强大而实用,作为和Metasploit相并列的渗透行业两大神器之一。

  Nmap官网参考指南:https://nmap.org/book/man.html

Namp参数解释

  • 语法结构:nmap [Scan Type(s)] [Options] {target specification}
  • 端口状态介绍
    • open:确定端口开放,可达
    • closed :关闭的端口对于nmap也是可访问的, 它接收nmap探测报文并作出响应。但没有应用程序在其上监听。
    • filtered :由于包过滤阻止探测报文到达端口,Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由规则 或者主机上的软件防火墙。
    • unfiltered :未被过滤状态意味着端口可访问,但是Nmap无法确定它是开放还是关闭。 只有用于映射防火墙规则集的 ACK 扫描才会把端口分类到这个状态。
    • open | filtered :无法确定端口是开放还是被过滤, 开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何反应。UDP,IP协议,FIN, Null 等扫描会引起。
    • closed|filtered:(关闭或者被过滤的):无法确定端口是关闭的还是被过滤的
  • 扫描目标格式
    • 示例: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
    • -iL:从文件中加载目标
    • -iR:随机扫描
    • --exclude <host or network>:排除网段或主机地址
    • --excledefile:排除文件中的地址
  • 主机发现
    • -sL:列出需要扫描的目标,不扫描
    • -sn:只做ping扫描,不做端口扫描
    • -Pn:跳过主机发现,视所有主机都在线
    • -PS/PA/PU/PY[portlist]:基于TCP(SYN、ACK)、UDP、SCTP的指定端口的主机发现
    • -PE/PP/PM:基于ICMP的echo、timestamp、network request的主机发现
    • -PO[Protocol list]:基于IP协议字段的ping扫描
    • -n/-R: -n表示不对目标最DNS解析,-R表示进行DNS解析,缺省为必要时候进行DNS解析
    • --dns-servers <serv1[,serv2],...>: 指定DNS 服务器
    • --system-dns:调用系统的DNS服务器
    • --traceroute:显示追踪到目标的路径
  • 扫描技术
    • -sS/sT/sA/sW/sM:TCP扫描
      • S是SYN扫描,半连接扫描,nmap只发送SYN报文,通过服务器是否响应SYN+ACK来判断对应端口是否开放
      • T是全连接扫描会和服务器建立完整的三次握手,效率低
      • A发送ACK报文,通过服务器响应来判断是否开放,有的服务器不开会回复ICMP端口不可达,当回复RST时表示可能被拦截或者端口开放,不是一个准确的判断条件
      • W 是窗口扫描,发出的报文和ACK一样,利用的是在某些系统中如果端口开放,收到ACK包后会响应一个窗口非0的RST包
      • M是Maimon扫描,使用发现者的名字命名。其原理是向目标服务器发送FIN/ACK 报文,在某些系统中如果端口开放则会丢弃该报文不做响应,如果端口关闭则回复RST或者ICMP,Nmap可借此判断服务器端口的开放情况。不准
    • -sU:UDP扫描,某些系统如果UDP端口不开放会回复ICMP差错报文(这也是Linux系统中traceroute的实现原理)。Nmap UDP端口扫描的强大之处在于它会针对知名端口构造初始交互报文,比如会针对UDP 500构造一个主模式协商的IKE报文
    • -sN/sF/sX:特定TCP标志位的扫描,N是空标志位;F是FIN置位;X是Xmas扫描将FIN、PSH、URG同时置位。收到RST说明端口关闭,无响应说明被过滤或者端口开放,不准。
    • --scanflags <flags>:实现上同上面几种类似,可以让用户自定义TCP标志位。
    • -sI <zombie host[:probeport]>: Idle扫描需要一台没有流量的僵尸主机,这种扫描的实现原理是在一定的时间里,同一台主机发出的IP数据报文其ip头中的identification字段是累加的。探测分为3步:1、Nmap主机向僵尸机发包,通过僵尸机的响应包探测其ID;2、Nmap主机伪造僵尸机源地址向服务器的特定端口发送SYN包;3、Nmap主机再次探测僵尸机的ip.id。如果目标服务器端口开放,则必然会向僵尸机发送SYN/ACK,由于莫名其妙收到一个SYN/ACK 报文,僵尸机会向目标服务器发送RST报文,该报文的ip.id 是第一步+1,则第三步Nmap主机探测到的ip.id应该是第一步+2,说明目标主机端口开放。反之,如果目标主机端口未开放,则收到第二步的报文后会向僵尸机回复RST或者直接丢弃该报文不响应,无论哪种情况,都不会触发僵尸机发包,进而僵尸机的ip.id不会变化,第三步Nmap探测到的id应该是第一步+1.
    • -sY/sZ:SCTP协议INIT或cookie-echo扫描
    • -sO:基于IP协议的扫描,通过变换IP报文头中的Protocol值来对服务器进行探测
    • -b <FTP relay host>::FTP反弹扫描,借助FTP特性,通过FTP服务器连接想要扫描的主机实现隐身的目的
  • 端口相关参数
    • -p:指定端口扫描范围,如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
    • --exclude-ports <port ranges>: 排除端口
    • -F:扫描比缺省少的端口(缺省1000,加了-F100)
    • -r:顺序扫描端口,缺省是随机分组扫描
    • --top-ports <number>:按top排序扫描知名端口
    • --port-ratio <ratio>: 按比例扫描知名端口,值在0-1之间,越小扫的越多
  • 系统/版本探测
    • -sV:探测开放的端口的系统/服务信息
    • --version-intensity <level>:设置版本检测的详程度级别,0-9,越高越详细
    • --version-light:输出最可能的版本信息,缺省是2
    • --version-all:使用所有的探测条件进行版本/系统探测
    • --version-trace:打印详细的版本扫描过程
  • 脚本扫描
    • --script=<Lua scripts>:指定脚本名称
    • --script-args=<n1=v1,[n2=v2,...]>:为脚本指定参数
    • --script-help=<Lua scripts>: 查看脚本帮助信息
    • --script-updatedb:更新脚本数据库
  • 系统探测
    • -O:激活系统探测
    • --osscan-limit:只对开放端口的有效主机进行系统探测
    • --osscan-guess:推测系统信息
  • 其他
    • -T<0-5>:时间模板,越大速度越快
    • -6:使能IPV6探测
    • -A:使能系统探测、版本检测、脚本扫描、路由追踪
    • -V:打印版本号
    • -v:增加输出的详细程度

一些用法

nmap --iflist(查看本地路由与接口)

nmap -e 08:00:27:47:63:E6 103.10.87.148(指定mac和ip地址)

nmap -T4 -F -n -Pn -D 192.168.1.100,192.168.1.101,192.168.1.102,ME192.168.1.103(地址诱骗)

nmap -sV --spoof-mac 08:00:27:47:63:E6 103.10.87.148(虚假mac地址)

nmap -sV --source-port 900 103.10.87.148 --source-port(指定源端口)

nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16(扫描思科路由器)

nmap -sU -p69 -nvv 192.168.1.253(扫描路由器的ftp协议)

nmap -O -F -n 102.10.87.148(-F快速扫描)

nmap -iR 100000 -sS -PS80 -p 445 -oG nmap.txt(随机产生10万个ip地址,对其445端口进行扫描,扫描结果以greppable(可用grep命令提取)格式输出到nmap.txt)

nmap --script=brute 102.10.87.148(暴力破解)

 

相关详解

https://blog.csdn.net/qq_26090065/article/details/80285088

https://blog.csdn.net/qq_41880069/article/details/82792896