赞
踩
TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议;UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。
建立TCP连接的三次握手:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
常规扫描,通过TCP的三次连接进行扫描;
半打开扫描,没有完成三次连接进行扫描;
UDP扫描,由扫描主机发出 UDP 数据包给目标主机的UDP
Port ,并等待目标主机 Port 送回ICMP Unreachable信息。
nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取主机正在运行以及提供什么服务等信息。nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。从扫描类型一节可以得到细节。
nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定。
本实验的实验环境为一台Windows主机。
掌握windows下nmap的安装方法
双击nmap安装文件进行正常安装。
安装完成后桌面会自动添加一个nmap的快捷方式,双击该图标会出现nmap的主界面:
通过扫描本机网关熟悉nmap基本运行环境
打开cmd控制台,在控制台中输入ipconfig /all,查看本机网关信息。从下图中可以看到,本机的IP地址为:10.1.1.243,网关地址为:10.1.1.1:
将扫描目标10.1.1.1填写入target项,不修改参数直接点击scan,等待返回扫描结果。
注:当扫描状态不停的动时,意味着扫描正在进行中,当扫描状态停止时,当前的信息即为扫描返回的完整信息。
对本机所处网段进行扫描,分析本网段环境,使用方法:在扫描目标中输入:10.1.1.0/24,然后运行扫描任务。扫描任务停止后查看返回结果。
在host中列举本网段中所有存活主机,OS项指明该主机的操作系统,点击相关主机即可查看主机的详细信息。
选择“scan”菜单中“Save Scan”选项保存扫描结果,保存类型选用默认的XML格式。
然后对返回的扫描信息进行分析,分析网段中所有主机的相关信息,分析结果填写在实验报告中。
每选择不同的profile后,下面的“Command”内容就会发生变化,意味着扫描参数同时发生变化。
观察返回结果有何不同,并分析结果。
掌握nmap命令行下常用的参数
关闭图形界面的zenmap,打开cmd,在cmd下输入命令:nmap,nmap会返回使用说明。
可以看到nmap的用法:
Nmap [Scan Tyle<s>] [Options] <target specification>
其中,目标参数<target specification>
为必选项。
特别说明:下面虽然是Kali环境的说明,但在Windows也能使用。10.1.1.100用相应的主机代替。
在使用nmap时,通过在命令中加–scritp就可以调用nmap的脚本来配合扫描。Nmap自带后已经安装了很多脚本,kali中的路径如下所示。Windows相应的目录在:D:\Program Files (x86)\Nmap\scripts
脚本扩展分类包括:
可以使用种类的名字调用该分类下的全部脚本,比如–scritp vuln,不过这比较费时间,在此就不演示了。
我们来演示单个的,比如以自带的http-methods脚本为例:
首先我们要知道脚本的用法,所以需要用到–script-help。如下所示–scritp-hep后面指定脚本名称即可map --script-help=http-methods 10.1.1.100
接下来使用该脚本
nmap --script=http-methods 10.1.1.100
使用–script加载该脚本,在结果中会打印出支持的http方法
我们在脚本库中看到和http相关的脚本都是以http-的方式命名的,其他的也是一样,比如与ssh相关的都是以ssh-的方式命名。
那么我们就可以使用通配符*
来对目标机器检测时使用所有的与某种相关的脚本,比如使用所有与rpc相关的脚本。
nmap --script "rpc-*" 10.1.1.100
在使用脚本时,如果脚本支持,我们还可以通过–script-args传入参数,还是以http-method为例,我们知道一些网站会通过判断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已经和我们在命令中传入的一样了。
那么我们不仅限于使用,还想知道这其中的细节呢?我们可以使用–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
这些脚本用起来很方便,难道你不想动手试一下吗?
在自己写之前,我们先以http-method这个脚本为例看看主体结构是什么样的。Windows下用nodepad plus打开D:\Program Files (x86)\Nmap\scripts\http-methods.nse。
cat http-methods.nse
可以看到一个完整的NSE包括如下几个部分
description字段:这部分内容是介绍该脚本的功能
categories给出了该nse所在的分类。
action字段,脚本具体的执行内容,当脚本通过rule字段的检查被触发执行时,就会调用action字段定义的函数。
rule字段,描述脚本执行的规则,也就是确定脚本触发执行的条件,这个规则是一个lua函数,返回值只有true和false两种,只有返回true时,action中的函数才会执行。
Nmap的扩展脚本语言都基于lua来开发的,执行也是调用了内部封装的lua解释器。正常情况下,调用任何一个扩展脚本会首先执行nse_main.lua,该脚本主要做了以下几件事:加载一些Nmap的核心库(nselib文件夹中);定义多线程函数;定义输出结果处理函数;读取、加载扩展脚本;定义扩展脚本函数接口;执行扩展脚本。
扩展脚本执行的规则在nse_main.lua中有定义:
测试如下
nmap --script test 10.1.1.100
也就是说,prerule和postrule是在开始和结束运行,并且只运行一次,hostrule是扫描一个主机就运行一次,有N个主机就会运行N次,portrule是扫描到一个端口就运行一次,有N个端口就运行N次。
以http-method为例,只有一个portrule,就是先端口扫描,再运行。
了解了这些基础后,我们可以写一个简单的nse脚本测试:
测试结果如图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。