欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2020-09-29

程序员文章站 2022-07-12 19:00:02
...

Nmap(Network mapper)命令详解

一、Nmap工作原理

Nmap使用TCP/IP协议栈指纹准确地判断目标主机的操作系统类型。

Nmap TCP/IP 协议栈指纹:

T1	发送TCP数据包(Flag=SYN)到开放TCP端口
T2	发送一个空的TCP数据包到开放的TCP端口
T3	发送TCP数据包(Flag=SYN,URG,PSH,FIN)到开放的TCP端口
T4	发送TCP数据包(Flag=ACk)到开放的TCP端口
T5	发送TCP数据包(Flag=SYN)到关闭的TCP端口
T6	发送TCP数据包(Flag=ACk)到开放的TCP端口
T7	发送TCP数据包(Flag=URG,PSH,FIN)到开放的TCP端口

Nmap对主机进行一系列的测试,利用测试结果建立相应主机的Nmap指纹,然后Nmap会对指纹进行匹配,最终住处相应的结果。

二、语法

Nmap 【空格】 【选项|多选项|协议】 【空格】【目标】

所有选项和命令以及选项参数都是用空格分割,有时候选项和参数可以不用空格分隔,如-p80

三、Nmap命令

1、主机发现

nmap -A 【目标】 #全面扫描

nmap 192.168.1.1-100 #扫描指定网段

nmap -sP #ping扫描

nmap -P0 【协议1,协议2】 #无ping扫描(数字0,而不是字母O),无ping扫描可以在目标主机禁ping时使用。

Nmap支持的协议编号:
①TCP:对应协议编号6
②ICMP:对应协议编号1
③IGMP:对应协议编号2
④UDP:对应协议编号17

nmap -PS #TCP SYN ping扫描,用于目标防火墙拦截ACK包

nmap -PA #TCP ACK ping扫描,用于目标防火墙拦截SYN包

nmap -PU #UDP ping扫描,发送一个空的UDP包,默认端口40125.如果目标主机响应则返回ICMP端口不可达错误,如果目标主机不存活则返回各种ICMP错误信息

nmap -PE;-PP;-PM #ICMP ping types 扫描。Nmap发送一个ICMP type8(回显请求)报文到目标IP,从运行的主机得到一个type 0(回显响应)报文。-PE选项简单来说是通过向目标发送ICMP Echo数据包来探测主机是否在线,因为许多主机的防火墙禁止这些报文,所以仅仅ICMP扫描对于互联网上的目标通常是不够的。但对于系统管理员监视一个内部往来,它可能是一个有效的途径。-PE打开回显请求功能。-PP选项是ICMP时间戳ping扫描,虽然大多数防火墙配置不允许ICMP Echo请求,但由于配置不当可能回复ICMP时间戳请求,所以可以使用ICMP时间戳来确定主机是否存活。-PM选项可以进行ICMP地址掩码Ping扫描。这种扫描会试图用备选的ICMP登机ping指定主机,通常有不错的穿透防火墙的效果。

nmap -PR #ARP ping扫描,在内网中最高效

nmap -n #禁止DNS反向解析,如果单纯扫描一段IP,该选项可以大幅度减少目标主机响应时间

nmap -R -sL *.172.156.75/24 #反向解析域名,该选项多用于绑定域名的服务器主机上。例如在扫描一个C段的时候,我们可以更清楚在那一段IP是哪个存在哪些网站。

nmap -system-dns #使用系统域名解析器

nmap -sL #列表扫描

nmap -traceroute #路由跟踪

nmap -PY #SCTP INIT ping扫描

nmap -6 #扫描IPv6地址

2、端口扫描

Nmap 6个端口状态:

OPEN:开放
Close:关闭
Filtered:被过滤,通常被防火墙或路由规则拦截,也有可能因为网络堵塞造成
Unfiltered:未过滤,可以访问,但无法判断开启还是关闭。换一种扫描方式,进一步确认
Openfiltered:开放还是过滤的。换一种扫描方式,进一步确认
Closefiltered:不确定是关闭的还是被过滤的。只出现在IPID idle扫描中

-T #时序选项,通常配合-F选项。0~5选项,速度由快到慢

-T0	非常慢的扫描,用于IDS逃避
-T1	缓慢的扫描,用于IDS逃避
-T2	降低速度以降低对带宽的消耗,不常用
-T3	默认,根据目标反应自动调整时间
-T4	快速扫描,常用,需要在很好的网络环境下进行,请求可能淹没目标
-T5	极速扫描,牺牲准确度来提高速度

