一、目标设置
nmap --version
显示版本,一般用于验证是否安装正确。
nmap <ip>
例如:
nmap 10.73.31.74
扫描指定ip。
nmap nmap.org
当然也可以扫描指定的域名。
结果有三列,第一列是端口列表,第二列是状态,第三列是开放的服务。
Starting Nmap 7.01 ( https://nmap.org ) at 2016-02-09 17:38 ?D1ú±ê×?ê±??
Nmap scan report for nmap.org (45.33.49.119)
Host is up (0.21s latency).
rDNS record for 45.33.49.119: ack.nmap.org
Not shown: 993 filtered ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
70/tcp closed gopher
80/tcp open http
113/tcp closed ident
443/tcp open https
31337/tcp closed Elite
nmap <ip1> <ip2> ... <ipn>
扫描多个目标。nmap会把所有除了选项的命令行参数看做目标。
nmap a.b.c.d1,d2,d3
例如:
nmap 10.73.31.1,15,255
如果位于同一子网,也可以这样。多个目标的结果会依次列出。
nmap a.b.c.d1-d2
nmap a.b.c.*
扫描范围内的目标。星号代表0~255。
可以将这两种表示方法组合使用,比如:
CIDR
nmap 10.73.31.1/24
当然也支持CIDR记法,再例如,nmap 192.168.1.1/24用于扫描你家路由器上都连了些什么。
假设我们有list.txt文件,文件的内容是ip列表,一行一个。比如这样:
10.73.31.145
10.73.31.116
我们可以输入这条指令让nmap自动扫描:
nmap -iL list.txt
nmap -iR 3
这代表nmap会随机扫描3个目标。你可以在无聊的时候使用-iR 1000 -p 80来寻找一些有趣的网站。
使用--exclude选项来排除指定的ip。比如:
nmap 10.73.31.1/24 --exclude 10.73.31.1
也可以使用上面的范围标记法来排除范围内的ip。
--excludefile用于排除文件列表中的ip,文件的格式同上。
nmap 10.73.31.1/24 --excludefile list.txt
--script=
这个命令在许多教程里面都出现过,这个命令的意思是使用脚本扫描的意思。
例子:
按脚本分类进行扫描:在扫描时可根据需要设置--script=类别这种方式进行比较笼统的扫描:
auth: 负责处理鉴权证书(绕开鉴权)的脚本
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_06
(1) nmap --script=auth 192.168.137.*
负责处理鉴权证书(绕开鉴权)的脚本,也可以作为检测部分应用弱口令
(2)nmap --script=brute 192.168.137.*
提供暴力破解的方式 可对数据库,smb,snmp等进行简单密码的暴力猜解
(3)nmap --script=default 192.168.137.* 或者 nmap -sC 192.168.137.*
默认的脚本扫描,主要是搜集各种应用服务的信息,收集到后,可再针对具体服务进行攻击
(4)nmap --script=vuln 192.168.137.*
检查是否存在常见漏洞
(5)nmap -n -p445 --script=broadcast 192.168.137.4
在局域网内探查更多服务开启状况
(6)nmap --script external 202.103.243.110
利用第三方的数据库或资源,例如进行whois解析
Nmap按照应用服务进行扫描
(1)vnc扫描:
检查vnc bypass
1 |
nmap --script=realvnc-auth-bypass 192.168.137.4 |
检查vnc认证方式
1 |
nmap --script=vnc-auth 192.168.137.4 |
获取vnc信息
1 |
nmap --script=vnc-info 192.168.137.4 |
(2)smb扫描:
smb破解
1 |
nmap --script=smb-brute.nse 192.168.137.4 |
smb字典破解
1 |
nmap --script=smb-brute.nse --script-args=userdb=/var/passwd,passdb=/var/passwd192.168.137.4 |
smb已知几个严重漏
1 |
nmap --script=smb-check-vulns.nse --script-args=unsafe=1 192.168.137.4 |
查看共享目录
1 |
nmap -p 445 --script smb-ls--script-args ‘share=e$,path=\,smbuser=test,smbpass=test’ 192.168.137.4 |
查询主机一些敏感信息(注:需要下载nmap_service)
1 |
nmap -p 445 -n –script=smb-psexec --script-args= smbuser=test,smbpass=test192.168.137.4 |
查看会话
1 |
nmap -n -p445 --script=smb-enum-sessions.nse --script-args=smbuser=test,smbpass=test192.168.137.4 |
系统信息
1 |
nmap -n -p445 --script=smb-os-discovery.nse --script-args=smbuser=test,smbpass=test192.168.137.4 |
(3)Mssql扫描:
猜解mssql用户名和密码
1 |
nmap -p1433 --script=ms-sql-brute --script-args=userdb=/var/passwd,passdb=/var/passwd192.168.137.4 |
xp_cmdshell 执行命令
1 |
nmap -p 1433 --script ms-sql-xp-cmdshell --script-args mssql.username=sa,mssql.password=sa,ms-sql-xp-cmdshell.cmd="net user" 192.168.137.4 |
dumphash值
1 |
nmap -p 1433 --script ms-sql-dump-hashes.nse --script-args mssql.username=sa,mssql.password=sa 192.168.137.4 |
(4)Mysql扫描:
扫描root空口令
1 |
nmap -p3306 --script=mysql-empty-password.nse 192.168.137.4 |
列出所有mysql用户
1 |
nmap -p3306 --script=mysql-users.nse --script-args=mysqluser=root 192.168.137.4 |
支持同一应用的所有脚本扫描
1 |
nmap --script=mysql-* 192.168.137.4 |
(5)Oracle扫描:
oracle sid扫描
1 |
nmap --script=oracle-sid-brute -p 1521-1560 192.168.137.5 |
oracle弱口令破解
1 |
nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=ORCL,userdb=/var/passwd,passdb=/var/passwd192.168.137.5 |
(6)其他一些比较好用的脚本
1、nmap --script=broadcast-netbios-master-browser 192.168.137.4 发现网关
nmap --script=broadcast-netbios-master-browser 192.168.137.4 发现网关
2、nmap -p 873 --script rsync-brute --script-args 'rsync-brute.module=www' 192.168.137.4 破解rsync
3、nmap --script informix-brute -p 9088 192.168.137.4 informix数据库破解
4、nmap -p 5432 --script pgsql-brute 192.168.137.4 pgsql破解
5、nmap -sU --script snmp-brute 192.168.137.4 snmp破解
6、nmap -sV --script=telnet-brute 192.168.137.4 telnet破解
7、nmap --script=http-vuln-cve2010-0738 --script-args 'http-vuln-cve2010-0738.paths={/path1/,/path2/}' <target> jboss autopwn
8、nmap --script=http-methods.nse 192.168.137.4 检查http方法
9、nmap --script http-slowloris --max-parallelism 400 192.168.137.4 dos攻击,对于处理能力较小的站点还挺好用的 'half-HTTP' connections
10、nmap --script=samba-vuln-cve-2012-1182 -p 139 192.168.137.4
(7)不靠谱的脚本:
vnc-brute 次数多了会禁止连接
pcanywhere-brute 同上
参考网站:https://blog.csdn.net/whatday/article/details/73823959
二、主机发现
使用-PN(或-P0)来跳过主机发现的步骤。namp的默认流程不扫描离线的主机,即如果主机ping不通,则不对它进行下一步的端口扫描。
这个选项可用于强制扫描某个伪装成离线的主机。对于没有伪装的主机,扫描结果和不加完全一样,它只是提供了一种可选的方案。
-sP,仅仅进行主机发现,不进行接下来的端口扫描。一般用于发现指定网络上的主机,优点是非常快。
-PS,使用半完成的TCP连接代替ICMP ping进行主机发现,优点是非常快。另外,如果目标主机禁止ICMP ping(很多主机都会这样),就可以用SYN ping 来代替。
默认使用80端口,但是可以通过-PS [portlist]来指定。
-PO(注意是大写的O)选项进行IP协议的ping。IP协议ping用指定的协议发送一个包给目标。如果没有指定协议,默认的协议是 1 (ICMP), 2 (IGMP)和4 (IP-in-IP)。
- -PA [portlist] TCP ACK ping
- -PU [portlist] UDP ping
- -PY CTP ping
- -PE ICMP ping(默认值)
- -PP ICMP时间戳嗅探(用于传过防火墙保护)
- -PM ICMP地址掩码嗅探
- -PR ARP ping,扫描本地网络时非常快因为不可能被拦截,离开本地网络则无效
如果目标主机不返回任何信息,你可以各种变换嗅探选项。
--traceroute,这个选项非常帅,因为可以得到目标主机的一个路由地图。
比如说我拿nmap.org做个演示:
TRACEROUTE (using port 113/tcp)
HOP RTT ADDRESS
1 0.00 ms localhost (192.168.1.1)
2 0.00 ms 123.120.152.1
3 ...
4 0.00 ms 124.65.57.125
5 0.00 ms 124.65.194.53
6 42.00 ms 219.158.8.82
7 58.00 ms 219.158.11.34
8 48.00 ms 219.158.97.22
9 47.00 ms 219.158.104.106
10 327.00 ms 219.158.97.10
11 254.00 ms 12.119.9.49
12 268.00 ms cr84.la2ca.ip.att.net (12.122.129.122)
13 188.00 ms cr2.la2ca.ip.att.net (12.123.30.250)
14 187.00 ms ggr2.la2ca.ip.att.net (12.122.129.105)
15 516.00 ms 10ge2-18.core1.lax2.he.net (216.218.185.169)
16 217.00 ms 100ge8-2.core1.pao1.he.net (184.105.81.237)
17 270.00 ms 10ge4-4.core3.fmt2.he.net (184.105.222.89)
18 ...
19 300.00 ms ack.nmap.org (45.33.49.119)
-R用于为所有ip目标做反向dns解析。正向解析是默认的,但是反向不是。
比如说我ping nmap.org 得到了45.33.49.119。
然后我nmap -R 45.33.49.119,结果中第二行会变成Nmap scan report for ack.nmap.org (45.33.49.119)。
-sS (TCP SYN扫描)
SYN扫描作为默认的也是最受欢迎的扫描选项。 它执行得很快,在一个没有入侵防火墙的快速网络上,每秒钟可以扫描数千个 端口。 SYN扫描相对来说不张扬,不易被注意到,因为它从来不完成TCP连接。 它也不像Fin/Null/Xmas,Maimon和Idle扫描依赖于特定平台,而可以应对任何兼容的 TCP协议栈。它还可以明确可靠地区分open(开放的), closed(关闭的),和filtered(被过滤的) 状态。它常常被称为半开放扫描, 因为它不打开一个完全的TCP连接。它发送一个SYN报文, 就像您真的要打开一个连接,然后等待响应。 SYN/ACK表示端口在监听 (开放),而 RST (复位)表示没有监听者。如果数次重发后仍没响应, 该端口就被标记为被过滤。如果收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。
-sT (TCP connect()扫描)
当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描。 当用户没有权限发送原始报文或者扫描IPv6网络时,就是这种情况。
-sU (UDP扫描)
虽然互联网上很多流行的服务运行在TCP 协议上,UDP服务也不少。 DNS,SNMP,和DHCP (注册的端口是53,161/162,和67/68)是最常见的三个。 因为UDP扫描一般较慢,比TCP更困难,一些安全审核人员忽略这些端口。 这是一个错误,因为可探测的UDP服务相当普遍,攻击者当然不会忽略整个协议。 所幸,Nmap可以帮助记录并报告UDP端口。
UDP扫描用-sU选项激活。它可以和TCP扫描如 SYN扫描 (-sS)结合使用来同时检查两种协议。
UDP扫描发送空的(没有数据)UDP报头到每个目标端口。 如果返回ICMP端口不可到达错误(类型3,代码3), 该端口是closed(关闭的)。 其它ICMP不可到达错误(类型3, 代码1,2,9,10,或者13)表明该端口是filtered(被过滤的)。 偶尔地,某服务会响应一个UDP报文,证明该端口是open(开放的)。 如果几次重试后还没有响应,该端口就被认为是 open|filtered(开放|被过滤的)。 这意味着该端口可能是开放的,也可能包过滤器正在封锁通信。 可以用版本扫描(-sV)帮助区分真正的开放端口和被过滤的端口。
UDP扫描的巨大挑战是怎样使它更快速。 开放的和被过滤的端口很少响应,让Nmap超时然后再探测,以防探测帧或者 响应丢失。关闭的端口常常是更大的问题。 它们一般发回一个ICMP端口无法到达错误。但是不像关闭的TCP端口响应SYN或者Connect 扫描所发送的RST报文,许多主机在默认情况下限制ICMP端口不可到达消息。 Linux和Solaris对此特别严格。例如, Linux 2.4.20内核限制一秒钟只发送一条目标不可到达消息 (见net/ipv4/icmp。c)。
Nmap探测速率限制并相应地减慢来避免用那些目标机会丢弃的无用报文来阻塞 网络。不幸的是,Linux式的一秒钟一个报文的限制使65,536个端口的扫描要花 18小时以上。加速UDP扫描的方法包括并发扫描更多的主机,先只对主要端口进行快速 扫描,从防火墙后面扫描,使用--host-timeout跳过慢速的 主机。
-sN; -sF; -sX (TCP Null,FIN,and Xmas扫描)
注:官方文档翻译为“激烈”模式。个人觉得不是很好。
nmap -A <target>
这个选项启用额外的高级和高强度选项,它的内容目前还是未定义的。可以确定的是,它会打开OS探测-O和版本探测-sV,以后还会增加更多的功能。
-sV 选项可以启用版本探测,使用该选项不是进行一个端口扫描,而是通过相应的端口对应相应的服务,根据服务指纹识别出相应的版本。
nmap -sV 192.168.131.1
当然可以借助-A 进行操作系统探测和版本探测
nmap -sV -A 192.168.131.1
2.全端口版本探测
–allports 选项可以启用全端口版本探测,nmap 会跳过9100 TCP 端口,只有使用–allports才可以扫描所有端口。
nmap -sV --allports 192.1681.131.1
3.设置扫描强度
–version-intensity 选项可以为每个报文赋予 1-9之间的数值。被赋值较低的探测报文对大范围的常见服务有效,而赋予较高的报文一般没有实际作用。强度水平说明了 应该使用哪些报文。当我们赋值越高,服务越有可能被识别,但是这牺牲相当长的一段时间。默认强度7
nmap -sV --version-intensity 1 192.168.131.1
4.获取详细的版本信息
–version-trace 可以获取详细的版本信息,对于获取目标主机的额外信息是十分有帮助的。
nmap -sV --version-trace 192.168.131.1
5.RPC扫描
-sR 多用于与其他端口扫描选项结合使用。它对于所有发现的开放的TCP/UDP端口执行SunRPC程序NULL命令,来试图确定它是否是RPC端口,如果是RPC端口则会返回程序和版本号。
nmap -sS -sR 192.168.131.1
6.操作系统探测
-O
namp -O 192.1768.131.1
7.对指定的目标进行操作系统检测
–osscan-limit 只对满足具有打开和关闭的端口条件的主机进行操作系统的检测,这样可以节约时间特别是在使用-P0 扫描多个主机时,这个选项仅在使用-O或-A 进行操作系统检测时使用。
namp -O --osscan-limit 192.168.131.1
8.推测系统并识别
–osscan-guess /–fuzzy 选项可以推测系统并识别。nmap对系统进行识别时并不一定都能准确识别,当无法准确识别时,nmap会从最接近的数据中 取值,大胆的猜测目标的系统。
nmap -O --osscan-guess 192.168.131.1
注:对于获取的结果不要过分的相信,nmap 并不一定能够全部躲过某些软件的伪装。