常用语句
主机发现和端口扫描
- 主机发现
sudo nmap -sn 192.168.80.0/24
或
sudo arp-scan -l
arp-scan是Kali Linux自带的一款ARP扫描工具。
轻量级扫描工具,用来扫描局域网的主机还是挺好用的,由于扫描的少,所以扫描速度比较快,可以很快的查看到局域网有哪些主机和对应的MAC地址。
- 端口扫描
sudo nmap -sT --min-rate 10000 -p- 192.168.80.135 -oA nmapscan/ports
--min-rate 10000
指最小的发包速率,也就是最快的速度为10000,这个是按一些大佬的速度进行的,在实际的场景中,只会更慢。- “ -p ”意味着制定扫描端口区间,而“ -p- ”是将1-65535,进行了简化,而默认的话,则是常见的1000个。为了准确性,(管理员有可能会留有较高数值的管理端口)我们这里使用最全的。
- “ -o ”是输出,A 指 all,“ -oA ”是输出全部格式的文件。这是为了扫描结果的数据化。
- nmap默认执行的是 “ -sS ”,这两者之间有什么区别呢。
默认的 sS 是发送一个syn包,只建立TCP链接的第一步,如果收到了目标主机的syn加ack回复,则表示目标主机相应的端口是开放的。而收到复位数据包RST,则表示端口是关闭的。
而 sT 是利用三次握手过程来判断端口的状态。它通过发送完整的TCP请求,等待目标主机的回复,收到syn加ack回复,即开放。
所以说,sS适用于大规模且快速探测。而 sT 具有更好的准确性,但速度也相应会慢上一些。最大的优点是具备更好的隐蔽性,在面对防火墙的检测上,完整的 tcp 请求比只发syn包的更具有隐蔽性。
我们现在是对靶机的渗透,在速度上可以调节的快一些,所以我们选用“ sT ”。
标准流程的三次扫描
-
- 更详细版本探测扫描
sudo nmap -sT -sC -sV -O -p21,22,80,3306 192.168.80,135 -oA nmapscan/detail
-sV探测各服务器的版本号 -sC使用默认脚本 -O探测操作系统的版本号
-
- udp扫描
sudo nmap -sU --top-ports 20 192.168.80.135 -oA nmapscan/udp
-sU 进行udp扫描
–top-ports选择最常用的20个端口进行探测。留作备用
-
- 漏洞的初步扫描(nmap)
sudo nmap --script=vuln -p21,22,80,3306 192.168.80.135 -oA nmapscan/vuln
–script=vuln vuln脚本,表示是否有常见漏洞
参数详解
参考
Nmap参数详解(含扫描参数原理解释) - 豫让 - 博客园 (cnblogs.com)
语法结构:
nmap [Scan Type(s)] [Options] {target specification}
端口状态介绍
open:确定端口开放,可达
closed :关闭的端口对于nmap也是可访问的, 它接收nmap探测报文并作出响应。但没有应用程序在其上监听。
filtered :由于包过滤阻止探测报文到达端口,Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由规则 或者主机上的软件防火墙。
unfiltered :未被过滤状态意味着端口可访问,但是Nmap无法确定它是开放还是关闭。 只有用于映射防火墙规则集的 ACK 扫描才会把端口分类到这个状态。
open | filtered :无法确定端口是开放还是被过滤, 开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何反应。UDP,IP协议,FIN, Null 等扫描会引起。
closed|filtered:(关闭或者被过滤的):无法确定端口是关闭的还是被过滤的
扫描目标格式
示例:
scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL:从文件中加载目标
-iR:随机扫描
–exclude :排除网段或主机地址
–excledefile:排除文件中的地址
主机发现
-sL:列出需要扫描的目标,不扫描
-sn:只做ping扫描,不做端口扫描
-Pn:跳过主机发现,视所有主机都在线
-PS/PA/PU/PY[portlist]:基于TCP(SYN、ACK)、UDP、SCTP的指定端口的主机发现
-PE/PP/PM:基于ICMP的echo、timestamp、network request的主机发现
-PO[Protocol list]:基于IP协议字段的ping扫描
-n/-R: -n表示不对目标最DNS解析,-R表示进行DNS解析,缺省为必要时候进行DNS解析
–dns-servers <serv1[,serv2],…>: 指定DNS 服务器
–system-dns:调用系统的DNS服务器
–traceroute:显示追踪到目标的路径
扫描技术
-sS/sT/sA/sW/sM:TCP扫描
S是SYN扫描,半连接扫描,nmap只发送SYN报文,通过服务器是否响应SYN+ACK来判断对应端口是否开放
T是全连接扫描会和服务器建立完整的三次握手,效率低
A发送ACK报文,通过服务器响应来判断是否开放,有的服务器不开会回复ICMP端口不可达,当回复RST时表示可能被拦截或者端口开放,不是一个准确的判断条件
W 是窗口扫描,发出的报文和ACK一样,利用的是在某些系统中如果端口开放,收到ACK包后会响应一个窗口非0的RST包
M是Maimon扫描,使用发现者的名字命名。其原理是向目标服务器发送FIN/ACK 报文,在某些系统中如果端口开放则会丢弃该报文不做响应,如果端口关闭则回复RST或者ICMP,Nmap可借此判断服务器端口的开放情况。不准
-sU:UDP扫描,某些系统如果UDP端口不开放会回复ICMP差错报文(这也是Linux系统中traceroute的实现原理)。Nmap UDP端口扫描的强大之处在于它会针对知名端口构造初始交互报文,比如会针对UDP 500构造一个主模式协商的IKE报文
-sN/sF/sX:特定TCP标志位的扫描,N是空标志位;F是FIN置位;X是Xmas扫描将FIN、PSH、URG同时置位。收到RST说明端口关闭,无响应说明被过滤或者端口开放,不准。
–scanflags :实现上同上面几种类似,可以让用户自定义TCP标志位。
-sI <zombie host[:probeport]>: Idle扫描需要一台没有流量的僵尸主机,这种扫描的实现原理是在一定的时间里,同一台主机发出的IP数据报文其ip头中的identification字段是累加的。探测分为3步:1、Nmap主机向僵尸机发包,通过僵尸机的响应包探测其ID;2、Nmap主机伪造僵尸机源地址向服务器的特定端口发送SYN包;3、Nmap主机再次探测僵尸机的ip.id。如果目标服务器端口开放,则必然会向僵尸机发送SYN/ACK,由于莫名其妙收到一个SYN/ACK 报文,僵尸机会向目标服务器发送RST报文,该报文的ip.id 是第一步+1,则第三步Nmap主机探测到的ip.id应该是第一步+2,说明目标主机端口开放。反之,如果目标主机端口未开放,则收到第二步的报文后会向僵尸机回复RST或者直接丢弃该报文不响应,无论哪种情况,都不会触发僵尸机发包,进而僵尸机的ip.id不会变化,第三步Nmap探测到的id应该是第一步+1.
-sY/sZ:SCTP协议INIT或cookie-echo扫描
-sO:基于IP协议的扫描,通过变换IP报文头中的Protocol值来对服务器进行探测
-b ::FTP反弹扫描,借助FTP特性,通过FTP服务器连接想要扫描的主机实现隐身的目的
端口相关参数
-p:指定端口扫描范围,如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
–exclude-ports : 排除端口
-F:扫描比缺省少的端口(缺省1000,加了-F100)
-r:顺序扫描端口,缺省是随机分组扫描
–top-ports :按top排序扫描知名端口
–port-ratio : 按比例扫描知名端口,值在0-1之间,越小扫的越多
系统/版本探测
-sV:探测开放的端口的系统/服务信息
–version-intensity :设置版本检测的详程度级别,0-9,越高越详细
–version-light:输出最可能的版本信息,缺省是2
–version-all:使用所有的探测条件进行版本/系统探测
–version-trace:打印详细的版本扫描过程
脚本扫描
–script=:指定脚本名称
–script-args=<n1=v1,[n2=v2,…]>:为脚本指定参数
–script-help=: 查看脚本帮助信息
–script-updatedb:更新脚本数据库
系统探测
-O:激活系统探测
–osscan-limit:只对开放端口的有效主机进行系统探测
–osscan-guess:推测系统信息
其他
-T<0-5>:时间模板,越大速度越快
-6:使能IPV6探测
-A:使能系统探测、版本检测、脚本扫描、路由追踪
-V:打印版本号
-v:增加输出的详细程度
脚本类别,支持14大类别扫描
auth :负责处理鉴权证书的脚本vuln :负责检查目标机是否存在常见漏洞,如是否有 MS08_067