-F #快速扫描,只扫描有效的端口。在nmap-services包含了默认扫描的端口。用–datadir指定自己的nmap-services文件。

-r #排序

-top-ports #开发概率最高的1000个TCP端口(nmap -top-ports 100 192.168.1.1 扫描100个高概率端口)

-port-ratio #与-top-ports类似

-p #端口扫描顺序。注意,既扫描TCP又扫描UDP,必须指定-sU以及至少一个TCP扫描类型(-sS,-sF,-sT)

-sS #TCP SYN扫描。SYN扫描比较隐蔽,一般很难被防火墙发现,因为不会进行TCP连接。通常称为半开放扫描,因为不会完全的TCP连接即3次握手。(原理:目标端口开放,Nmap向目标主机发送一个SYN包,请求连接,目标主机接收后响应一个SYN/ACK包,当Nmap收到响应后,向目标发送一个RST代替ACK包,连接结束,此时3次握手并没有完成)(RST:异常连接终止)

-sT #TCP连接扫描

-sU #UDP扫描

-sN;-sF;-sX #隐蔽扫描。-sN是NULL扫描,端口关闭响应一个RST包,端口开放,不响应任何信息。-sF是FIN扫描,有更好的穿透效果,端口关闭响应一个RST包,端口开放,不响应任何信息。-sX是Xmas扫描,数据包FIN、PSH、URG标记位置打开,即标志为1,根据RFC 793规定如果目标主机端口开放则会响应一个RST包。如果系统不遵循RFC 793,不管端口开放还是关闭,都会响应RST。(PSH表示有 DATA数据传输,URG表示紧急指针有效)(RFC 793是IETF制定的传输控制协议)

-sM #Maimon扫描。探测报文为FIN/ACK。与上一致

-sA #TCP ACK扫描。缺点:不能确定端口是否开放还是被过滤。

-sW #TCP窗口扫描

–scanflags URGACKPSHRSTSYNFIN #自定义TCP扫描。标志位之间没有空格,默认SYN扫描。

-sl #空闲扫描。不使用自己的IP发送数据包。利用不活跃的僵尸主机反弹给攻击者一个旁通信道,从而进行端口扫描,IDS会把僵尸主机当作攻击者。nmap -sl www.0day.co:80 192.168.1.1

-sO #IP协议扫描(大写字母O)

-b #FTP Bounce扫描。很少被支持,用来躲避防火墙。

端口:断口

3、指纹识别

-sV #版本探测。与-A配合使用更佳

–allports #全端口版本探测

–version-intensity #设置扫描强度。强度0-9,默认7。0最低,9最强

–version-light #轻量级扫描,强度2的快捷方式

–version-all #重量级扫描,强度9的快捷方式

–version-trace #获取详细版本信息

-sR #RCP扫描

-O #操作系统探测。基于TCP/IP协议栈fingerprinting。

–osscan-limit #对指定目标进行操作系统检测,需要配合-O或者-A

–osscan-guess;–fuzzy #推测系统识别,两个选项不一起使用

4、调整报文时间/并行度

–min-hostgroup #调整并行扫描组的大小

–max-hostgroup

–min-parallelism #调整探测报文的并行度。-max设为1,防止对同一主机同一时间多次发送报文

–max-parallelism

—min-rtt-timeout #调整探测报文超时。一般情况下100-1000毫秒。要加单位ms

–max-rtt-timeout

–initial-rtt-timeout

–host-timeout #放弃低速目标主机

–scan-delay #调整探测报文的时间间隔

–max-scan-delay

5、防火墙/IDS逃逸

-f #报文分段

–mtu #指定偏移大小,偏移量必须是8的倍数(MTU最大传输单元)

-D #IP欺骗

语法:nmap -D 【ip1,ip2……|RND:num】 【目标】
	 RND随机生成num个诱饵主机地址
注意:在版本检测或TCP扫描时诱饵无效。
	 诱饵主机必须处于工作状态,否则会导致目标主机的SYN洪水攻击

-sl #源地址欺骗

–source-port #源端口欺骗。同-g

–data-length #指定发包长度。通常TCP包40个字节,ICMP Echo包28个字节,附加随机数据规避防火墙

–randomize-hosts #目标主机随机排序

–spoof-mac #MAC地址欺骗。数字0随机生成一个MAC地址,Vendor Name指定厂商,MAC Address手动指定

