文章目录

  • 实验简述
  • 实验环境
  • 实验内容
    • 1、初识NSE
    • 2、NSE参数
    • 3、输出细节
    • 4、脚本格式
    • 5、编写脚本
  • 实验总结

实验简述

Nmap具有强大的脚本引擎NSE(Nmap Scripting Engine),它允许用户编写(和共享)简单的脚本(使用lua编程语言)自动化各种网络任务。

本次实验目的在于掌握Nmap脚本的基本使用方法。

实验环境

kali,IP地址:192.168.11.11

Linux,IP地址:192.168.11.21

实验内容

1、初识NSE

Nmap提供的脚本相关命令行参数如下:

  • -sC: 等价于–script=default,使用默认类别的脚本进行扫描 可更换其他类别
  • –script=: 使用某个或某类脚本进行扫描,支持通配符描述
  • –script-args=<n1=v1,[n2=v2,…]>: 为脚本提供默认参数
  • –script-args-file=filename: 使用文件来为脚本提供参数
  • –script-trace: 显示脚本执行过程中发送与接收的数据
  • –script-updatedb: 更新脚本数据库
  • –script-help=: 显示脚本的帮助信息,其中部分可以逗号分隔的文件或脚本类别

该步骤简单介绍脚本的相关使用。

在使用Nmap时,通过--script=脚本名语句来调用脚本,而且Nmap自带众多脚本,路径如下:

这些脚本大致分为以下几种:

  • auth 处理身份验证
  • broadcast 网络广播
  • brute 暴力猜解
  • default 默认
  • discovery 服务发现
  • dos 拒绝服务
  • exploit 漏洞利用
  • external 外部扩展
  • fuzzer 模糊测试
  • intrusive 扫描可能造成不良后果
  • malware 检测后门
  • safe 扫描危害较小
  • version 版本识别
  • vuln 漏洞检测

在调用脚本时,可以使用种类名来调用该分类下的全部脚本,如--scritp vuln,但是比较费时间,在此就不演示,本次以 http-methods 脚本为例,來演示脚本的大致使用。

使用--script-help脚本名来查看脚本的说明和用法,比如查看 http-methods.nse 脚本信息:

使用http-methods.nse脚本来对目标主机进行探测,用于得到目标支持的http请求方式

nmap --script-help=http-methods 192.168.11.21


可以看到探测出来目标主机支持的http请求有 GET、POST、HEAD、OPTIONS 四种。

因为所有的脚本都是以服务名来命名,比如 http 相关的脚本就是 http 开头,ssl 相关脚本是以 ssl开头:

因此在调用脚本时,可以使用通配符 * 来调用相关服务下的所有脚本,以mysql服务为例,所有mysql脚本如下:

使用语句 --script "mysql*" 来选择mysql相关的所有脚本,探测结果如下:

nmap --script "mysql*" 192.168.11.21

2、NSE参数

Nmap在使用脚本时,如果脚本支持,我们还可以通过 --script-args 传入参数。

已知一些网站会通过判断 user-agent 来判断请求是否合法,那Nmap在请求时有没有带上自己的特征呢?同样使用刚才的 http-methos.nse 脚本,打开wireshark抓包,启动以下命令:

nmap --script=http-methods.nse 192.168.11.21


可以看到在请求包的 User-Agent 字段信息包含 Nmap Scripting Engine,也就是代表该请求来自 Nmap的脚本,如果目标主机对该请求进行了过滤,那么就无法成功探测。

因此需要加入一定的参数,来改变 User-Agent 字段信息,绕过过滤,使用 --script-args 修改 User-Agent 的值

命令如下:

nmap --script=http-methods --script-args http.useragent="Mozilla 42" 192.168.11.21


重新抓包,发现 User-Agent 字段内容已经更改

还有其他脚本参数,后续继续学习。

3、输出细节

在使用脚本时,可以添加 --script-trace 参数来打印出所有交互数据包的细节

nmap --script=http-methods --script-trace 192.168.11.21


使用 -d1-9 来进入调试模式,查看扫描信息,数字越大,输出越详细,以 d2 为例:

nmap --script=http-methods -d2 192.168.11.21

4、脚本格式

Nmap脚本使用 lua 语言编写,采用严格的格式规范,一个完整的NSE包括以下几个部分:

  • 引用API(local aaa require(“aaa”))
  • description字段:脚本的介绍及描述
  • author字段:作者信息
  • categories字段:脚本分类信息
  • rule字段:脚本触发执行的条件
  • action字段:脚本执行内容

依然以 http-methods.nse 脚本为例,来展示nse的组成:

1.引用API部分:使用 require 函数调用模块

2.description字段:脚本的介绍及描述

3.author字段:作者信息

4.categories字段:脚本分类信息

5.rule字段:描述脚本执行的规则,也就是确定脚本触发执行的条件,这个规则是一个lua函数,返回值只有true和false两种,只有返回true时,action中的函数才会执行

