《网络安全自学教程》- Nmap使用及扫描原理分析

news2024/10/10 10:20:54
《网络安全自学教程》

在这里插入图片描述

Nmap(Network Mapper)是一款免费的开源网络扫描器,向目标主机发送特定的数据包,根据返回的流量特征,分析主机信息。主要功能有:「端口扫描」「主机探测」「服务识别」「系统识别」

在这里插入图片描述

Nmap使用教程

  • 1、端口扫描
    • 1.1、 指定端口
    • 1.2、 指定扫描方式
      • 1.2.1、 TCP全连接扫描
      • 1.2.2、 SYN半链接扫描
      • 1.2.3、 隐秘扫描
      • 1.2.4、 扫描UDP端口
  • 2、主机发现
    • 2.1、指定主机
    • 2.2、Wireshark抓包分析主机发现原理
      • 2.2.1、局域网外
      • 2.2.2、局域网内
  • 3、服务识别
  • 4、系统识别
  • 5、扫描结果导出
  • 6、NES脚本

kali 自带 nmap 「终端」输入 nmap 可以看到 nmap 的版本,证明 nmap 可用。

在这里插入图片描述

参数:

  • -p 指定端口(端口探测)
  • -sT 指定扫描方式为 TCP全连接
  • -sS 指定扫描方式为 SYN半连接
  • -sF 指定扫描方式为 Fin扫描
  • -sN 指定扫描方式为 Null扫描
  • -sX 指定扫描方式为 Xmas扫描
  • -sU 扫描UDP端口
  • -sP 指定网段(主机探测)
  • -sn 指定网段(主机探测)
  • -sV 识别服务指纹
  • -o 识别操作系统
  • -oN 导出结果为txt
  • -oX 导出结果为xml
  • --script 指定脚本
  • --script-args 指定脚本参数

1、端口扫描

扫描主机的「开放端口」,在nmap后面直接跟主机IP(默认扫描1000个常用端口)

nmap 192.168.31.180

在这里插入图片描述

从上图可以看到:它用1.58秒扫描了1000个端口,其中991个端口关闭,9个端口开放,并列出了开放端口对应的服务。

STATE栏显示「端口状态」

  • open:开放
  • closed:关闭
  • filterd:被过滤,未收到返回报文
  • unfilterd:未被过滤,收到返回报文,但无法确认是否开放
  • opend/unfilterd:开放或未被过滤
  • closed/unfilterd:关闭或未被过滤

1.1、 指定端口

扫描「指定端口」,使用 -p 参数,可以一次扫描单个端口、多个端口、或扫描一个范围的端口

nmap 192.168.31.180 -p 80				# 单个端口
nmap 192.168.31.180 -p 1-80				# 多个端口
nmap 192.168.31.180 -p 80,3389,22,21	# 多个端口
nmap 192.168.31.180 -p 1-65535			# 全端口
nmap 192.168.31.180 -F					# 扫描常见的100个端口
nmap 192.168.31.180 -p-					# 全端口(-p- 等价于 -p 1-65535)
nmap 192.168.31.180 -p ssh				# 扫描指定协议,非默认端口也能识别出来
nmap 192.168.31.180 -p s*				# 扫描s开头的协议
nmap 192.168.31.180 -p $(tr "\n" "," < ports.txt) # 读取文本中的端口

在这里插入图片描述

实际渗透时,扫描全端口可能会对服务器造成压力,尽量扫描指定端口。

1.2、 指定扫描方式

  • 「root身份」运行Nmap,默认使用SYN扫描。
  • 「非root身份」运行Nmap,默认使用TCP全连接扫描。

我们通过kali中的「wireshark」抓包分析不同扫描方式的请求信息,从而判断这些方式的区别。

点开kali的左上角,输入 wireshark 单击打开,选择抓包的网卡(我这里是 eth0 )。

在这里插入图片描述

输入过滤条件ip.addr == 192.168.31.180 and tcp.port == 80后,点击箭头应用。

在这里插入图片描述

这个过滤条件的意思是:过滤IP地址是 192.168.31.180 并且 端口是 TCP的80端口。

设置完过滤条件后,我们在命令行执行扫描命令,然后查看「wireshark」中的请求包。


1.2.1、 TCP全连接扫描

使用 -sT 参数对目标主机的80端口进行TCP全连接扫描。

「全连接扫描」使用完整的三次握手建立连接,能够建立连接就判定端口开放,否则判定端口关闭。

nmap 192.168.31.180 -p 80 -sT

1)如果端口开放,就会进行完整的三次握手,成功建立链接,扫描结果中,STATE字段显示为 open

在这里插入图片描述

2)如果端口关闭,就只能进行一次握手,无法建立连接,扫描结果中,STATE字段显示为 closed

在这里插入图片描述

1.2.2、 SYN半链接扫描