6、信息收集

–script 【以下命令】

ip-geolocation-* #IP信息收集。注意CDN。获取IP地址,开放端口等

whois #who is查询。

http-email-harvest #收集email信息

hostmap-ip2hosts #IP反查。获取同IP域名

dns-brute #查询目标域名所有地址,基于暴力**。默认线程5,dns-brute.threads=10,设置10线程。dns-brute.hostlist指定列表

membase-http-info #检索系统信息

smb-security-mode.nse #后台打印机服务漏洞,需要收到指定端口

smb-check-vulns.nse #SMB漏洞扫描,可以使用U:或T:配合

http-stored-xss.nse #扫描目标网站的xss漏洞

http-sql-injection #扫描目标网站的sql注入漏洞

snmp-win32-services #通过snmp列举windows服务

snmp-win32-users #通过snmp列举windows账户

dns-brute #枚举dns服务器的主机名、

nmap --script dns-brute --script-args dns-brute.domain=baidu.com	#子域名枚举
dns-brute.threads=线程数
dns-brute.hostlist=./hostfile.txt指定需要枚举的列表

http-headers/http-sitemap-generator #http信息收集

nmap -sV -p 80 baidu.com	对http版本进行探测
nmap -p 80 --script=http-headers baidu.com 进行HTTP头信息探测
nmap -p 80 --script=http-sitemap-generator	爬行web目录结构

ssl-enum-ciphers #枚举SSL**

ssh-hostkey #拆开SSH服务的**信息

nmap -p 22 --script ssh-hostkey --script-args ssh_hostkey=full 127.0.0.1
ssh_hostkey**输出格式full、bubble、visual、all。

7、数据库渗透测试

nmap -p3306 --script 【选项】

mysql-databases #列举数据库

nmap -p3306 --script mysql-databases --script-args mysqluser=root,mysqlpass 192.168.1.1

mysql-variables #列举mysql变量

mysql-empty-password #检查空密码

mysql-brute #审计密码

mysql-audit #审计安全配置

oracle-brute #审计Oracle密码

ms-sql-brute #审计msSQL密码

ms-sql-empty-password #检查mssQL空密码

ms-sql-tables #读取mssQL数据

ms-sql-xp-cmdshell #mssQL执行系统命令

nmap -p1433	--script ms-sql-xp-cmdshell --script-args mssql.username=sa,mssql.passqord=sq,ma-sql-xp-cmdshell.cmd="ipconfig"	192.168.1.1
需要知道端口和账号密码

pgsql-brute #审计PgSQL密码

8、渗透测试

**nmap --script 【选项】 -p 【端口】【目标】

http-brute #审计HTTP身份验证。可以简单**用户名密码

ftp-brute #审计FTP服务器。暴力**FTP

nmap --script ftp-brute --script-args userdb=user.txt,passdb=pass.txt -p 21 192.168.1.1
nmap --script=ftp-anon 192.168.1.1	检测是否允许匿名登陆

http-wordpress-brute #审计wordpress程序

http-joomla-brute #审计Joomla程序

pop3-brute #审计邮件服务器

smb-brute.nse #审计SMB口令

vnc-brute #审计VNC服务器

smtp-brute #审计SMTP服务器

stuxnet-detect #检测Stuxnet蠕虫

stuxnet是专门针对工业控制系统编写的破坏性病毒,针对windows和西门子的SIMATIC WinCC系统的7个漏洞,主要通过U盘和局域网传播

snmp-netstat #SNMP服务安全审计

snmp-processes

snmp-win32-services

snmp-brute

四、Zenmap

nmap图形界面,python编写,开源免费

五、Nmap技巧

–send-eth #发送以太网数据,数据链路层

–send-ip #网络层发送

–privileged #假定拥有所有权

–interactive #在交互模式中启动

-V #查看Nmap版本号

-d #设置调试级别,1~9,由低到高

–packet-trace #跟踪发送接受的报文

–iflist #列举端口和路由

-e #指定网络接口

-oG #中断扫描

–resume #继续中断扫描

firewalk #探测防火墙

nmap --script=firewalk --traceroute 192.168.1.1	对目标防火墙规则进行探测

vmauthd-brute #VMWare认证**

六、Nmap保存和输出

-oN #标准保存

-oX #XML保存

-oS #133t保存

-oG #Grep保存

-oA #保存到所有格式

–append-output #补充保存文件

-oX #转换XML保存

-oX #忽略XML声明的XSL样式表