Nmap网络扫描

简介

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

nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。从扫描类型一节可以得到细节。

nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定。

Nmap在命令行下的用法

其中,目标参数<target specification>为必选项。

例1:判断10.1.1.100的操作系统:nmap -O -T5 10.1.1.100

例2:在测试中为了不在服务器10.1.1.100上留下连接痕迹,可以采用半开扫描(即非TCP三次握手连接):nmap -sS 10.1.1.100

例3:扫描目标主机10.1.1.100所有端口(1-65535):nmap -p 1-65535 10.1.1.100

Nmap的脚本使用

1.Nmap在kali中的路径如下所示

脚本扩展分类包括:auth 处理身份验证,broadcast 网络广播,brute 暴力猜解,default 默认,
discovery 服务发现,dos 拒绝服务,exploit 漏洞利用……

2.以http-methods脚本为例
  • 知道脚本的用法,所以需要用到--script-help。
    nmap --script-help=http-methods 10.1.1.100
  • 使用该脚本。
    nmap --script=http-methods 10.1.1.100

  • 使用通配符”*”来对目标机器检测时使用所有的与某种相关的脚本,比如使用所有与rpc相关的脚本。
    nmap --script "rpc-*" 10.1.1.100

3.一些网站会通过判断user-agent来判断请求是否合法,那nmap在请求时有没有带上自己的特征呢?
  • 打开wireshark抓包,同时启动下面的命令看看

    nmap --script=http-methods 10.1.1.100

  • 抓包如下

  • 右键跟踪http流

    可以看到在user-agent中有nmap的标志“nmap scripting engine”,如果目标站点根据这个标志拒绝nmap的请求时该怎么办呢?
    此时我们就可以通过--script-args修改useragent,命令如下。
    nmap --script=http-methods --script-args http.useragent="Mozilla 42" 10.1.1.100

  • 抓包可以看到此时的useragent已经和我们在命令中传入的一样了

4.我们不仅限于使用,还想知道这其中的细节呢?
  • 我们可以使用--script-trace打印出所有收发的数据。
    nmap --script-trace --script=http-methods 10.1.1.100

  • 使用--packet-trace查看所有发送和收到的数据包
    nmap --packet-trace --script=http-methods 10.1.1.100

  • 也能使用-d进入调试模式,-d后面需要跟数字(1-9),数字越大,输出越详细,以-d3为例。
    nmap -d3 --script=http-methods 10.1.1.100

5.http-method这个脚本为例看看主体结构
  • cat http-methods.nse

  • 完整的NSE包括如下几个部分:
    description字段:这部分内容是介绍该脚本的功能
    categories字段:给出了该nse所在的分类
    action字段:脚本具体的执行内容,当脚本通过rule字段的检查被触发执行时,就会调用action字段定义的函数
    rule字段:描述脚本执行的规则,也就是确定脚本触发执行的条件,这个规则是一个lua函数,返回值只有true和false两种,只有返回true时,action中的函数才会执行

  • Nmap的扩展脚本语言都基于lua来开发的,执行也是调用了内部封装的lua解释器。正常情况下,调用任何一个扩展脚本会首先执行nse_main.lua,其定义的执行规则如下。

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

Nmap的脚本编写

Halcyon是一个开源的专门设计用于开发Nmap脚本的IDE。

新建一个新项目,生成了一个nse脚本的模板文件。

  • 编写个简单的nmap脚本实现对web服务器的检测功能。做一个简单的功能:如果发现目标开放了80端口,并在这个端口上运行http服务,则输出”this is a webserver”。
  • description字段没有什么好修改的。关键部分要用到portrule规则。修改return ture为:
    return port.protocol == "tcp" and port.number == 80 and port.service == "http" and port.state =="open"

    port的protocol,number,service,state是哪儿来的?
    这些是nmap提供给我们的API。API的核心功能就是向脚本提供关于主机和端口的信息。

  • 这样当目标服务器上开放的80端口运行着http服务时,就命中了规则,接着去执行action部分,再来编写action部分的代码。

  • 然后ctrl+s保存,再点击file->update script DB。接着测试一下:
    nmap --script demo 10.1.1.100

    可以看到在扫描出80端口开放之后就打印出了This is a WebServer。

Nmap的API和库文件

Nmap中的引擎会向脚本传递如下两个Lua table类型的参数:host table,port table
这两个table中包含了目标主机的host和port信息。

1.host

以mac_addr为例,看看通过它能得到什么信息。

我们想要得到的是mac_addr,所以在action中return回host.mac_addr。通过host.mac_addr获取的mac地址是二进制编码的,我们要转换成字符串,需要引入stdnse库,stdnse包中有一个format_mac函数,能够将host.mac_addr转换成字符串。

保存并update script db
测试 nmap --script apitest 10.1.1.100

2.port

脚本就是通过API提供的protocol,number,service,state判断80端口开放,运行着http,然后打印出this is a webserver的。

结果,可以看到分别打印出了对应的protocol,图中都是tcp。


 


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值