Nmap 学习笔记

安装

brew install nmap

基本参数

  • -sT TCP connect()扫描,这种方式会在目标主机的日志中记录大批的链接请求以及错误信息。
  • -sP ping扫描,加上这个参数会使用ping扫描,只有主机存活,nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping,却实际存在。
  • -sS 半开扫描,一般不会记入日志,不过需要root权限。
  • -sU udp扫描,但是一般不可靠,
  • -sA 用来穿过防火墙的规则集,速度慢。
  • -sV 端口服务及版本
  • -A 包含了-sV,-O,全面系统检测,启动脚本检测,扫描等。
  • -P0 扫描之前不使用ping,适用于防火墙禁止ping,比较有用。
  • -v 显示扫描进程
  • -O 探测目标系统的漏洞,容易误报
  • -oN/-oX/-oG 将报告写入文件,格式分别为正常(自定义.txt),XML,grepable.
  • -iL 扫描主机列表
  • -sC --script=default 默认的脚本扫描,主要是搜集各种应用服务的信息
  • -sF, -sN和-sX TCP FIN、NULL和XMAS
  • --exclude 排除指定主机
  • --excludefile 排除指定文件中的主机
  • --exclude-ports 排除指定的端口
  • -F 快速扫描
  • –iflist 检测主机接口和路由信息
  • -PS/PA/PU/PY[portlist] 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。
  • -sL List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。
  • -sn: Ping Scan 只进行主机发现,不进行端口扫描。
  • -Pn 将所有指定的主机视作开启的,跳过主机发现的过程。
  • -PS/PA/PU/PY[portlist] 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。
  • -PE/PP/PM 使用ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使用IP协议包探测对方主机是否开启。
  • -n/-R -n表示不进行DNS解析;-R表示总是进行DNS解析。

基本命令

  • nmap -p80,443,22,21,8080,25,53 10.1.1.254 指定端口扫描
  • nmap -p1-50 10.1.1.254 端口区间扫描
  • nmap -sP 10.0.0.0/24 批量主机的扫描
  • nmap -iL ip-address.txt 从文件中获取目标地址
  • nmap -sV -p 21,3389 -oG grep-output.txt 10.0.1.0/24 nmap输出格式

扫描C段

  • namp -sP www.baidu.com/24 -oN c:\ip.txt 扫描百度服务器c段,并且生成报告。

nmap 脚本引擎

用法:--script=脚本名称

  • 扫描sql注射 nmap -p 80 www.baidu.com --script=sql.injection.nse
  • 使用所有脚本扫描 nmap --script all www.baidu.com
  • 使用通配符扫描 nmap --script "http-*" www.baidu.com 必须使用“”
  • smb系列 nmap --script="smb*" www.baidu.com

参数详解

  • -sC 等价于 --script=default 或者 --script default
  • --script <filename>|<category>|<directory>|<expression>[,…]

    优先级:表达式 > 分类 > 文件名/文件夹名

(加号”+”)作为脚本名或者表达式前缀运行,即使目标服务在目标端口没有启动,也被强制运行 NSE 脚本。

关键参数 all 如果被设定,则所有的脚本都会运行(包含 exp / brute / Dos)

NSE 表达式使用要点
  • 一般来说使用双引号包裹
  • * 可以作为通配符
  • 可以在表达式中使用逻辑运算符号(not / or / and)与小括号(改变优先级)

常见用法

  • 获取远程主机的端口信息和识别主机操作系统:

    nmap -sS -P0 -sV -O <target>

  • 获取开放指定端口的服务器列表:

    nmap -sT -p 80 -oG – 192.168.1.* | grep open

  • 获取网络中所有存活的主机:

    nmap -sP 192.168.0.*

  • ping一个范围内的IP地址:

    nmap -sP 192.168.1.100-254

  • 寻找一个给定子网中未使用的ip:

    nmap -T4 -sP 192.168.2.0/24 && egrep "00:00:00:00:00:00″ /proc/net/arp

  • 扫描本地网络中的conficker病毒:

    nmap -PN -T4 -p139,445 -n -v --script=smb-check-vulns–script-args safe=1 192.168.0.1-254

  • 扫描网络中的非法接入点:

    nmap -A -p1-85,113,443,8080-8100 -T4 --min-hostgroup 50 --max-rtt-timeout 2000 --initial-rtt-timeout 300 --max-retries 3 --host-timeout 20m --max-scan-delay 1000 -oA wapscan10.0.0.0/8

    这里使用–max-rtt-timeout 和使用 -T 选项将能够显著的缩短扫描的时间,因为有的时候nmap发送的扫描探针,会被对方的防火墙给drop掉,这样导致nmap期望接收到的SYN/ACK或者RST/ACK就遥遥无期,所以使用这两个选项可以缩短扫描时间。 –max-rtt-timeout 毫秒 这个时间值的一种比较好的设置方法是在使用nmap之前,ping一下要扫描的主机 -T[0-5] 设置时间速度模板,值越大,扫描速度越快,具体的见man namp

  • 在扫描时使用诱骗技术避免引起管理员的注意:

    sudo nmap -sS 192.168.0.10 -D 192.168.0.2

    扫描目标设备/计算机(192.168.0.10)的开放端口并设置一个诱骗地址(192.168.0.2),在目标的安全日志中将会显示诱骗地址而不是你的IP地址。诱骗地址必须是存活的,检查目标主机的安全日志(/var/log/)确定它是否工作。

  • 列出一个子网中的DNS反向记录:

    nmap -R -sL 209.85.229.99/27 | awk '{if ($3=="not") print "("$2") no PTR" ; else print $3 ″ is " $2}' | grep '('

    这个命令是使用nmap字在子网中查询DNS反向信息。它会生成子网中的ip地址列表和相应的PTR纪录。你可以在CDIR符号中输入子网(i.e. /24 for a ClassC),如果你需要查询一个特定的DNS服务器,你可以在-sL后边添加“–dns-serversx.x.x.x”,一些安装版的namp可能需要sudo,我也希望awk是大多数发行版的标准。

  • 你的网络中有多少Linux和Windows设备:

    (sudo nmap -F -O 192.168.0.1-255 | grep "Running: " > /tmp/os; echo "$(cat /tmp/os | grep Linux | wc -l) linux device(s)"; echo "$(cat /tmp/os | grep Windows | wc -l) Window(s) devices