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