本文主要是介绍linux之NAMP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
linux之NAMP
Nmap(Network Mapper)是一个开源的网络扫描和安全审计工具。它被设计用来快速地扫描大型网络,尽管它也可以对单个主机进行有效的扫描。Nmap利用原始IP数据包以多种方式探测目标网络上的主机、服务(应用程序名称和版本)、操作系统版本、使用的过滤器/防火墙类型、以及许多其他属性。
主要特性
- 主机发现:确定网络上哪些主机是活动的。
- 端口扫描:确定目标主机上哪些端口是开放的。
- 服务和版本检测:尝试确定连接到开放端口的应用程序和服务的名称及版本。
- 操作系统检测:通过分析响应数据包来推断目标主机运行的操作系统类型。
- 脚本扫描:使用Nmap Scripting Engine(NSE)执行对目标的进一步探测。NSE允许用户编写(或下载)脚本来执行更广泛的检查,这些检查可能涉及到漏洞探测、网络发现等。
- 网络发现和拓扑图:生成网络的图形表示,显示网络中的设备如何相互连接。
namp安装
在Linux上安装Nmap
大多数Linux发行版都通过其包管理系统提供Nmap。
Debian/Ubuntu:
sudo apt-get update
sudo apt-get install nmap
CentOS/RHEL:
#CentOS/RHEL 7及以下版本:
sudo yum install nmap
#CentOS/RHEL 8及以上版本:
sudo dnf install nmap
Fedora:
sudo dnf install nmap
Arch Linux:
sudo pacman -S nmap
在Windows上安装Nmap
在Windows上,Nmap提供了一个图形用户界面版本称为Zenmap。可以从Nmap官方网站下载安装程序:
-
访问Nmap官方下载页面。
-
下载适用于Windows的Nmap安装程序(.exe文件)。
-
双击下载的文件并遵循安装向导的指示完成安装。
在MacOS上安装Nmap
在MacOS上使用Homebrew来安装Nmap:
首先,打开终端。
如果没有安装Homebrew,可以通过以下命令安装:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
使用Homebrew安装Nmap:
brew install nmap
使用源代码安装
如果操作系统没有预打包的Nmap,或者想要最新版本的Nmap,可以从源代码编译安装。这通常涉及到下载最新的源代码压缩包,解压缩,编译,然后安装:
wget https://nmap.org/dist/nmap-<version>.tar.bz2
tar jxvf nmap-<version>.tar.bz2
cd nmap-<version>
./configure
make
sudo make install
请将替换为希望下载的Nmap版本号。
以上是Nmap的基本安装方法。
在大多数情况下,使用包管理器或官方提供的安装程序是最简单、最快捷的安装方式。
基本使用示例
基本扫描:扫描目标主机(例如192.168.1.1)的1000个最常用端口。
nmap 192.168.1.1
#Ping扫描(不扫描端口),确定活动主机
nmap -sn 192.168.1.0/24
特定端口扫描:扫描目标主机的特定端口(例如22,80,443)。
nmap -p 22,80,443 192.168.1.1
操作系统检测:
nmap -O 192.168.1.1
服务版本检测:
nmap -sV 192.168.1.1
使用NSE脚本:
nmap --script=<脚本名> 192.168.1.1
网络发现和拓扑图:
#生成网络拓扑图(需要Nmap的图形用户界面Zenmap):
zenmap
[!TIP]
Zenamp
Zenmap是Nmap的官方图形用户界面(GUI),它使得Nmap的使用变得更加直观和用户友好。Zenmap不仅提供了一个易于使用的图形界面来执行Nmap扫描,还包括了高级功能,如保存扫描结果的能力、比较扫描结果、和自动化复杂的扫描任务。
Zenmap的安装
- 在Windows上安装Zenmap
- 访问Nmap官方下载页面。
- 下载适用于Windows的Nmap安装程序(包括Zenmap)。
- 双击下载的安装程序文件,并遵循安装向导的指示完成安装。
在Linux上安装Zenmap
在一些Linux发行版中,Zenmap可能不包括在默认的仓库中。对于那些包含Zenmap的发行版,使用包管理器进行安装。Debian/Ubuntu:
sudo apt-get update sudo apt-get install zenmap
Fedora:
sudo dnf install nmap-frontend
请注意,随着时间的推移,一些Linux发行版可能会从其仓库中移除Zenmap,或者需要添加额外的仓库来安装Zenmap。
在MacOS上安装Zenmap
在MacOS上,通过下载Nmap官方提供的.pkg安装文件来安装Zenmap。
- 访问Nmap官方下载页面。
- 下载适用于MacOS的.pkg文件。
- 双击.pkg文件并遵循安装向导的指示完成安装。
Zenmap的基本用法
- 打开Zenmap:安装完成后,启动Zenmap。
- 选择目标:在“目标”框中输入扫描的IP地址、主机名或网络段。
- 选择扫描类型:从“配置文件”下拉菜单中选择预设的扫描类型,如“快速扫描”、“全面扫描”等,或者自定义扫描命令。
- 启动扫描:点击“扫描”按钮开始扫描过程。
- 查看结果:扫描完成后,结果将显示在主界面。您可以查看开放的端口、运行的服务及其版本、操作系统猜测等信息。
- 保存和比较结果:保存扫描结果以供将来参考,并且可以使用Zenmap比较不同时间点的扫描结果,以便发现网络变化。
NAMP奇淫巧技
利用NSE(Nmap Scripting Engine)进行扩展扫描
Nmap的脚本引擎(NSE)是其最强大的特性之一,能够执行各种网络安全任务,如漏洞检测、后门检测、和网络发现等。
#示例:使用NSE脚本扫描SMB漏洞
nmap --script smb-vuln* -p 445 <目标IP>
绕过防火墙和IDS/IPS
Nmap提供了多种技术来绕过网络中的防火墙和入侵检测系统。
#片段化扫描:通过将扫描包分成小片段,使得某些防火墙和IDS难以检测到扫描活动。
nmap -f <目标IP>
#使用Decoy伪装扫描:同时指定多个“诱饵”IP,使得防御者难以确定真正的扫描来源。
nmap -D RND:10 <目标IP>
操作系统和服务版本探测的高级用法
通过发送特定的TCP和UDP包到目标机器,并分析响应,Nmap可以推断操作系统版本和运行的服务。
#操作系统探测:
nmap -O --osscan-guess <目标IP>
#服务版本探测:
nmap -sV --version-intensity 9 <目标IP>
输出格式化
Nmap允许以多种格式输出扫描结果,便于报告或进一步分析。
#输出为XML格式:
nmap -oX output.xml <目标IP>
#输出所有扫描结果到一个文件(包括正常、XML、Grepable格式):
nmap -oA output <目标IP>
使用自定义扫描方式
Nmap提供了灵活的扫描选项,允许用户根据需要自定义扫描类型。
ACK扫描(用于映射防火墙规则):
nmap -sA <目标IP>
UDP扫描(发现开放的UDP端口):
nmap -sU <目标IP>
NSE脚本
基本示例
--[[假设我们要编写一个脚本,用于检查目标服务器是否运行HTTP服务,并获取其标题(title)。
--[[
NSE脚本通常包含以下几个部分:
描述(description):脚本的简短描述。
作者(author):脚本作者的名字。
许可证(license):脚本的许可证类型。
类别(categories):脚本所属的类别(如"safe", "intrusive", "discovery", "vuln"等)。
依赖(dependencies):脚本运行所依赖的其他NSE脚本。
入口点(entry point):脚本的主要逻辑部分,通常是action函数。
--]]description = "catch http services"
author = "秋月霜风"
license = "MIT1.0"
categories = {"discovery", "safe"}-- @param host 目标主机
-- @param port 目标端口
function action(host, port)-- 使用Nmap的http库发起请求local http = require("http")local response = http.get(host, port)if response.status then-- 从响应中提取标题local title = response.body:match("<title>(.-)</title>")if title thenreturn ("发现标题: %s"):format(title)elsereturn ("未发现标题")endelsereturn ("无法连接到HTTP服务")end
end
DIY FUNNY NSE
description = [[
检测目标网站使用的Web框架。
识别一些流行的Web框架。
]]author = "秋月霜风"
license = "MIT1.0"
categories = {"discovery", "safe"}local http = require "http"
local stdnse = require "stdnse"
local string = require "string"-- Web框架指纹库
local frameworks = {{name = "Django", pattern = "csrftoken=", path = "/"},{name = "Ruby on Rails", pattern = "csrf-token", path = "/"},{name = "Express", pattern = "X-Powered-By: Express", path = "/"},{name = "Flask", pattern = "flask-session=", path = "/"}
}-- 主函数
function action(host, port)local detected_frameworks = {}for _, framework in ipairs(frameworks) dolocal response = http.get(host, port, framework.path)if response.status and response.body and string.find(response.body, framework.pattern) thentable.insert(detected_frameworks, framework.name)elseif response.header and response.header["X-Powered-By"] and string.find(response.header["X-Powered-By"], framework.pattern) thentable.insert(detected_frameworks, framework.name)endendif #detected_frameworks > 0 thenreturn true, stdnse.format_output(true, detected_frameworks)elsereturn false, "未能识别Web框架。"end
end
这篇关于linux之NAMP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!