使用 -sS 参数进行SYN半连接扫描,「半链接扫描」只进行两次握手,根据对方的返回信息判断端口状态。

  • 返回确认帧 SYN + ACK 就表示端口开放。
  • 返回Reset RST + ACK 就表示端口关闭。
  • 无响应就重新发送SYN,持续不响应,就表示被防火墙屏蔽了。
nmap 192.168.31.180 -p 80 -sS

1)如果端口开放,就会进行两次握手,扫描结果中,STATE字段为 open

在这里插入图片描述

2)如果端口关闭,就只有一次握手,扫描结果中,STATE字段为 closed

在这里插入图片描述

1.2.3、 隐秘扫描

隐秘扫描,只适用于Linux系统。

「隐秘扫描」向目标主机的端口发送TCP FIN包 或 Xmas tree包 或 Null包,如果收到RST响应包,就判定端口关闭,否则就判定端口开放或被屏蔽(open/filtered)

nmap 127.0.0.1 -p 80 -sF	# Fin扫描
nmap 127.0.0.1 -p 80 -sN	# Null扫描(所有flags都为0的TCP包)
nmap 127.0.0.1 -p 80 -sX	# Xmas扫描(flags的FIN、URG、PUSH都为1的包)

1.2.4、 扫描UDP端口

nmap默认发送TCP报文探测端口,也就是只能扫描TCP端口。

使用 -sU 参数扫描UDP端口,根据对方返回的信息,判断端口状态。

  • 应用返回信息,表示端口开放。
  • ICMP返回端口不可达,表示端口关闭。
  • 无回应,表示端口被过滤。

1)如果端口开放,对应端口的应用就会返回报文,扫描结果中,STATE字段显示open。

在这里插入图片描述

2)如果端口关闭,ICMP就会返回不可达报文,扫描结果中STATE字段显示closed。

在这里插入图片描述
由于UDP是无状态协议,没有ACK或REST这种确认信息,只能等端口对应的服务响应信息,所以需要等待较长的时间,扫描速度比TCP慢很多,建议每次只扫描一个UDP端口。

2、主机发现

扫描网段中有哪些主机在线,使用 -sP-sn参数,不扫描端口,只扫描「存活主机」

nmap -sP 192.168.31.0/24

在这里插入图片描述

从上图可以看到:它用2秒扫描了这个网段的256个IP,其中有3个存活主机。

2.1、指定主机

使用-sP参数,扫描指定主机,可以扫描单个IP、多个IP、IP段。

nmap -sP 192.168.153.242	# 单个IP
nmap -sP 192.168.153.242 192.168.153.243 192.168.153.244	# 多个IP
nmap -sP 192.168.153.0/24	# IP段
nmap -sP -iL iplist.txt		# 指定文件中的IP

在这里插入图片描述

2.2、Wireshark抓包分析主机发现原理

Nmap依次发送「四种不同的报文」,只要收到「其中一个」包的回复,就判断主机存活。

  1. ICMP Echo request
  2. TCP SYN 到443端口
  3. TCP ACK 到80端口
  4. ICMP Timestamp request

发送四个不同的包,是为了防止防火墙「丢包」

如果是局域网的主机,则发送「ARP广播」,收到返回的ARP单播,就判断主机存活。

2.2.1、局域网外

1)ping www.baidu.com,获取百度IP。

2)打开wireshark,开始抓包。

3)执行nmap -sP 百度IP,探测主机是否存活。

在这里插入图片描述

从抓包结果可以看到,Nmap向目标主机依次发送了四个不同类型的包,百度给我们回复了三个。因此,Nmap判断目标主机存活,在终端打印 Host ip up。

2.2.2、局域网内

1)打开wireshark,开始抓包。

2)执行 nmap -sP 局域网IP,探测主机是否存活。

在这里插入图片描述

从抓包结果可以发现,nmap广播了目标主机的ARP请求,收到ARP响应后,判断目标主机存活,在终端上输出 Host is up。ARP响应中携带了目标主机的MAC地址,这里也额外打印出来了。


3、服务识别

Nmap根据服务对应的「默认端口」进行匹配,比如mysql默认使用3306,扫描到3306端口时,就在后面标注服务是mysql,如果目标服务器把服务的默认端口改了,Nmap就测不准了。

扫描端口时,默认显示端口对应的服务,但不显示服务版本。

想要识别具体的「服务版本」,可以使用 -sV 参数。

nmap 192.168.31.180 -p 80 -sV

在这里插入图片描述
扫描结果中,VERSION字段显示服务的详细版本。

4、系统识别

想要识别「操作系统版本」,可以使用 -O 参数。

nmap 192.168.31.180 -p 80 -O