6.action字段:脚本具体的执行内容,当脚本通过rule字段的检查被触发执行时,就会调用action字段定义的函数

Nmap的扩展脚本语言都基于lua来开发的,执行也是调用了内部封装的lua解释器。正常情况下,调用任何一个扩展脚本会首先执行nse_main.lua,该脚本主要做了以下几件事:

  • 加载一些Nmap的核心库(nselib文件夹中)

    定义多线程函数

    定义输出结果处理函数

    读取、加载扩展脚本

    定义扩展脚本函数接口

    执行扩展脚本

扩展脚本执行的规则在nse_main.lua中有定义:

具体的执行规则如下:

  • prerule:在扫描任何主机之前,prerule函数运行一次
  • hostrule:在扫描一个主机后运行一次
  • portrule:在扫描一个主机的端口后运行一次
  • postrule:在全部扫描完毕以后运行一次

可以编写一个nse文件进行简单的验证:

其中action函数是在 hostrule 或 portsule 返回 true 时,才会,因为 prerule 和 postrule 没有判断条件。

执行结果如下:

也就是说,

  • prerule 和 postrule 是在开始和结束运行,并且只运行一次
  • hostrule 是扫描一个主机就运行一次,有N个主机就会运行N次
  • portrule 是扫描到一个端口就运行一次,有N个端口就运行N次

了解了这些后,我们试着编写一个简单的脚本,来体验一下NSE的功能。

5、编写脚本

在开始编写脚本之前,还应该对NSE中数据的传递做简单了解

在脚本引擎中,用户可以轻松访问Nmap已经了解的有关目标主机的信息。该数据作为参数传递给NSE脚本的 action 方法,参数 host 和 port 是 lua 表,其中包含脚本执行的目标的信息。

每个表里面所含有的变量:

host 表:

host:
该表作为参数传递给规则和操作功能。
host.os:
操作系统匹配表数组。
host.ip:
包含目标主机IP地址的字符串表示形式。
host.nam:
包含表示为字符串的扫描目标主机的反向DNS条目。
host.targetname:
包含在命令行上指定的主机名。
host.reason:
包含目标主机为何处于其当前状态的原因的字符串表示形式。
host.reason_ttl:
包含响应数据包的TTL值,用于确定目标主机到达时的状态。
host.directly_connected:
一个布尔值,指示目标主机是否直接连接到运行Nmap的主机(即与该主机处于同一网段)。
host.mac_addr:
MAC地址 目标主机的名称(六字节长的二进制字符串)(如果有),否则nil。
host.mac_addr_next_hop:
到主机的路由中第一跳的MAC地址,或者 nil如果不可用。
host.mac_addr_src:
我们自己的MAC地址,用于连接到主机(我们的网卡或(带有 --spoof-mac) 欺骗性地址)。
host.interface:
包含接口名称的字符串(dnet样式) 通过它向主机发送数据包。
host.interface_mtu:
MTU(最大传输单位)host.interface,如果未知,则为0。
host.bin_ip:
目标主机的IP地址为4字节(IPv4)或16字节(IPv6)字符串。
host.bin_ip_src:
我们主机的(正在运行的Nmap)源IP地址为4字节(IPv4)或16字节(IPv6)字符串。
host.times:
该表包含主机的Nmap时序数据。
host.traceroute:
这是使用该–traceroute选项时出现的traceroute跃点数组。
host.os_fp:
如果执行了OS检测,则这是一个字符串,其中包含主机的OS指纹。

port 表:

port.number:
目标端口的端口号。
port.protocol:
目标端口的协议,有效值为 “tcp"和"udp”。
port.service:
包含 port.numberNmap 服务检测所检测到的正在运行的服务的字符串表示形式 。
port.reason:
包含目标端口为何处于其当前状态的原因的字符串表示形式(由提供port.state)。
port.reason_ttl:
包含响应数据包的TTL值,用于确定目标端口到达时的状态。此响应数据包是也用于设置的数据包port.reason。
port.state:
包含有关端口状态的信息。服务脚本只能再次运行。
port.version相关:
此项是一个表,其中包含Nmap版本扫描引擎检索到的信息。

参考 Nmap官方文档:https://nmap.org/book/nse-api.html

了解了NSE中数据的传递,尝试写一个简单的脚本。

实现的功能是当发现目标开放端口后,便输出"IP *** open *** port"的语句,严格按照格式来编写一个完整的脚本:

description = [[
this is my fisrt nmap script.
]]author = {"wx"}categories = {"default"}portrule = function(host, port)return true
endaction = function(host, port)return string.format("IP <%s> open <%d> port", host.ip, port.number)-- "IP".. host .."open".. port.number .."port"
end

运行结果:

那如果想在指定端口下输出结果呢?以 80 端口为例,此时代码如下:

