| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 渗透利器--nmap超级详解一 -> 正文阅读 |
|
[系统运维]渗透利器--nmap超级详解一 |
目录 0x01 nmap简介(1)Nmap 一款开源免费的网络发现和安全审计工具。名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的,随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。最新版的Nmap6.0在2012年5月21日发布,现如今最新版本到Nmap7.90。 ????????官网下载地址:www.nmap.org。 ????????中文手册:http://www.nmap.com.cn/doc/manual.shtm#4(版本有点老) (2)Zenmap是Nmap官方提供的图形界面(随Nmap的安装包发布),旨为nmap提供更加简单的操作方式,由Python语言编写而成的开源免费的图形界面,能够运行在现有操作系统平台上。 (3)Nmap包含四项基本功能:主机发现、端口扫描、版本侦测以及操作系统侦测。 0x02 四大功能一 -- 主机发现?(1)Nmap支持十多种不同的主机探测方式,可根据实际情况灵活选用不同的方式来探测目标机:
(2)常用命令 -sn 抓包解析:? ????????1)扫描公网ip时: ????????Nmap会发送四种不同类型的数据包来探测目标主机是否在线。 ????????①ICMP echo request ????????②a TCP SYN packet to port 443(https) ????????③a TCP ACK packet to port 80(http) ????????④an ICMP timestamp request ????????使用此命令探测会依次发送这四个报文探测目标机是否开启。只要收到其中一个包的回复,就可以证明目标机开启。同时使用这四种不同类型的数据包可以有效避免因防火墙或丢包而造成的判断错误。 ????????2)扫描内网ip时: ????????使用此命令会发送arp请求包探测目标ip是否在线,如果有arp回复包,则说明在线。如果在线,此命令还可以得到其MAC地址,但是不会探测其开放的端口号。 (3)高级命令 -PE/-PP/-PM/PU 抓包分析: ????????① -PE(ICMP Echo): 通过向目标发送ICMP Echo数据包来探测目标主机是否存活,但由于许多主机的防火墙会禁止这些报文,实际使用需要配合其他命令才有更好效果。 ?????????② -PP(ICMP time stamp): 该扫描方式在大多数防火墙配置不当时可能会得到回复从而判断目标主机是否存活。如果目标主机在线,该命令还会探测其开放的端口以及运行的服务。?? ?????????③ -PM(ICMP address maskPing):通过地址掩码方式扫描,会试图用备选的ICMP等级Ping指定主机,有不错的穿透防火墙的效果。 ????????④-PU(UDP ping):它发送一个空的(除非指定了--data-length UDP)报文到给定的端口探测主机。如果目标机器的端口是关闭的,则会得到一个ICMP端口无法到达的回应报文;反则到达一个开放的端口,大部分服务仅仅忽略这个空报文而不做任何回应。未指定端口,则默认为 40125,该扫描类型的主要优势是它可以穿越只过滤TCP的防火墙和过滤器。 ?(4)总结:实际使用过程中主机发现并不单独使用,而只是作为端口扫描、版本侦测、OS侦测先行步骤。通常只有在探测某些大型局域网的活动主机数量时才会单独使用主机发现功能来完成。 0x03 四大功能二 -- 端口扫描?(1)核心功能,用于确定目标主机的TCP/UDP端口的开放情况。默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。 ?(2)Nmap通过探测将端口划分为6个状态: ? ? ? ? ?1)open:端口是开放的。 ? ? ? ? 2)closed:端口是关闭的。 ? ? ? ? 3)filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。 ? ? ? ? 4)unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。 ? ? ? ? 5)unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。 ? ? ? ? 6)closed|filtered :端口是关闭的或被屏蔽,Nmap不能识别。 (3)-sS (TCP SYN扫描): ????????这是Nmap默认的扫描方式,通常被称作半开放扫描。该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么可以判断端口是开放的;如果收到RST包,说明该端口是关闭的。如果没有收到回复,那么可以判断该端口被屏蔽了。执行得很快,扫描相对来说不张扬,不建立完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广。 ?(4)-sT (TCP connent扫描): ????????使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭。该方式扫描速度真的是慢,而且由于建立完整的TCP连接会在目标主机上留下记录信息,不够隐蔽。所以,-sT命令是TCP SYN无法使用才考虑使用的方式。 (5)-sA (TCP ACK 扫描): ????????向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况。 (6)-sU (UDP扫描-sU): ????????UDP扫描用于判断UDP端口的情况,向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的;如果没有收到回复,那说明该UDP端口可能是开放的或者屏蔽的。因此,通过反向排除法的方式来判断哪些UDP端口是可能处于开放状态的。? ?(7)-sN/sF/sX (TCP FIN/Xmas/NULL 扫描): ???????这三种扫描方式被称为秘密扫描,因为相对比较隐蔽。FIN扫描向目标主机的端口发送的TCP FIN 包、Xmas tree包或NULL包,如果收到对方的RST回复包,那么说明该端口是关闭的;没有收到RST包说明该端口可能是开放的或者被屏蔽了。其中Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包;NULL包是指所有的flags都为0的TCP包。 (8)-sY/-sZ (SCTP INIT/COOKIE-ECHO): ????????除了以上几种常用的方式外,Nmap还支持多种其他的探测方式。例如使用SCTP INIT/Cookie-ECHO方式是来探测SCTP的端口开放情况。 (9)-sS -sU 联用探测指定端口的开放状态: ????????若既想扫描目标TCP端口又想扫描UDP的端口,则需要指定扫描方式以及端口。 ????????例:?nmap? -sS ? -sU? -p ?T:80,U:445 ? 192.168.187.129 ??? ????????以半连接的TCP SYN方式扫描目标主机的80端口,以UDP方式扫描目标主机的445端口。 (10)--top-ports 探测N个最有可能开放的端口: ????????例:nmap -sS -sU --top-ports 100 10.96.10.246 ????????与 -F 有异曲同工之处:通常 Nmap 会为每个扫描的协议扫描最常见的 1000 个端口。使用 -F,这减少到 100。 (11)-r 不要随机化端口: ????????默认情况下,Nmap 会随机顺序扫描的端口(除了某些常见的端口出于效率原因移动到开头附近)。可以指定?-r 顺序(从低到高排序)端口扫描。 0x04 四大功能三 -- 服务和版本检测??(1)用于确定目标主机开放端口上运行的具体的应用程序及版本信息。 (2)Nmap提供的版本侦测具有如下的优点: ????????1)高速。并行地进行套接字操作,实现一组高效的探测匹配定义语法。 ????????2)尽可能地确定应用名字与版本名字。 ? ? ? ??3)支持TCP/UDP协议,支持文本格式与二进制格式。 ????????4)支持多种平台服务的侦测,包括Linux/Windows/Mac OS/FreeBSD等系统。 ????????5)如果检测到SSL,会调用openSSL继续侦测运行在SSL上的具体协议(如HTTPS/POP3S/IMAPS)。 ????????6)如果检测到SunRPC服务,那么会调用brute-force RPC grinder进一步确定RPC程序编号、名字、版本号。 ????????7)支持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。 ????????8)通用平台枚举功能(CPE)。 ????????9)广泛的应用程序数据库(nmap-services-probes)。目前Nmap可以识别几千种服务的签名,包含了180多种不同的协议。 (3)版本侦测原理: ? ? ? ? 1)首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。 ? ? ? ? 2)如果是TCP端口,尝试等待6秒建立TCP连接(默认值6秒,可在文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms值修改)。 ????????如果在等待时间内,接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。 ????????如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。 ? ? ? ? 3)如果是UDP端口,那么直接使用nmap-services-probes中的探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。 (4)版本侦测用法:
0x05 四大功能四 -- 操作系统侦测(1)Nmap拥有丰富的系统数据库nmap-os-db,目前可以识别2600多种操作系统与设备类型。 (2)OS侦测原理: ????????使用 TCP/IP 堆栈指纹进行远程操作系统检测。Nmap 向远程主机发送一系列 TCP 和 UDP 数据包,并几乎检查响应中的每一位。在执行了 TCP ISN 采样、TCP 选项支持和排序、IP ID 采样和初始窗口大小检查等数十项测试后,Nmap 将结果与其?nmap-os-db?中的2600 多个已知操作系统指纹的数据库进行匹配得出操作系统详细信息。 ????????具体简化: ? ? ? ? 1)Nmap内部包含了2600多已知系统的指纹特征(在文件nmap-os-db文件中)。将此指纹数据库作为指纹匹配的样本库。 ? ? ? ? 2)分别挑选一个open和closed的端口,向其发送经过精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。 ? ? ? ? 3)将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。 (3)OS侦测用法:
0x06 总结:(1)nmap -T[0-5] 时间参数如何选择: ? ? ? ? 1)-T0:非常慢,可用于躲避目标主机的防火墙拦截。 ? ? ? ? 2)-T1:比较慢,可用于躲避目标主机的防火墙拦截。 ? ? ? ? 3)-T2:一般不用,可以降低对带宽的消耗,相应速度降下来了。 ? ? ? ? 4)-T3:默认,根据目标的反应自动调整时间。 ? ? ? ? 5)-T4:快速扫描,常用,需要在很好的网络环境下进行扫描,请求可能会淹没目标。 ? ? ? ? 6)-T5:极速扫描,速度飞快同时牺牲了准确度。 (2)常用参数:??
(3)-A (全面扫描): ????????这个命令不仅列出目标主机开放的端口号,对应的服务,还较为详细的列出了服务的版本,其支持的命令,到达目标主机的每一跳路由等信息。在进行完全扫描时,扫描机与目标主机之间存在大量的数据流量交互,扫描时长随之增加。完全扫描不仅仅是TCP协议上的通信交互,还有例如ICMP、HTTP、NBSS、TDS、POP等等协议的交互。 ????????通常搭配 -T4 一起使用:? >> nmap -A -T4 192.168.187.129 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 15:42:47- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |