Nmap在实战中的高级用法

Nmap提供了四项基本功能(主机发现、端口扫描、服务与版本侦测、OS侦测)及丰富的脚本库。Nmap既能应用于简单的网络信息扫描,也能用在高级、复杂、特定的环境中:例如扫描互联网上大量的主机;绕开防火墙/IDS/IPS;扫描Web站点;扫描路由器等等。

简要回顾Nmap简单的扫描方式:

  • view source
    1 全面扫描:nmap-T4 -A targetip
  • 2 主机发现:nmap-T4 -sn targetip
  • 3 端口扫描:nmap-T4 targetip
  • 4 服务扫描:nmap-T4 -sV targetip
  • 5 操作系统扫描:nmap-T4 -O targetip 
    上述的扫描方式能满足一般的信息搜集需求。而若想利用Nmap探索出特定的场景中更详细的信息,则需仔细地设计Nmap命令行参数,以便精确地控制Nmap的扫描行为。

下面列举比较实用的高级应用场景和技巧。

1     Nmap高级选项
1.1  查看本地路由与接口
Nmap中提供了–iflist选项来查看本地主机的接口信息与路由信息。当遇到无法达到目标主机或想选择从多块网卡中某一特定网卡访问目标主机时,可以查看nmap –iflist中提供的网络接口信息。

nmap –iflist

1.2  指定网口与IP地址
在Nmap可指定用哪个网口发送数据,-e <interface>选项。接口的详细信息可以参考–iflist选项输出结果。

示例:

nmap -e eth0 targetip

Nmap也可以显式地指定发送的源端IP地址。使用-S <spoofip>选项,nmap将用指定的spoofip作为源端IP来发送探测包。

另外可以使用Decoy(诱骗)方式来掩盖真实的扫描地址,例如-D ip1,ip2,ip3,ip4,ME,这样就会产生多个虚假的ip同时对目标机进行探测,其中ME代表本机的真实地址,这样对方的防火墙不容易识别出是扫描者的身份。

nmap -T4 -F -n -Pn -D192.168.1.100,192.168.1.101,192.168.1.102,ME 192.168.1.1

1.3  定制探测包
Nmap提供–scanflags选项,用户可以对需要发送的TCP探测包的标志位进行完全的控制。可以使用数字或符号指定TCP标志位:URG, ACK, PSH,RST, SYN,and FIN。

例如,

nmap -sX -T4 –scanflags URGACKPSHRSTSYNFINtargetip

此命令设置全部的TCP标志位为1,可以用于某些特殊场景的探测。

另外使用–ip-options可以定制IP包的options字段。

使用-S指定虚假的IP地址,-D指定一组诱骗IP地址(ME代表真实地址)。-e指定发送探测包的网络接口,-g(–source- port)指定源端口,-f指定使用IP分片方式发送探测包,–spoof-mac指定使用欺骗的MAC地址。–ttl指定生存时间。

2     扫描防火墙
防火墙在今天网络安全中扮演着重要的角色,如果能对防火墙系统进行详细的探测,那么绕开防火墙或渗透防火墙就更加容易。所以,此处讲解利用Nmap获取防火墙基本信息典型的用法。

为了获取防火墙全面的信息,需尽可能多地结合不同扫描方式来探测其状态。在设计命令行参数时,可以综合网络环境来微调时序参数,以便加快扫描速度。

SYN扫描

首先可以利用基本的SYN扫描方式探测其端口开放状态。

nmap -sS -T4 www.91ri.org

扫描输出为:

  • view source
    1 All 997 ports are filtered
  • 2 PORT    STATE  SERVICE
  • 3 80/tcp  open   http
  • 4 113/tcp closed auth
  • 5 507/tcp open   crs 
    我们可以看到SYN方式探测到3个端口开放,而有997个端口被过滤。Nmap默认扫描只扫描1000个最可能开放的端口,如果想扫描全部的端口.

使用命令nmap -sS -T4-p- www.91ri.org

FIN扫描

然后可以利用FIN扫描方式探测防火墙状态。FIN扫描方式用于识别端口是否关闭,收到RST回复说明该端口关闭,否则说明是open或filtered状态。

nmap -sF -T4 www.91ri.org

  • view source
    01 PORT      STATE         SERVICE
  • 02 7/tcp     open|filtered echo
  • 03 9/tcp     open|filtered discard
  • 04 11/tcp    open|filtered systat
  • 05 13/tcp    open|filtered daytime
  • 06 23/tcp    open|filtered telnet
  • 07 25/tcp    open|filtered smtp
  • 08 37/tcp    open|filtered time
  • 09 79/tcp    open|filtered finger
  • 10 80/tcp    open|filtered http

11 更多端口,此处省略 
ACK扫描

然后利用ACK扫描判断端口是否被过滤。针对ACK探测包,未被过滤的端口(无论打开、关闭)会回复RST包。

nmap -sA -T4 www.91ri.org

扫描输出为:

  • view source
    1 Not shown: 997 unfiltered ports
  • 2 PORT      STATE    SERVICE
  • 3 135/tcp   filtered msrpc
  • 4 1434/tcp  filtered ms-sql-m
  • 5 32777/tcp filtered sometimes-rpc17 
    从结果可以997个端口是未被过滤的(unfiltered),而3个(135/1434/32777)被过滤了。所以,将ACK与FIN扫描 的结果结合分析,我们可以找到很多开放的端口。例如7号端口,FIN中得出的状态是:open或filtered,从ACK中得出的状态是 unfiltered,那么该端口只能是open的。

Window扫描

当然也可以利用Window扫描方式,得出一些端口信息,可以与之前扫描分析的结果相互补充。Window扫描方式只对某些TCPIP协议栈才有效。

window扫描原理与ACK类似,发送ACK包探测目标端口,对回复的RST包中的Window size进行解析。在某些TCPIP协议栈实现中,关闭的端口在RST中会将Window size设置为0;而开放的端口将Window size设置成非0的值。

nmap -sW -p- -T4 www.91ri.org

输出结果:

  • view source
    1 PORT      STATE    SERVICE
  • 2 7/tcp     open     echo
  • 3 9/tcp     open     discard
  • 4 11/tcp    open     systat
  • 5 13/tcp    open     daytime
  • 6 更多端口,此处省略 
    在采用多种方式获取出防火墙状态后,可以进一步进行应用程序与版本侦测及OS侦测。

此处不再赘述!91ri.org:小编这里份关于使用nmap突破防火墙的文章 推荐一下《Nmap绕过防火墙&脚本的使用》

3     扫描路由器
Nmap内部维护了一份系统与设备的数据库(nmap-os-db),能够识别数千种不同系统与设备。所以,可以用来扫描主流的路由器设备。

3.1  扫描思科路由器
nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16

思科路由器会在上述端口中运行了常见的服务。列举出上述端口开放的主机,可以定位到路由器设备可能的IP地址及端口状态。

3.2  扫描路由器TFTP
nmap –sU –p69 –nvv target

大多数的路由器都支持TFTP协议(简单文件传输协议),该协议常用于备份和恢复路由器的配置文件,运行在UDP 69端口上。使用上述命令可以探测出路由器是否开放TFTP。

3.3  扫描路由器操作系统
与通用PC扫描方式类似,使用-O选项扫描路由器的操作系统。-F用于快速扫描最可能开放的100个端口,并根据端口扫描结果进一步做OS的指纹分析。

nmap -O -F -n 192.168.1.1

4     扫描互联网
Nmap内部的设计非常强大灵活,既能扫描单个主机、小型的局域网,也可以扫描成千上万台主机从中发掘用户关注的信息。扫描大量主机,需要对扫描时序等参数进行仔细的优化。

4.1  发现互联网上web服务器
nmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt

随机地产生10万个IP地址,对其80端口进行扫描。将扫描结果以greppable(可用grep命令提取)格式输出到nmap.txt文件。

可以使用grep命令从输出文件提取关心的细节信息。

4.2  统计互联网主机基本数据
  Nmap的创始人Fyodor在2008年的Black Hat大会发表一篇演讲,讲的是如何使用Nmap来扫描互联网(Nmap: Scanning the Internet),资料地址:http://nmap.org/presentations/BHDC08/

  Fyodor进行互联网扫描的初衷是统计出网络经验数据并用之优化Nmap的性能。例如,根据统计出每个端口开放的概率,优先扫描常见端口,以节省用户的时间。

产生随机IP地址

  产生100万个随机的IP地址,并将之保存到文件中,方便后续扫描时作为参数输入。

nmap -iR 1200000 -sL -n | grep ”not scanned” | awk ’{print $2}’ | sort -n | uniq >! tp; head -25000000 tp >! tcp-allports-1M-IPs; rm tp

上述命令含义:随机生成1200000个IP地址(-iR 120000),并进行列表扫描(-sL,列举出IP地址,不进行真正的扫描),不进行dns解析操作(-n),这样将产生Nmap列表扫描的结果。在此 结果中搜出未扫描的行(grep “not scanned”),打印出每一行的第二列内容(awk ‘{print $2}’,也就是IP地址),然后对获取到的IP地址进行排序(sort -n),然后剔除重复IP地址,将结果保存到临时文件tp,再取出前1000000个IP地址保存到tcp-allports-1M-IPs文件中,删除 临时文件。

总之,此处产生了1000000个随机IP地址存放在tcp-allports-1M-IPs文件中。

优化主机发现

nmap -sP -PE -PP -PS21,22,23,25,80,113,31339-PA80,113,443,10042 –source-port 53 -T4 -iL tcp-allports-1M-IPs

