nmap使用

nmap 是一个探测工具.

1
2
# 检测常用端口,快速返回
nmap -A test.kentxxq.com -T4
1
2
3
4
5
6
7
8
9
192.168.1.0/24 //扫描局域网内的256个ip  40/24效果也是一样的,关键在于/number
192.168.1.1-256
192.168.1.0/16 //扫描65536个ip      
192.168.1-256.1-256
//更多用法
nmap target_ip 192.168.0,1,3-7,0-255

//排除这个ip地址
--exclude target_ip 
  • -sL(列表扫描): 只是把对应所有的主机 ip 列出来,所以没有发送报文
  • -sP(PING扫描): ping 主机,然后返回存活的主机
  • -P0: 不进行 ping 操作,认为所有的主机都是存活的。对符合条件的 ip 进行扫描等
  • -PS21,23,1521(syn 半连接攻击): SYN 标志位告诉对方您正试图建立一个连接。如果端口关闭, 恢复 RST(复位). 开放则回复 SYN/ACK (确认).
  • -PA21,23,1521(ack报文,用于确定链接): ACK 报文表示确认一个建立连接的尝试,但该连接尚未完全建立。所以远程主机应该总是回应一个 RST 报文,因为它们并没有发出过连接请求到运行 Nmap 的机器.
  • -PU21,23.1521(UDP Ping 默认31338): 1.一般不会有响应。如果提示无法到达,有可能会返回 RST,则目标主机存活。 2.用于有可能仅 tcp 被过滤。提示无法到达,则会暴露目标存在
  • -PE; -PP; -PM (ICMP Ping Types): 有可能屏蔽了一些 icmp 协议的类型。进行多个类型的尝试
  • -PR (ARP Ping): 更快更准确,默认就会使用。

提供 -PS-PA 两种 ping 探测的原因是使通过防火墙的机会尽可能大。许多管理员会配置他们的路由器或者其它简单的防火墙来封锁 SYN 报文,除非连接目标是那些公开的服务器像公司网站或者邮件服务器。这可以阻止其它进入组织的连接,同时也允许用户访问互联网。这种无状态的方法几乎不占用防火墙/路由器的资源,因而被硬件和软件过滤器广泛支持。Linux Netfilter/iptables 防火墙软件提供方便的 –syn 选项来实现这种无状态的方法。当这样的无状态防火墙规则存在时,发送到关闭目标端口的 SYN ping 探测 (-PS) 很可能被封锁。这种情况下,ACK 探测格外有闪光点,因为它正好利用了这样的规则。另外一种常用的防火墙用有状态的规则来封锁非预期的报文。这一特性已开始只存在于高端防火墙,但是这些年类它越来越普遍了。 Linux Netfilter/iptables 通过 –state 选项支持这一特性,它根据连接状态把报文进行分类。SYN 探测更有可能用于这样的系统,由于没头没脑的 ACK 报文通常会被识别成伪造的而丢弃。解决这个两难的方法是通过即指定 -PS 又指定 -PA 来即发送 SYN 又发送 ACK。

  • -sS (TCP SYN扫描): 默认的,速度超快的端口扫描, 明确区分端口状态
  • -sT (TCP connect()扫描): 速度慢一些, 适用于 syn 被屏蔽无法使用. 但是极有可能记录到 syslog 日志
  • -sU (UDP扫描): 可以和 sS 一起使用, 速度慢. --host-timeout 跳过慢速的主机用于加速 udp 扫描
  • -sA (TCP ACK扫描): 无法确定端口状态
  • -sW (TCP窗口扫描): 开放端口为正数, 关闭端口大小的 0. 可以用于分析

-A: 系统版本, 端口, ssl 等信息

  • 分片Fragmentation: 将可疑的探测包进行分片处理(例如将 TCP 包拆分成多个 IP 包发送过去),某些简单的防火墙为了加快处理速度可能不会进行重组检查,以此避开其检查。
  • IP诱骗IP decoys: 在进行扫描时,将真实 IP 地址和其他主机的 IP 地址(其他主机需要在线,否则目标主机将回复大量数据包到不存在的主机,从而实质构成了拒绝服务攻击)混合使用,以此让目标主机的防火墙或 IDS 追踪检查大量的不同 IP 地址的数据包,降低其追查到自身的概率。注意,某些高级的 IDS 系统通过统计分析仍然可以追踪出扫描者真实 IP 地址。
  • IP伪装IP Spoofing: 顾名思义,IP 伪装即将自己发送的数据包中的 IP 地址伪装成其他主机的地址,从而目标机认为是其他主机在与之通信。需要注意,如果希望接收到目标主机的回复包,那么伪装的 IP 需要位于统一局域网内。另外,如果既希望隐蔽自己的 IP 地址,又希望收到目标主机的回复包,那么可以尝试使用 idle scan 或匿名代理(如 TOR)等网络技术。
  • 指定源端口: 某些目标主机只允许来自特定端口的数据包通过防火墙。例如 FTP 服务器配置为:允许源端口为 21 号的 TCP 包通过防火墙与 FTP 服务端通信,但是源端口为其他端口的数据包被屏蔽。所以,在此类情况下,可以指定 Nmap 将发送的数据包的源端口都设置特定的端口。
  • 扫描延时: 某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率(例如,Solaris 系统通常会限制每秒钟只能产生一个 ICMP 消息回复给 UDP 扫描),所以,定制该情况下发包的频率和发包延时可以降低目标主机的审查强度、节省网络带宽。
  • 其他技术: Nmap 还提供多种规避技巧,比如指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定发包的 MTU、指定 TTL、指定伪装的 MAC 地址、使用错误检查和(badchecksum). 更多信息 http://nmap.org/book/man-bypass-firewalls-ids.html

使用方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-f; --mtu : 指定使用分片、指定数据包的MTU
-D : 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址
-S : 伪装成其他IP地址  
-e : 使用特定的网络接口  
-g/--source-port : 使用指定源端口  
--data-length : 填充随机数据让数据包长度达到Num
--ip-options : 使用指定的IP选项来发送数据包
--ttl : 设置time-to-live时间
--spoof-mac : 伪装MAC地址  
--badsum: 使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)。  

示例:

1
2
3
4
nmap -v -F -Pn -D192.168.1.100,192.168.1.102,ME -e eth0 -g 3355 192.168.1.1
其中,-F表示快速扫描100个端口;-Pn表示不进行Ping扫描;-D表示使用IP诱骗方式掩盖自己真实IP(其中ME表示自己IP);-e eth0表示使用eth0网卡发送该数据包;-g 3355表示自己的源端口使用3355;192.168.1.1是被扫描的目标IP地址。

我们可以从Wireshark中看到数据包的流动情况:对于每个探测包,Nmap都使用-D选项指定的IP地址发送不同的数据包,从而达到扰乱对方 防火墙/IDS检查的目的(更好的方式-D选项中嵌入RND随机数,这样更具有迷惑性)。当探测到80端口时候,目标主机向我们回复了SYN/ACK包回 来(当然也向其他诱骗的IP回复SYN/ACK包,我们无法接收到),证明80端口是开放的。