Nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

准备

nmap官网

原理

原理

基础知识

端口状态

port-status

端口状态信息
Open(开放的)应用程序正在这个端口上监听连接
Closed(关闭的)端口对探测做出了响应,但是现在没有应用程序在监听这个端口
Filtered(过滤的)端口没有对探测做出响应。同时告诉我们探针可能被一些过滤器(防火墙)终止了
Unfiltered(未被过滤的)端口对探测做出了响应,但是Nmap无法确定它们是关闭还是开放。
Open/Filtered端口被过滤或者是开放的,Nmap无法做出判断。
Closed/Filtered端口被过滤或者是关闭的,Nmap无法做出判断

扫描目标设置

模式示例
单个目标nmap -T4 -F 192.168.1.11
多个目标nmap 192.168.1.11 192.168.1.12 192.168.1.13
IP地址段nmap 192.168.1.11-22
随机扫描nmap -iR 10
剔除性扫描,剔除个别不想扫描的主机nmap 192.168.1.0/24-exclude 192.168.1.5

高级玩法

脚本

NSE 即Nmap脚本引擎,涵盖网络发现到检测和利用安全漏洞等多方面任务

示例

nmap -sV -sC scanme.nmap.org

type

脚本文件需要放在nmap的script目录内才可以直接使用,否则要指定全路径 linux版本的默认路径为/usr/share/nmap/scripts

nmap --script http-title 192.168.1.11
nmap --script http-title,http-methods 192.168.1.11
nmap -p80 --script http-huawei-hg5xx-vuln 192.168.1.11

高级表达式

要选择整个类别,只需使用类别的名称(请参阅脚本作为参数。例如,要运行漏洞类别,使用以下命令:

nmap --script exploit 192.168.1.11

您也可以用逗号分隔它们来运行多个类别:

nmap --script discovery,intrusive 192.168.1.11

-sC选项仅仅是--script默认选项的别名。 按文件名或文件夹选择 要执行NSE脚本文件,请使用以下命令:

nmap --script /path/to/script.nse 192.168.1.11

与类别类似,可以通过分离路径来执行多个脚本 用逗号分隔:

nmap --script /path/to/script.nse,/another/path/script2.nse 192.168.1.11

要执行文件夹中包含的所有脚本,只需要传递文件夹名称 举个栗子:

nmap --script/path/to/folder/ 192.168.1.11
nmap --script/custom-nse-scripts/ scanme.nmap.org

表达式用于描述一组脚本。 我们可以利用脚本选择表达式的场景(未利用表达式将匹配任何脚本):

  • 使用不属于exploit类别的脚本:
nmap -sV --script "not exploit" 192.168.1.11
  • 使用not,or,and运算符构造更复杂的表达式。以下表达式将匹配不在intrusive,或者dos,或者exploit类别中的任何脚本。
nmap --script "not(intrusive or dos or exploit)" -sV  192.168.1.11
  • 如果我们想要执行broadcast和discovery中的所有类别脚本。
nmap --script "broadcast and discovery" 192.168.1.11
  • 使用通配符*
nmap --script "snmp-*" 192.168.1.11
  • 结合使用通配符和表达式

例如:让我们运行名称以http-开头的所有脚本,但排除 http-slowloris,http-brute,http-form-fuzzer和http-enum脚本:

nmap --script "http-*and not(http-slowloris or http-brute or http-enum or http-form-fuzzer)" 192.168.1.11
  • 执行以http开头的但不在exploit类别中的所有脚本:
nmap --script "http-*not(exploit)" 192.168.1.11

脚本参数-script-args

-script-args 选项用于在NSE脚本中设置参数。 如:设置http-title脚本的useragent参数,可以这么写


nmap -sV --script http-title --script-args http.useragent="Mozilla 1337" 192.168.1.11

脚本名称有时是可以忽略的如下等价的表达式,注意区别

nmap -p80 --script http-trace--script-args path="xxx" 192.168.1.11

nmap -p80 --script http-trace--script-args http-trace.path="xxx" 192.168.1.11

注意,如果脚本的参数名与共享参数名称冲突时则不可以省略脚本名

脚本编写语言Lua

lua

一般约定,以下划线开头连接一串大写字母的名字(比如_VERSION)被保留用于Lua内部全局变量

Lua语言特性

  • 轻量级:它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
  • 可扩展:Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。

其它特性

  • 支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
  • 自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
  • 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
  • 通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等

脚本编写注意事项

  1. 编写的脚本的后缀为nse
  2. 编写之后的NSE脚本存放在script文件夹内,这样脚本才可以生效
  3. 必须使用--script选项进行调用Nse脚本

脚本编写规则

  1. 导入脚本编写所需库
  2. 编写脚本描述信息
  3. 确定Rule类型
  4. 编写Action

思维导图

附录

nmap 帮助说明

help1

help2

help3

参考链接