只需要返回指定的端口,即当判断是 80 端口时,就会返回True,然后执行 action 函数。

运行结果:

至此,实验基本结束。

实验总结

本次实验了解了Nmap的脚本引擎NSE,学习了在Nmap中如何使用脚本以及脚本的编写,通过学习编写了简单的测试脚本。

【网络攻防课实验】五:Nmap脚本引擎 (NSE) 的使用及脚本编写相关推荐

  1. 20155201 网络攻防技术 实验六 信息搜集与漏洞

    20155201 网络攻防技术 实验六 信息搜集与漏洞 一.实践内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 漏洞扫描: ...

  2. 20155235 《网络攻防》 实验四 恶意代码分析

    20155235 <网络攻防> 实验四 恶意代码分析 实验目的 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具 ...

  3. #20155235 《网络攻防》 实验二 后门原理与实践

    20155235 <网络攻防> 实验二 后门原理与实践 实验目的 建立一个后门连接是如此的简单,功能又如此强大.通过亲手实践并了解这一事实,从而提高自己的安全意识 . 实验内容 (1)使用 ...

  4. 20155235 《网络攻防》 实验八 Web基础

    20155235 <网络攻防> 实验八 Web基础 实验内容 Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表 ...

  5. 20145209刘一阳《网络对抗》实验五:MSF基础应用

    20145209刘一阳<网络对抗>实验五:MSF基础应用 主动攻击 首先,我们需要弄一个xp sp3 English系统的虚拟机,然后本次主动攻击就在我们kali和xp之间来完成. 然后我 ...

  6. 《网络攻防》实验三:免杀原理与实践

    <网络攻防>实验三:免杀原理与实践 世界上公认的第一个在个人电脑上广泛流行的病毒是1986年初诞生的大脑(C-Brain)病毒,编写该病毒的是一对巴基斯坦兄弟,两兄弟经营着一家电脑公司,以 ...

  7. Linux中nmap脚本的目录,在Linux中,如何使用Nmap脚本引擎(NSE )脚本

    Nmap是一个流行的,功能强大,跨平台的命令行网络安全扫描和探测工具,您可以使用它来查找所有活动主机的IP地址,扫描在这些主机上运行的开放端口和服务等等. Nmap的一个有趣的特性是Nmap脚本引擎( ...

  8. 《网络攻防》第五周学习总结

    1.漏洞分析之数据库评估(一) web层与数据库连接的安全漏洞在安全测试中并不少见,kali中常用的数据库评估软件如下 1.1 BBQSQL BBQSQL是一种用Pyhthon写的SQL盲注框架.当发 ...

  9. 网络对抗技术 实验五

    学号:201521430027 中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验五 综合渗透     学生姓名 ...

最新文章

  1. python语音识别终极指南
  2. NeurIPS 2020 接收率创史低,千篇论文被摘要拒稿,官方:错误率只有 6%
  3. 大厂程序媛的特殊烦恼:男朋友工资只有自己的60%,天天阴阳怪气!
  4. 剖析ifstream打开含中文路径名文件失败的原因(转)
  5. 二叉查找树的C语言实现(二)
  6. matplotlib包的学习(一)
  7. 五、oracle 表的管理
  8. canal原理的一些学习-2(HA 模式搭建)
  9. C++set容器-内置类型指定排序
  10. 【java图文趣味版】数组元素的访问与遍历
  11. Java 14 来了!
  12. python3数据库框架_Python3 MySQL 数据库连接:安装pymysql(mysql数据库驱动), sqlalchemy(ORM框架)。...
  13. Redis进阶实践之十三 Redis的Redis-trib.rb脚本文件使用详解
  14. 自动驾驶1-6: 推动决策和行动Driving Decisions and Actions
  15. nanohttpd文件服务器,NanoHttpd 轻量级的 HTTP 服务器
  16. html鼠标经过图片有浮起效果,CSS实现鼠标滑过卡片上浮效果的示例
  17. C-lodop打印控件 实现批量打印
  18. 爬虫获取微博首页热搜
  19. 【C语言基础】——6个人摇骰子
  20. pxe引导装机没有识别到LAN

热门文章

  1. 云服务器代理_虚拟主机代理_服务器代理-谈谈IDC加盟合作那些事!
  2. [易飞]供应商料件特殊检验方式优先级大于检验方式
  3. Imitation_Learning
  4. [BZOJ2983]reading 矩阵快速幂
  5. android tv fc模拟器,NES Emulator TV
  6. 基金重止盈, 股票重止损, 两者下跌应该这样应对
  7. 分不清ARM和X86架构,别跟我说你懂CPU!
  8. 亚马逊vedios模块怎么填?站斧浏览器能制作关联视频吗?
  9. 网络流之最大流 EK/Dinic/Isap算法 学习笔记
  10. 开源记忆卡片 anki 2.1.18最新版本介绍及安装