title: nmap
tags: nmap
abbrlink: 96512c85
date: 2022-07-28 16:59:38

端口扫描之王----------NMAP

  • Nmap是一款非常强大的实用工具,可用于:检测活在网络上的主机(主机发现)检测主机上开放的端口(端口发现或枚举)检测到相应的端口(服务发现)的软件和版本检测操作系统,硬件地址,以及软件版本检测脆弱性的漏洞(Nmap的脚本)Nmap是一个非常普遍的工具,它有命令行界面和图形用户界面。本人包括以下方面的内容:介绍Nmap扫描中的重要参数操作系统检测Nmap使用教程Nmap使用不同的技术来执行扫描,包括:TCP的connect()扫描,TCP反向的ident扫描,FTP反弹扫描等。所有这些扫描的类型有自己的优点和缺点,我们接下来将讨论这些问题。 Nmap的使用取决于目标主机,因为有一个简单的(基本)扫描和预先扫描之间的差异。我们需要使用一些先进的技术来绕过防火墙和入侵检测/防御系统,以获得正确的结果。

主机探测

扫描单个主机

nmap 192.168.1.2

扫描整个子网,命令如下:

nmap 192.168.1.1/24

扫描多个目标,命令如下:

nmap 192.168.1.2 192.168.1.5

扫描一个范围内的目标,如下:

nmap 192.168.1.1-100 (扫描IP地址为192.168.1.1-192.168.1.100内的所有主机)

如果你有一个ip地址列表,将这个保存为一个txt文件,和namp在同一目录下,扫描这个txt内的所有主机,命令如下:

nmap -iL target.txt

如果你想看到你扫描的所有主机的列表,用以下命令:

nmap -sL 192.168.1.1/24

扫描除过某一个ip外的所有子网主机,命令:

nmap 192.168.1.1/24 -exclude 192.168.1.1

扫描除过某一个文件中的ip外的子网主机命令

nmap 192.168.1.1/24 -excludefile xxx.txt(xxx.txt中的文件将会从扫描的主机中排除)

端口扫描

常用命令:

nmap -F -sT -v nmap.org

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

扫描端口状态

  • Open:端口处于开放状态,例如:当nmap使用TCP SYN对目标主机某一范围的端口进行扫描时,我们知道 TCP SYN报文是TCP建立连接的第一步,所以,如果目标主机返回SYN+ACK的报文,我们就认为此端口开放了并且使用了TCP服务。

  • Closed:端口处于关闭状态。例如:TCP SYN类型的扫描,如果返回RST类型的报文,则端口处于管理状态。这里我们值得注意的是关闭的端口也是可访问的,只是没有上层的服务在监听这个端口,而且,只是在我们扫描的这个时刻为关闭,当我们在另一个时间段进行扫描的时候,这些关闭的端口可能会处于open的状态。

  • Filtered(过滤的):由于报文无法到达指定的端口,nmap不能够决定端口的开放状态,这主要是由于网络或者主机安装了一些防火墙所导致的。当nmap收到icmp报文主机不可达报文(例如:type为3,code为13(communication administratively prohibit)报文)或者目标主机无应答,常常会将目标主机的状态设置为filtered。

  • Unfiltered(未被过滤的):当nmap不能确定端口是否开放的时候所打上的状态,这种状态和filtered的区别在于:unfiltered的端口能被nmap访问,但是nmap根据返回的报文无法确定端口的开放状态,而filtered的端口直接就没就没能够被nmap访问。端口被定义为Unfilterd只会发生在TCP ack扫描类型时当返回RST的报文。而端口被定义为filtered 状态的原因是是报文被防火墙设备,路由器规则,或者防火墙软件拦截,无法送达到端口,这通常表现为发送NMAP的主机收到ICMP报错报文,如:TYPE为3,code为13的报文(通信被认为的禁止 communication administratively prohibited),或者主机通过多次重复发送没有收到任何回应)。

  • Open|filtered状态,这种状态主要是nmap无法区别端口处于open状态还是filtered状态。这种状态只会出现在open端口对报文不做回应的扫描类型中,如:udp,ip protocol ,TCP null,fin,和xmas扫描类型。

  • Closed|filtered状态,这种状态主要出现在nmap无法区分端口处于closed还是filtered时。此状态只会出现在IP ID idle scan(这个类型我现在也不太理解,过段时间进行总结一些)中。

TCP扫描(-sT)

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

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

  • Client端发送SYN

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

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

  • Client端主动断开连接。

SYN扫描(-sS)

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

端口扫描

使用UDP ping探测主机:

nmap -PU 192.168.1.0/24

服务版本探测

nmap -sV 192.168.1.1

精准地确认端口上运行的服务