上述命令进行主机发现:使用产生的IP地址(-iL tcp-allports-1M-IPs),指定发送包的源端口为53(–source-port 53,该端口是DNS查询端口,一般的防火墙都允许来自此端口的数据包),时序级别为4(-T4,探测速度比较快),以TCP SYN包方式探测目标机的21,22,23,25,80,113,31339端口,以TCP ACK包方式探测对方80,113,443,10042端口,另外也发送ICMP ECHO/ICMP TIMESTAMP包探测对方主机。只要上述的探测包中得到一个回复,就可以证明目标主机在线。

完整的扫描命令

在准备了必要的IP地址文件,并对主机发现参数优化后,我们就得到最终的扫描命令:

nmap -S [srcip] -d –max-scan-delay 10 -oAlogs/tcp-allports-%T-%D -iL tcp-allports-1M-IPs –max-retries 1–randomize-hosts -p- -PS21,22,23,25,53,80,443 -T4 –min-hostgroup 256 –min-rate175 –max-rate 300

上述命令用于扫描互联网上100万台主机全部的TCP端口的开放情况。

使用包含100万个IP地址的文件(-iL tcp-allports-1M-IPs),源端IP地址设置为srcip(指定一个IP地址,保证该IP地址位于统一局域网中,否则无法收到目标机的回 复包),主机发现过程使用TCP SYN包探测目标机的21,22,23,25,53,80,443,扫描过程将随机打乱主机顺序(–randomize-hosts,因为文件中的IP 已经排序,这里将之打乱,避免被防火墙检查出),端口扫描过程检查全部的TCP端口(-p-,端口1到65535),使用时序级别为4(-T4,速度比较 快),将结果以XML/grepable/普通格式输出到文件中(-oA logs/tcp-allports-%T-%D,其中%T表示扫描时间,%D表示扫描日期)。

-d表示打印调试出信息。

–max-scan-delay 10表示发包最多延时10秒,防止特殊情景下等待过长的时间。

–max-retries 1,表示端口扫描探测包最多被重传一次,防止Nmap在没有收到回复的情况下多次重传探测包,当然这样也会降低探测的准确性。

–min-host-group 256表示进行端口扫描与版本侦测时,同时进行探测的主机的数量,这里至少256个主机一组来进行扫描,可以加快扫描速度。

–min-rate 175和–max-rate 300,表示发包速率介于175和300之间,保证扫描速度不会太慢,也不会因为速率过高引起目标机的警觉。

扫描结果

Fyodor组织的此次扫描得出很多重要结论,统计出了互联网最有可能开放的10个TCP端口。

80 (http)
23 (telnet)
22 (ssh)
443 (https)
3389 (ms-term-serv)
445 (microsoft-ds)
139 (netbios-ssn)
21 (ftp)
135 (msrpc)
25 (smtp)
最有可能开放的10个UDP端口。

137 (netbios-ns)
161 (snmp)
1434 (ms-sql-m)
123 (ntp)
138 (netbios-dgm)
445 (microsoft-ds)
135 (msrpc)
67 (dhcps)
139 (netbios-ssn)
53 (domain)
5     扫描Web站点
Web是互联网上最广泛的应用,而且越来越多的服务倾向于以Web形式提供出来,所以对Web安全监管也越来越重要。目前安全领域有很多专门的 Web扫描软件(如AppScan、WebInspect、W3AF),能够提供端口扫描、漏洞扫描、漏洞利用、分析报表等诸多功能。而Nmap作为一款 开源的端口扫描器,对Web扫描方面支持也越来越强大,可以完成Web基本的信息探测:服务器版本、支持的Method、是否包含典型漏洞。功能已经远远 超过同领域的其他开源软件,如HTTPrint、Httsquash。

目前Nmap中对Web的支持主要通过Lua脚本来实现,NSE脚本库中共有50多个HTTP相关的脚本。

扫描实例:

nmap -sV -p 80 -T4 –script http*,defaultscanme.nmap.org

  上面以扫描scanme.nmap.org的Web应用展示Nmap提供Web扫描能力,从图中可以看到扫描结果中提供了比较丰富的信息。

首先是应用程序及版本:Apachehttpd 2.2.14 (Ubuntu)

然后搜出了该站点的affiliate-id:该ID可用于识别同一拥有者的不同页面。

然后输出HTTP-headers信息,从中查看到基本配置信息。

从http-title中,可以看到网页标题。某些网页标题可能会泄漏重要信息,所以这里也应对其检查。

有想深入学习nmap的也可以参考:《渗透测试工具Nmap从初级到高级》文章

from:http://blog.csdn.net/aspirationflow/article/details/7983368

原文地址:https://www.cnblogs.com/askDing/p/8900634.html

