NMAP
主机发现
0x01 选项-sL
命令:nmap -sL 106.65.191.0/24
并不会发包给扫描主机,-sL选项只是进行DNS查询,会反向域名解析获取他们的名字。属于间接扫描。
0x02 选项-sP
ping扫描。
非sudo下发送syn到目标主机80/443端口收到SYN-ACK算发现,RST-ACK算没开启(这里有点奇怪,因为并非是端口扫描只是发现上线主机,但是主机回复RST-ACK却不算上线,后续实验可以看出是时间问题,回复慢了,扫描大量机器的时候可能不会出问题,少量太快运行完不会更新状态)。
sudo下局域网主机发送arp
非局域网sudo下有四种包
1.icmp type 8。
2.icmp type 13 timestap包。
3.80端口直接ACK
4.443端口SYN
0x03 选项-P0
该选项跳过nmap的发现阶段,默认情况下,nmap对正在运行的主机进行高强度的探测,如端口扫描,版本探测,系统探测。
0x04 选项-PS
该选项发送一个设置了SYN标志位的空TCP报文。 默认目的端口为80 (可以通过改变nmap.h) 文件中的DEFAULT-TCP-PROBE-PORT值进行配置,但不同的端口也可以作为选项指定。 甚至可以指定一个以逗号分隔的端口列表(如 -PS22,23,25,80,113,1050,35000), 在这种情况下,每个端口会被并发地扫描。
SYN标志位告诉对方您正试图建立一个连接。 通常目标端口是关闭的,一个RST (复位) 包会发回来。 如果碰巧端口是开放的,目标会进行TCP三步握手的第二步,回应一个SYN/ACK TCP报文。然后运行Nmap的机器则会扼杀这个正在建立的连接, 发送一个RST而非ACK报文,否则,一个完全的连接将会建立。 RST报文是运行Nmap的机器而不是Nmap本身响应的,因为它对收到 的SYN/ACK感到很意外。
Nmap并不关心端口开放还是关闭。 无论RST还是SYN/ACK响应都告诉Nmap该主机正在运行。
在UNIX机器上,通常只有特权用户 root 能否发送和接收 原始的TCP报文。因此作为一个变通的方法,对于非特权用户, Nmap会为每个目标主机进行系统调用connect(),它也会发送一个SYN 报文来尝试建立连接。如果connect()迅速返回成功或者一个ECONNREFUSED 失败,下面的TCP堆栈一定已经收到了一个SYN/ACK或者RST,该主机将被 标志位为在运行。 如果连接超时了,该主机就标志位为down掉了。这种方法也用于IPv6 连接,因为Nmap目前还不支持原始的IPv6报文。
扫描少量机器的时候程序可能结束很快,哪怕接收到了响应的报文也不会发现主机
0x05 选项-PA
发送的ACK报文,如果不在sudo下依旧发的SYN。默认80端口,可以像-PA22,23,这样指定端口。响应方向来的是ACK/RST。
0x06 选项-PR
arp扫描局域网。
如果不想用arp使用--send-ip参数。此外还会顺便扫描端口,发送的SYN报文。
0x07 选项-PE -PP
- -PE 发的是icmp type 8的报文
- -PP 发的是icmp type 13的报文
- -PM 发的是icmp type 17 地址掩码的报文
0x08 选项-n -R
-n不适用域名解析,-R对目标ip地址进行反向解析。--system-dns使用系统域名解析器(速度会较慢)
端口扫描
nmap 把端口分成六个状态: open(开放的), closed(关闭的),filtered(被过滤的), unfiltered(未被过滤的), open|filtered(开放或者被过滤的),或者 closed|filtered(关闭或者被过滤的)。
这些状态并非端口本身的性质,而是描述Nmap怎样看待它们。例如, 对于同样的目标机器的135/tcp端口,从同网络扫描显示它是开放的,而跨网络作完全相同的扫描则可能显示它是 filtered(被过滤的)。
open(开放的)
应用程序正在该端口接收TCP 连接或者UDP报文。发现这一点常常是端口扫描 的主要目标。安全意识强的人们知道每个开放的端口 都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。 而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。 非安全扫描可能对开放的端口也感兴趣,因为它们显示了网络上那些服务可供使用。
closed(关闭的)
关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。 它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行up 也对部分操作系统探测有所帮助。 因为关闭的关口是可访问的,也许过会儿值得再扫描一下,可能一些又开放了。 系统管理员可能会考虑用防火墙封锁这样的端口。 那样他们就会被显示为被过滤的状态,下面讨论。
filtered(被过滤的)
由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折,因为它们几乎不提供 任何信息。有时候它们响应ICMP错误消息如类型3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧, 不做任何响应。 这迫使Nmap重试若干次以访万一探测包是由于网络阻塞丢弃的。 这使得扫描速度明显变慢。
unfiltered(未被过滤的)
未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定端口是否开放。
open|filtered(开放或者被过滤的)
当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。
closed|filtered(关闭或者被过滤的)
该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。
0x01 选项-sS(TCP SYN扫描)
发送一个SYN,接收到SYN-ACK代表开放,并且发送RST-ACK代表关闭,如果没有响应该端口被标记未被过滤的。如果收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。
0x02 选项-sT (TCP connect()扫描)
当用户没有权限发送原始报文或者扫描IPv6网络时,就是这种情况。 Instead of writing raw packets as most other scan types do,Nmap通过创建connect() 系统调用要求操作系统和目标机以及端口建立连接,而不像其它扫描类型直接发送原始报文。该系统调用会完全链接到开放的目标端口所以说发送的数据包会更多。
显然多了一个ack包。
0x03 选项-sU(UDP扫描)
UDP扫描发送空的(没有数据)UDP报头到每个目标端口。 如果返回ICMP端口不可到达错误(类型3,代码3), 该端口是closed(关闭的)。 其它ICMP不可到达错误(类型3, 代码1,2,9,10,或者13)表明该端口是filtered(被过滤的)。使用--host-timeout跳过慢速的主机。
0x04 选项-sN; -sF; -sX (TCP Null,FIN,and Xmas扫描)
如果扫描系统遵循该RFC,当端口关闭时,任何不包含SYN,RST,或者ACK位的报文会导致 一个RST返回,而当端口开放时,应该没有任何响应。只要不包含SYN,RST,或者ACK, 任何其它三种(FIN,PSH,and URG)的组合都行。
如果收到一个RST报文,该端口被认为是 closed(关闭的),而没有响应则意味着 端口是open|filtered(开放或者被过滤的)。 如果收到ICMP不可到达错误(类型 3,代号 1,2,3,9,10,或者13),该端口就被标记为被过滤的。
如果被探测系统没有遵循RFC 793,不管端口开放还是关闭,都响应RST。 这导致所有端口都标记为closed(关闭的)。 这样的操作系统主要有Microsoft Windows,许多Cisco设备,BSDI,以及IBM OS/400。
0x05 -sA
open(开放的)和closed(关闭的) 端口都会返回RST报文。Nmap把它们标记为 unfiltered(未被过滤的)。不响应的端口 或者发送特定的ICMP错误消息(类型3,代号1,2,3,9,10, 或者13)的端口,标记为 filtered(被过滤的)。
0x06 -sW
窗口扫描和ACK扫描完全一样。 它通过检查返回的RST报文的TCP窗口域做到这一点。 在某些系统上,开放端口用正数表示窗口大小(甚至对于RST报文) 而关闭端口的窗口大小为0。因此,当收到RST时,窗口扫描不总是把端口标记为 unfiltered, 而是根据TCP窗口值是正数还是0,分别把端口标记为open或者 closed。
以上是扫描windows,显然结果不可信。
0x07 --scanflags(定制的TCP扫描)
--scanflags URGACKPSHRSTSYNFIN设置了所有标志位
可选URG, ACK,PSH, RST,SYN,and FIN
设置TCP扫描类型,其类型会告诉nmap如何解释响应。如SYN扫描认为没有响应意味着 filtered端口,而FIN扫描则认为是 open|filtered。
0x08 -sI <zombie host[:probeport]> (Idlescan)
应该就是利用代理,后续有时间在研究
http://nmap.org/book/idlescan.html
0x09 -sO (IP协议扫描)
IP 协议扫描可以让您确定目标机支持哪些IP协议 (TCP,ICMP,IGMP,等等)。从技术上说,这不是端口扫描 ,既然它遍历的是IP协议号而不是TCP或者UDP端口号。
端口说明和扫描顺序
0x01 选项 -p
-p 1-255 扫描1-255端口
例如,参数 -p U:53,111,137,T:21-25,80,139,8080 将扫描UDP 端口53,111,和137,同时扫描列出的TCP端口。注意,要既扫描 UDP又扫描TCP,您必须指定 -sU ,以及至少一个TCP扫描类型(如 -sS,-sF,或者 -sT)。
0x02 选项-F
在nmap的nmap-services 文件中(对于-sO,是协议文件)指定想要扫描的端口。
0x03 选项-r
默认情况下nmap按照随机顺序扫描端口,-r会按照顺序扫描端口。
0x04 选项-sV(版本探测)
-A会探测操作系统和版本
0x05 选项--allport
默认情况下,Nmap版本探测会跳过9100 TCP端口,因为一些打印机简单地打印送到该端口的 任何数据,这回导致数十页HTTP get请求,二进制 SSL会话请求等等被打印出来。这一行为可以通过修改或删除nmap-service-probes 中的Exclude指示符改变, 您也可以不理会任何Exclude指示符,指定--allports扫描所有端口
0x06 选项--version-all (尝试每个探测)
--version-intensity 9的别名, 保证对每个端口尝试每个探测报文。
操作系统探测
0x01 选项-O
开启操作系统探测
0x02 选项--osscan-limit (针对指定的目标进行操作系统检测)
发现打开和关闭的tcp端口的时候,操作系统扫描会更有效,所以扫描多个主机的时候使用这个选项会节约时间。
0x03 选项--osscan-guess; --fuzzy (推测操作系统检测结果)
当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配,使用上述任一个选项使得Nmap的推测更加有效。
时间和性能
0x01 选项 --host-timeout <milliseconds> (放弃低速目标主机)
使用 --host-timeout选项来说明等待的时间(毫秒)。通常使用1800000 来保证Nmap不会在单个主机上使用超过半小时的时间。需要注意的是,Nmap在这半小时中可以 同时扫描其它主机,因此并不是完全放弃扫描。超时的主机被忽略,因此也没有针对该主机的端口表、操作系统检测或版本检测结果的输出。
0x02 选项--scan-delay <milliseconds>; --max-scan-delay <milliseconds> (调整探测报文的时间间隔)
这个选项用于Nmap控制针对一个主机发送探测报文的等待时间(毫秒),在带宽 控制的情况下这个选项非常有效。Solaris主机在响应UDP扫描探测报文报文时,每秒 只发送一个ICMP消息,因此Nmap发送的很多数探测报文是浪费的。--scan-delay 设为1000,使Nmap低速运行。Nmap尝试检测带宽控制并相应地调整扫描的延迟,但 并不影响明确说明何种速度工作最佳。
--scan-delay的另一个用途是躲闭基于阈值的入侵检测和预防 系统(IDS/IPS)。
0x03 选项-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> (设置时间模板)
前两种模式用于IDS躲避,Polite模式降低了扫描 速度以使用更少的带宽和目标主机资源。默认模式为Normal,因此-T3 实际上是未做任何优化。Aggressive模式假设用户具有合适及可靠的网络从而加速 扫描。Insane模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性。
防火墙/IDS哄骗
0x01 选项-f (报文分段); --mtu (使用指定的MTU)
-f选项要求扫描时(包挺ping扫描)使用小的IP包分段。其思路是将TCP头分段在几个包中,使得包过滤器、 IDS以及其它工具的检测更加困难。
0x02 选项-D 【ip1,ip2……|RND:num】
RND随机生成num个诱饵主机地址
注意:
- 在版本检测或TCP扫描时诱饵无效。
- 诱饵主机必须处于工作状态,否则会导致目标主机的SYN洪水攻击
使用过多的诱饵没有任何价值,反而导致扫描变慢并且结果不准确。 此外,一些ISP会过滤哄骗的报文,但很多对欺骗IP包没有任何限制。
0x03 选项-S <IP_Address> (源地址哄骗)
-S伪装了ip
0x04 --source-port <portnumber>; -g <portnumber> (源端口哄骗)
某些防火墙可能有一些隐藏规则,允许来自某端口的数据流入
0x05 --data-length <number> (发送报文时 附加随机数据)
正常情况下,Nmap发送最少的报文,只含一个包头。因此TCP包通常 是40字节,ICMP ECHO请求只有28字节。这个选项告诉Nmap在发送的报文上 附加指定数量的随机字节。操作系统检测(-O)包不受影响, 但大部分ping和端口扫描包受影响,这会使处理变慢,但对扫描的影响较小。
流量监测
SYN扫描的时候窗口之固定是1024
包为空包
nmap-service-probes中有些关键词
-O参数数据包填充内容
流量特征修改
修改namp默认win窗口值。
tcp->th_win = hosts(1-65535)
修改nmap-service-probes文件中关键词
nmap,nm@nm,nm2@nm2,nm@p,nm,0PT10NS sip
修改使用-O参数发包填充内容
static u8 patternbyte = 0x43; /* character 'C' /
文章评论