Nmap教学视频笔记
1 nmap的安装和扫描的基本概念
扫描的原理:比如打电话(对方可以接听或者不接)
http://blog.51cto.com/xiaogongju/1972643
检测活在网络上的主机(主机发现)检测主机上开放的端口(端口发现或枚举)检测到相应的端口(服务发现)的软件和版本检测操作系统,硬件地址,以及软件版本检测脆弱性的漏洞(Nmap的脚本)
扫描的分解动作:
- 统一沟通语言
- 发出刺激
- 受到刺激的反馈(被扫描主机可能返回也可能不返回)
- 通过对比刺激和反馈完成扫描
2 如何找到网络上的设备
2.1 nmap的输入输出
找到设备地址:DNS解析,直接获取
如何将网络地址告知nmap:
nmap [扫描类型][设置]{设备地址}
地址类型:主机名,IP地址,网段等
-iL<文件名>:通过文件输入地址
-iR<ip地址数目>
--exclude<host1 [,host2],...>:排除主机或者网段
--exclude<exclude_file>:排除文件中的地址
nmap输出:
1. nmap输出的格式参数:
命名中使用时间%H, %M, %S,%m,, %d, %y
nmap输出的格式:
-oN
-oX
-oS
-oG
-oA
2. 输出详细和调试测试
-v
-d[0-9]
--reason
--packet-trace
--open
--iflist
--long-errors
其他设置:用到再说
2.2 确定网络设备
命令行参数:
Ping类型:
- -sL(list scan)不做扫描,只完成DNS和网址的转换
- -sP:(ping scan)默认发ICMP echo请求 和 TCP的ACK请求80端口
- -PN:不使用ping,可能或比较慢,但是主机假如不在也会扫
- -PS<端口号列表>(TCP SYN Ping)发TCP协议SYN标记的空包。默认扫描80端口
- -PA<端口列表>(TCP ACK Ping)发TCP协议ACK标记的空包。默认扫描80端口
- -PU<端口列表>(UDP Ping)默认31338
- -PE;-PP;-PM(ICMP Ping)
- -PO<协议列表>(IP协议Ping)在协议列表中指定使用什么样的协议,要注意语言的统一,你扫人家,你得懂人家的语言,其实就是知道对方使用的什么协议,PO支持好多协议
- -PR(ARP Ping) 二层的,局域网扫描,不能出局域网
其他设置项:
- --traceroute 跳数
- -n 不要做DNS解析
- -R DNS解析所有地址,默认不解析不在线的IP
- -system-dns 使用系统DNS
- --dns-servers<server1>[,<server>[,...]]使用其他DNS
3 端口扫描概要
nmap扫描的端口是什么
协议上的端口号---只是个标记
主机在线端口才有意义,主机相当于大楼,端口相当于房间
为什么扫描端口
端口(TCP,UDP其他)-推测--> 服务(http, ftp.其他)-推测--->程序(apache, Server_U,其他), 然后看程序有没有什么漏洞
我们扫描端口其实还是为了识别端口后面的程序
-p<端口列表>,如果不给出,就默认扫描1660个,常用的端口
扫描结果--Nmap如何描述端口状态
1. open 端口开启,有程序监听此端口(相当于食堂大妈在等你打饭吃)相当于主机开启,而且在跑着服务呢
2. closed 端口关闭,数据能到达主机,但是没有程序监听此端口
3. filtered 数据未能到达主机
4. Unfiltered,数据能到达主机,但是Nmap无法判断端口开启还是关闭。
5 Open | filtered,端口没有返回值,主要出现在UDP,IP,FIN,NULL和Xmas扫描
6. Closed | filtered. 只出现在IP ID idle扫描
4 端口扫描技术和算法
4.1 TCP标志位扫描
TCP建立连接和断开连接(三次握手和四次挥手)
TCP Header(Source Port; Destination Port; TCP Flags;)
TCP扫描(-sS)半连接
- -sS
- 匿名扫描
- 默认扫描模式(不加类型)
- 需要root模式
- 扫描速度快
-
端口开启状态(open)
open nmap -p22 scanme.nmap.org 本地发送SYN数据包 scanme服务器的返回值:TCP SYN/ACK
closed nmap -p113 scanme.nmap.org 本地发送SYN数据包 scanme服务器的返回值:TCP RST
filtered nmap -p139 scanme.nmap.org 本地发送SYN数据包 scanme服务器没有返回值(过滤掉了)或者是返回ICMP未达到错误
TCP全连接扫描(-sT)三次握手做完
- -sT
- TCP扫描的默认模式
- 不需要特权用户权限
- 端口状态和SYN相同
全连接过程:
其他扫描:
注意ACK返回状态没有closed状态
TCP Window扫描
TCP迈蒙尼德扫描
用户定制的TCP扫描(--scanflags)
- --scanflags <URG,ACK,PSH,RST,SYN,FIN>
- 数字标记
- 字符标记
端口扫描技巧:
TCP idle扫描,比较复杂,前面的扫描都会暴露自己,idle扫描之后踏雪无痕!!!
IP Header:Fragment Id有规律就能利用,如递增)
如何利用ID规律
三个主角:nmap主机,僵尸服务器,目标服务器,具体实现步骤如下所示
注意这下面显示的是目标服务器是open状态的
1. 探测僵尸服务器IP ID
2.伪造以僵尸身份服务器IP ID
3.再次探测僵尸服务器IP ID 这时候僵尸服务器根据Fragmnet ID递增的特点,应该回的就是31339,于是nmap就推测出来目标服务器可能给僵尸服务器发的是SYN/ACK,然后推测出来目标服务器对应的目标端口是开着的,原理就是这样子滴。
注意这下面显示的是目标服务器是closed状态的
1. 探测僵尸服务器IP ID
2. 伪造以僵尸服务器身份的SYN包,这时候目标服务器给僵尸服务器发送RST或者没有响应,僵尸服务器就不会再给目标服务器发送数据包
3. 再次探测僵尸服务器IP ID,nmap发现僵尸服务器返回的ip id是31338,就推测目标服务器可能是关着的
注意这下面显示的是目标服务器是filtered状态的
1.前两步相同
2.
3.
可以看出来nmap其实不能识别端口是closed还是filtered的,所以注意idle扫描特点
总结:
主要了解思维:只要看到有规律可循,就能利用
tcp idle扫描的参与者一共有三个,nmap, 僵尸服务器和目标服务器
这种扫描是建立在TCP三次握手的基础上,但是扫描成功的前提是找到一台僵尸服务器(特点就是IP Header头的Fragment ID有自增的特点,这台设备可能不是公共的服务器,可能是一台打印机等等)
端口扫描技巧——其他扫描模式
这一小节我们聊一下UDP的扫描:-sU,尽量不要将TCP扫描和UDP扫描一起使用,效率比较低
注意:UDP就像是寄信一样,只要有了地址就直接寄出去,TCP更像是打电话,UDP因为含有的信息比较少,所以很难像TCP一样使用TCP idle扫描这种复杂的扫描方式。
-sO:协议扫描;获取服务器支持哪些协议,这里已经不是端口扫描了。
FTP反弹扫描
-b
ftp代理扫描
大总结:
- TCP标志位扫描--修改各个标志位
- TCP idle扫描,找僵尸服务器
- 其他扫描:UDP 协议扫描(用协议去试端口)FTP扫描
5 优化Nmap的性能
nmap本身的一些东西讲了80%,优化就是控制扫描速度,提高扫描准确率 。也不一定快了就好,有时候防止被防火墙发现,就得慢下来,防止被拉进黑名单。有时候网络环境不好,假如我们发包太快的话,丢包率就会很高。
参数不同,决定了扫描的速度的不一样
优化的具体内容:不做无用功
1 逐步分解任务
- -sP 首先确定是否在线,
- UDP和TCP扫描不要同时进行,nmap是并行的,如果协议的话就更好的并行
2. 控制扫描的端口,默认nmap扫描1000多个端口
- -F:快速Fast扫描100个常用端口,nmap对端口做了一个排序,默认排了1000个,加了F之后100个
- --top-ports<端口个数>
- -p 想扫哪个就最好指定
3. 跳过高级扫描功能:
- -A:动作相对于比较详细,要做好多事,是nmap提供的一个扫描模板,识别操作系统
- -sV:判断对应端口上跑的程序的版本的,需要调用应用层协议
- -sC:(--script=default)加了之后就会调用默认的脚本,也会调用20多个
- -O:用来识别操作系统的,识别操作系统十分耗时,要识别协议栈
- --traceroute:
- 可能的话关闭DNS解析 -n 不需要的话就把DNS关掉
优化nmap性能02
--top-ports<端口个数> 具体影响细节
默认-F就能达到70%多
优化具体内容:优化时间参数和并行:
1. 对主机分组
2. 对nmap分组
3. 新手在使用等待时间越长,越容易被蜜罐等防火墙拖住,故意返回很慢。
4. 最大重传多少次
5. 每个主机最大的耗时,主要是防止因为网络条件不好的情况下,某个主机占用的时间太多
....
都是能够加速时间
Nmap提供的时间和并行模板:
越慢越准,越不好识别出来。
总结上面所讲内容:
端口扫描的参考步骤:
1. 明确目标(主机发现,端口扫描,服务确定,etc)
2. 确定网络(带宽,质量, etc)
3. 计算和测试扫描时间(独立主机,整体,etc)
4. 确定各个参数(使用模板,自行设计参数)
6 服务和应用程序版本的识别
NMAP的高级版本
1. 确定服务和服务程序的版本
操作参数
端口扫描,,nmap给出的服务准确吗?
端口扫描,nmap是如何得出应用版本的?-sV
服务和版本相关的参数:
1. -sV 探测开放端口的服务和版本信息
2, --version-intensity<0-9>:设置探测深度,数越大越多
3. --version-light:相当于0-2
4. --version-all:相当于0-9
5. --version-trace:显示版本扫描详细(用于调试)打印出来状态
服务版本探测细节?附录2
比较像男女谈恋爱,给她一些东西,看她反馈
深入学习两个文件:
1. 安装目录
2. 编译安装/usr/local/share/nmap
3.rpm安装/usr/share/nmap
4. nmap-services
5. nmap-service-probes