时间: 2024-10-11 10:47:32

Nmap在实战中的高级用法的相关文章

android string.xml中的高级用法,包括附加参数、特殊字体等

一.特殊字体用法 <b></b>加粗字体 <i></i> 斜体字体 <u></u> 给字体加下划线 \n 换行 \u0020表示空格 \u2026表示省略号 使用<b>和<b>来打印出<b></b> 这样的文字:"<"表示"<"的意思: 二.添加参数 (一)不使用xliff的用法: 1.整型,比如"小姐今年23岁了"

nmap命令-----高级用法

探测主机存活常用方式 (1)-sP :进行ping扫描 打印出对ping扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测): 下面去扫描10.0.3.0/24这个网段的的主机 1 nmap -sP 10.0.3.0/24 这个命令可以用于探测局域网有哪些机器 1 2 3 4 5 6 7 8 9 10 11 [[email protected] ~]# nmap -sP 10.0.3.0/24 Starting Nmap 5.51 ( http://nmap.org ) at 201

Python3网络爬虫实战-25、requests:高级用法

在前面一节我们了解了 Requests 的基本用法,如基本的 GET.POST 请求以及 Response 对象的用法,本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等. 1. 文件上传 我们知道 Reqeuests 可以模拟提交一些数据,假如有的网站需要我们上传文件,我们同样可以利用它来上传,实现非常简单,实例如下: import requests files = {'file': open('favicon.ico', 'rb')} r =

jQuery动画高级用法(上)——详解animation中的.queue()函数

如果你拿着一个疑问去找专业人士寻找答案,那么你的一个疑问会变成三个,因为他会用另外两个令你更加一头雾水的名词来解释你的这个疑问. 我想这是大多数,包括我在内,IT人在学习过程中碰到的最大问题.当你有一段代码或是一个概念不是很清楚,百度也好,Google也好,在论坛发问也好,给出的答案往往又会夹杂着更多你不懂得概念和令你头疼的代码. 我亦是吃了同样的亏,痛定思痛,决定对animate方面做一些总结,希望能给大家一些启发和帮助 从一个实际应用谈起 今天不谈animate().fadeIn().fad

Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了很大幅度的改进,之前补间动画可以做到的属性动画也能做到,补间动画做不到的现在属性动画也可以做到了.因此,今天我们就来学习一下属性动画的高级用法,看看如何实现一些补间动画

jQuery动画高级用法(上)——详解animation中的.queue()动画队列插队函数

决定对animate方面做一些总结,希望能给大家一些启发和帮助 从一个实际应用谈起 今天不谈animate().fadeIn().fadeOut().slideUp().show().hide()诸如此类的具体动画函 数,而谈谈几个并不常用的,甚至说是有点风马牛不相及,但又十分十分重要的动画函数queue(),dequeue(),和stop(). 先让我们从一个简单的例子谈,假设有一个购物功能,在结账之前,用户仍然可以把购物车里的删除至备选栏中(也许因为用户的资金不足,可以存储至下次购买) 好,

&lt;转&gt;jQuery动画高级用法(上)——详解animation中的.queue()函数

如果你拿着一个疑问去找专业人士寻找答案,那么你的一个疑问会变成三个,因为他会用另外两个令你更加一头雾水的名词来解释你的这个疑问. 我想这是大多数,包括我在内,IT人在学习过程中碰到的最大问题.当你有一段代码或是一个概念不是很清楚,百度也好,Google也好,在论坛发问也好,给出的答案往往又会夹杂着更多你不懂得概念和令你头疼的代码. 我亦是吃了同样的亏,痛定思痛,决定对animate方面做一些总结,希望能给大家一些启发和帮助 从一个实际应用谈起 今天不谈animate().fadeIn().fad

Python切片中的误区与高级用法

众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组...)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slice)就是一种截取索引片段的技术,借助切片技术,我们可以十分灵活地处理序列类型的对象.通常来说,切片的作用就是截取序列对象,然而,它还有一些使用误区与高级用法,都值得我们注意.所以,本文将主要跟大家一起来探讨这些内容,希望你能学有所获. 事先声明,切片并非列表的专属操作,但因为列表最具有代表性,所以,本文仅以列表为例作探讨. 1.切片的基础

详解Vue中watch的高级用法

我们通过实例代码给大家分享了Vue中watch的高级用法,对此知识点有需要的朋友可以跟着学习下. 假设有如下代码: 上面的代码的效果是,当我们输入firstName后,wacth监听每次修改变化的新值,然后计算输出fullName. handler方法和immediate属性 这里 watch 的一个特点是,最初绑定的时候是不会执行的,要等到 firstName 改变时才执行监听计算.那我们想要一开始就让他最初绑定的时候就执行改怎么办呢?我们需要修改一下我们的 watch 写法,修改过后的 wa