nmap -sV --script unusual-port 192.168.1.1

探测目标主机的操作系统

  • OS操作系统类型的探测
nmap -O 192.168.1.19
  • osscan-guess 猜测匹配操作系统 (猜测认为最接近目标的匹配操作系统类型。)
nmap -O --osscan-guess 192.168.1.180
  • 如果远程主机有防火墙,IDS和IPS系统,你可以使用-PN命令来确保不ping远程主机,因为有时候防火墙会阻止掉ping请求.-PN命令告诉Nmap不用ping远程主机。使用-PN参数可以绕过PING命令,但是不影响主机的系统的发现。
nmap -O -PN 192.168.1.180
  • 全面扫描
nmap -A 192.168.1.19

nmap 信息收集脚本

对目标进行IP反查

nmap -sn --script hostmap-ip2hosts www.hao123.com

对目标DNS信息的收集

nmap --script dns-brute www.test.com
nmap --script dns-brute dns-brute.threads=10 www.test.com

了解目标系统的详细信息

nmap -p 445 192.168.23.1 --script membase-http-info

nmap 信息收集

检查打印服务漏洞

nmap --script smb-security-mode.nse -p 445 192.168.21.3

扫描目标的xss漏洞

nmap -p80 --script http-stored-xss.nse www.test.com

扫描目标的SQL注入漏洞

nmap -p8001 --script http-sql-injection.nse 192.168.0.200

对目标地址进行HTTP头信息探测

nmap -p 80 --script=http-headers test.com

爬行web目录结构

nmap -p 80 --script=http-sitemap-generator www.test.com

Snmp服务获取目标正在运行着的服务,通过Snmp服务对目标系统的服务或账户进行列举

nmap -sU -p 161 --script=snmp-win32-services 192.168.87.129

密码破解

暴力破解VNC

nmap --script vnc-brute --script-args brute.guesses=6,brute.emptypass=true,userdb=/root/dictionary/user.txt,brute.useraspass=true,passdb=/root/dictionary/pass.txt,brute.retries=3,brute.threads=2,brute.delay=3 42.96.170.128

破解telnet

nmap -p 23 --script telnet-brute --script-args userdb=myusers.lst,passdb=mypwds.lst --script-args telnet-brute.timeout=8s 192.168.1.1

ftp弱口令暴力破解

nmap --script ftp-brute --script-args brute.emptypass=true,ftp-brute.timeout=30,userdb=/root/dirtionary/usernames.txt,brute.useraspass=true,passdb=/root/dirtionary/passwords.txt,brute.threads=3,brute.delay=6 192.168.1.1

漏洞探测

扫描系统漏洞

nmap --script vuln 192.168.1.1

IIS 短文件泄露

nmap -p 8080 --script http-iis-short-name-brute 192.168.1.1

拒绝服务

nmap --max-parallelism 800--script http-slowloris www.xxxxx.com

验证http 中开启了put 方法

nmap --script http-put --script-args http-put.url=/uploads/testput.txt,http-put.file=/root/put.txt 218.19.141.16

验证MySQL 匿名访问

nmap --script mysql-empty-password 203.195.139.153

防火墙躲避

-f 分片绕过
-D 使用诱饵隐蔽扫描

NMAP -D 1.1.1.1,222.222.222.222 www.xxxxx.com

--source-port 源端口欺骗

高级用法

侦测服务版本

nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txt

扫做系统扫描

nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txt

系统和服务检测

nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect-iL LiveHosts.txt

修改默认MTU 大小,但必须为8 的倍数(8,16,24,32等等)

nmap --mtu 24

生成随机数量的欺骗

nmap -D RND:10 [target]

手动指定欺骗使用的IP

nmap -D decoy1,decoy2,decoy3 etc.

僵尸网络扫描,首先需要找到僵尸网络的IP

nmap -sI [Zombie IP] [Target IP]

指定源端口号

nmap --source-port 80 IP

在每个扫描数据包后追加随机数量的数据

nmap --data-length 25IP

MAC 地址欺骗,可以生成不同主机的MAC 地址

nmap --spoof-mac Dell/Apple/3Com IP

导出格式

-oS (ScRipT KIdd|3oUTpuT)保存扫描结果输出。
-oN 按照人们阅读的格式记录屏幕上的输出,如果是在扫描多台机器,则该选项很有用。
-oX 以xml格式向指定的文件记录信息
-oG 以一种易于检索的格式记录信息,即每台主机都以单独的行来记录所有的端口和0s信息。-oS 把输出进行傻瓜型排版
-oA 导出所有格式。普通格式(-oN)、XML格式(-oX)和易于检索的格式(-oG)jilu xinxi

思维导图