在这里插入图片描述
提示:

  1. Nmap扫描出的系统版本并完全准确,仅供参考。
  2. 当识别不出具体版本时,Nmap会以概率的形式列举出可能的操作系统,如上图所示。

5、扫描结果导出

Nmap的扫描结果可以保存到文件中,比如文本格式、XML格式。

1)将扫描结果导出为「文本格式」,结果原样保存。

nmap 192.168.31.180 -p 80 -oN result.txt

在这里插入图片描述

2)将扫描结果导出为「xml格式」,结果的保存格式会发生变化。

nmap 192.168.31.180 -p 80 -oX result.xml

在这里插入图片描述

6、NES脚本

NES(Nmap Script Engine)Nmap脚本引擎,内置了几百个 lua 编写的「扫描脚本」,脚本存放在 /usr/share/nmap/scripts/ 目录下。

命令格式 : nmap --script 脚本名 110.242.68.4

比如:nmap --script http-headers 110.242.68.4

nmap --script http-headers			# 使用单个脚本
nmap --script="version,discovery"	# 使用多个脚本
nmap --script="not exploit”"		# 除了exploit,其他脚本都使用
nmap --script"(http*) and not (http-slowlors and http-brute)" # 使用所有http*的脚本,除了这两个
nmap --script http-headers --script-args 参数	# 使用脚本时,传入脚本参数

脚本的使用方式,可以到官方文档 https://nmap.org/nsedoc/ 查看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2201730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学建模算法与应用 第3章 非线性规划及其求解方法

目录 3.1 非线性规划概述 3.2 约束优化问题 3.3 无约束优化问题的Matlab求解 3.4 牛顿法与梯度下降法 Matlab代码示例&#xff1a;梯度下降法求解简单非线性问题 3.5 非线性规划在机器学习中的应用 习题 3 总结 非线性规划&#xff08;Nonlinear Programming, NLP&…

Vue3入门学习

Vue3入门学习 1. Vue3简介1.1. 【性能的提升】1.2.【 源码的升级】1.3. 【拥抱TypeScript】1.4. 【新的特性】 2. 创建Vue3工程2.1. 【基于 vue-cli 创建】2.2. 【基于 vite 创建】(推荐)2.3. 【一个简单的效果】 3. Vue3核心语法3.1. 【OptionsAPI 与 CompositionAPI】Options…

【源码+文档+调试讲解】二手物品调剂系统NODEJS

摘 要 二手物品调剂系统是一种在线平台&#xff0c;旨在促进用户之间的二手物品交易。该系统提供了一个方便的界面&#xff0c;让用户能够发布、浏览和搜索二手物品信息。用户可以根据自己的需求和兴趣&#xff0c;筛选出合适的物品&#xff0c;并通过系统与卖家进行联系。系统…

MES 系统在制造业数字化转型中的关键角色_SunMES

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。一站式数智工厂解决方案服务商】 在制造业数字化转型的宏大进程中&#xff0c;MES&#xff08;制造执行系统&#xff09;系统扮演着举足轻重的角色。 首先&#xff0c;MES 系统是数据采集与整合的…

QDateTime 使用详解

QDateTime 是 Qt 框架中用于处理日期和时间的类。本篇文章详细介绍、通过示例 快速了解QDateTime的各种操作&#xff0c;包括: 当前时间、获取日期和时间、获取日期、获取时间、获取时间戳、格式化输出、年、月、日、QTime时间、获取微妙、操作日期和时间、添加时间、减去时间、…

搭建 golang 项目的目录介绍及其用途对比表

文章目录 1.目录细则表2.目录使用说明及典型内容2.例 K8S 源码目录编排 1.目录细则表 常见 Go 项目目录的作用、典型内容、文件类型和使用场景~ 目录名作用/用途常见文件类型使用场景及详细说明典型内容举例cmd/存放可执行文件的入口点&#xff0c;通常为项目主程序入口或工具…

SAP_FI模块-公司间资产转移ABT1N操作

业务背景&#xff1a; 1、用户在OA走公司间资产的转移流程时&#xff0c;提示错误以下错误&#xff1b; 通过与OA开发的同事沟通发现&#xff0c;调用的接口是自开发的这个&#xff1a;ZFIF_AA_TRANSFER_POST&#xff0c;使用的是BDC录屏的方式&#xff0c;真正执行的事务码是A…

重学SpringBoot3-集成Redis(一)之基础功能

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;一&#xff09;之基础功能 1. 项目初始化2. 配置 Redis3. 配置 Redis 序列化4. 操作 Redis 工具类5. 编写 REST 控制器6. 测试 AP…

DAMA数据管理知识体系(第12章 元数据管理)

课本内容 12.1 引言 图12-1 语境关系图&#xff1a;元数据概念理解 元数据的信息范围很广&#xff0c;不仅包括技术和业务流程、数据规则和约束&#xff0c;还包括逻辑数据结构与物理数据结构等。它描述了数据本身&#xff08;如数据库、数据元素、数据模型&#xff09;&#x…

MokeJs使用实例

文章目录 MokeJs使用实例介绍使用安装配置文件导入配置到main.js使用 axios 发送网络请求测试&#xff08;如果不会axios&#xff0c;具体可以见上篇文章axios&#xff09;启动示例 MokeJs使用实例 介绍 使用 安装 npm install mockjs --save-dev # 或者 yarn add mockj…

python画图|两个Y轴共享X轴

【1】引言 在前述学习中&#xff0c;对使用matplotlib模块输出图形已经非常熟练&#xff0c;但常见的画图方式并未穷尽&#xff0c;如两个Y轴共享X轴就没有探索过。 对此&#xff0c;我进行了一些学习&#xff0c;获得一些心得&#xff0c;在此和大家共享。 【2】官网教程 …

点评项目-4-隐藏敏感信息、使用 redis 优化登录业务

一、隐藏敏感信息 之前我们对 /user/me 路径&#xff0c;直接返回了登录的所有用户信息&#xff0c;其中的 passward 等敏感信息也会被返回到前端&#xff0c;这是很危险的&#xff0c;故我们需要选择性的返回用户信息&#xff0c;隐藏敏感用户信息 我们可以创建一个 UserDTO…

ECCV`24 | 新加坡国立华为提出Vista3D: 实现快速且多视角一致的3D生成

文章链接&#xff1a;https://arxiv.org/pdf/2409.12193 gitbub链接&#xff1a;https://github.com/florinshen/Vista3D 亮点直击 提出了Vista3D&#xff0c;一个用于揭示单张图像3D darkside 的框架&#xff0c;能够高效地利用2D先验生成多样的3D物体。开发了一种从高斯投影到…

43 C 程序动态内存分配:内存区域划分、void 指针、内存分配相关函数(malloc、calloc、realloc、_msize、free)、内存泄漏

目录 1 C 程序内存区域划分 1.1 代码区 (Code Section) 1.2 全局/静态区 (Global/Static Section) 1.3 栈区 (Stack Section) 1.4 堆区 (Heap Section) 1.5 动态内存分配 2 void 指针&#xff08;无类型指针&#xff09; 2.1 void 指针介绍 2.2 void 指针的作用 2.3 …

Web自动化Demo-Go+Selenium

1.新建工程 使用GoLand新建工程如下&#xff1a; 打开终端输入如下命令安装Selenium go get -u github.com/tebeka/selenium 2.编写代码 package mainimport ("fmt""github.com/tebeka/selenium""log""time" )const (chromeDriver…

视频生成的黎明:100+页干货全面探讨SORA类模型(T2VI2VV2V全包括)腾讯中科大

日前&#xff0c;腾讯AI Lab和中科大联合发布了100多页的类SORA模型研究报告&#xff0c;非常全面&#xff0c;很有学习和研究价值&#xff0c;今天和大家分享下&#xff0c;内容较多&#xff0c;可后台回复【类SORA报告】获取100多页pdf。 开源地址&#xff1a;https://ailab-…

函数信号发生器的直流偏置(OFFSET)旋钮的作用及操作方法

函数信号发生器&#xff08;Function Generator&#xff09;是电子工程师和技术人员在电路设计、测试和调试中常用的设备之一。它可以生成各种标准波形&#xff0c;如正弦波、方波、三角波等&#xff0c;以及用户自定义的任意波形。在众多参数设置中&#xff0c;直流偏置&#…

2025考研今天开始预报名!攻略请查收

2025年全国硕士研究生招生考试 今天起开始预报名 有什么流程&#xff1f;需要准备哪些信息&#xff1f; 这份考研报名攻略速查收 ↓↓↓ 全国硕士研究生招生考试报名包括网上报名和网上确认两个阶段&#xff1a; 网上预报名时间为10月9日至10月12日&#xff08;每日9&#xff1…

电脑屏保设置教程 好看的电脑屏保应该怎么设置?

一、电脑自带的屏保设置&#xff0c;主题少&#xff0c;操作复杂&#xff1b; 你需要选择一个合适的屏保。在Windows系统中&#xff0c;你可以通过以下步骤找到合适的屏保&#xff1a; 右键点击桌面空白处&#xff0c;选择“个性化”&#xff1b; 在“个性化”设置中&#x…

win10家庭版配置ubantu20.04子系统

需要在本地配置一个环境去跑代码&#xff0c;代码的环境如下&#xff1a; 刚开始准备给电脑装一个双系统的&#xff0c;室友踩过坑告诉我安装wsl子系统就可以了&#xff0c;方便快捷~ 于是开始了摸索之旅&#xff01;记录如下 &#xff08;我刚开始以为一定要win10专业版&…