前言,这本书比我想象中的简单,但是一天就看了三百多页,因为真的没有什么很精彩的内容,所以前面四章就总结成这一篇的内容了,再者,真的一个nmap几乎秒了其他所有工具,所以直接介绍nmap,netcat就是附带了。
1.主机存活扫描
2.端口扫描
3.指纹识别
主要工具:Nmap
首先介绍万能的nmap基本参数。
用法:nmap的[扫描类型(S)] [选项] {目标说明}
主机发现:
:列表扫描 - 简单列表的目标进行扫描
:ping扫描 - 禁用端口扫描
:把所有主机在线 - 跳过主机发现
:TCP SYN / ACK,UDP或SCTP发现给定的端口
:ICMP回声,时间戳和网络掩码请求,发现探头
协议列表]:IP协议Ping
:决不做DNS解析/始终解析[默认:有时]
服务器<SERV1 [,serv2上],...>:指定自定义DNS服务器
:使用操作系统的DNS解析器
:跟踪跳路径每个主机
SCAN方法:
:TCP SYN /TCP全连接()/ ACK /窗/迈蒙扫描
:UDP扫描
:TCP空,FIN,以及Xmas扫描
标志>:自定义TCP扫描标志
僵尸主机[:probeport]>:空闲扫描
:SCTP INIT / COOKIE-ECHO扫描
:IP协议扫描
中继主机>:FTP反弹扫描
端口规范和扫描顺序:
端口范围>:仅扫描指定的端口
例如:-p22; -p1-65535; -p U:53111137,电话:21-25,80,139,8080,S:9
:快速模式 - 扫描比默认的扫描较少的端口
:连续扫描端口 - 不随机
端口<编号>:扫描<编号>最常见的端口
比率<比率>:端口扫描比更常见的<比率>
服务/版本检测:
:探索开放的端口,确定服务/版本信息
强度<级别>:设定从0(亮)到9(尝试所有探头)
光:限制为最有可能的探头(强度2)
全:尝试每一个探头(强度9)
追踪:显示详细的版本扫描活动(调试)
SCRIPT SCAN:
:相当于--script =默认
脚本>:<Lua脚本>是一个逗号分隔列表
目录,脚本文件或脚本类别
的参数 = <N1 = V1,[N2 = V2,...]>:提供参数的脚本
文件=文件名:在文件中提供NSE脚本的args
追踪:显示发送和接收的所有数据
数据库更新:更新脚本数据库。
脚本>:关于脚本显示帮助。
脚本>是一个逗号分隔的脚本文件或列表
脚本类别。
OS检测:
:启用操作系统检测
限制:限制OS检测到有希望的目标
猜测:猜猜OS更积极
时序和性能:
选择内搭<时间>是在几秒钟内,或追加'MS'(毫秒)
的“(秒),”M“(分),或'H'(小时)的值(例如,30分钟)。
:设置时序模板(更高更快)
主机组/ MAX-主机组<大小>:并行主机扫描组大小
,并行/ MAX-并行<numprobes>:并行的探讨
超时/ MAX-RTT超时/初始RTT超时<时间>:指定
探索往返时间。
重试<尝试>:大写的端口扫描探测重发数。
超时<时间>:在此之后漫长放弃目标
延迟/ - 最大扫描延迟<时间>:调整探头之间的延迟
率<编号>:发送数据包没有<编号>每秒慢
率<编号>:每秒速度不发送数据包比<编号>
防火墙/ IDS躲避和欺骗:
值>:分片报文(可选择的w /给出MTU)
,decoy2 [,ME],...>:披风带有诱饵扫描
地址>:欺骗源地址
:使用指定接口
源端口<端口编号>:使用特定端口号
,[URL2] ...>:通过HTTP连接继电器/ SOCKS4代理
长度<编号>:追加随机数据发送的数据包
选项<选项>:指定IP选项的包发送
值>:设置IP时间到现场直播
地址/前缀/供应商名称>:欺骗你的MAC地址
:用一个假的TCP / UDP / SCTP校验和发送的数据包
输出:
-on / -oX / -Os / -oG <文件>:正常,XML输出扫描,S | <RIPT kIddi3,
和的grepable格式,分别以给定文件名。
基本名>:输出三大格式一次
:增加冗余级别(使用-vv或更多更好的效果)
:提高调试级别(使用-dd或更多更好的效果)
:显示端口处于特定状态的原因
:只显示打开(或可能打开)端口
追踪:显示发送和接收的所有数据包
:打印主机接口和路线(调试)
错误:记录错误/警告正常格式输出文件
输出:追加到而不是撞指定输出文件
文件名>:恢复中止扫描
--stylesheet <路径/ URL>:XSL样式表来转换XML输出至HTML
:从Nmap.Org参考样式表更便携XML
样式表:防止关联的XSL样式表W / XML输出
MISC:
:启用IPv6的扫描
:启用操作系统检测,检测版本,脚本扫描,和traceroute
目录>:指定自定义的Nmap数据文件位置
发送-IP:发送使用原始的以太网帧或IP数据包
:假设该用户是完全特权
:假设用户缺乏原始套接字权限
:打印版本号
:打印此帮助摘要页面。
示例:
NMAP -v -A scanme.nmap.org
NMAP -v -sn 192.168.0.0/16 10.0.0.0/8
NMAP -v -ir 10000 -Pn -p 80
一:主机存活
首先确定主机存活,最简单的当然就是ping了,但是由于防火墙或者其他过滤机制就不能简单的通过ping来确定主机的存活了,也就有了各种方法,各种工具。
而怎样确定主机是否存活也就基于上面这个OSI七层模型了,书中主要也就是针对234层扫描,一到七层协议依次是,物理层,数据链路层,网络层,传输层,回话层,表示层,应用层,像对应的意思是,硬件(电子器件),物理地址(如MAC地址,存在ARP等协议),逻辑IP地址(IPv4,IPv6等),服务端的传输协议(TCP,UDP),在上面就不是很重要了,反正书中也没怎么提。
再就是每层的优缺点了。
第2层发现用ARP的缺点如下:
优点:
非常快
高度可靠
缺点:
无法找到远程系统(非路由协议)
第3层的发现与ICMP的缺点如下:
优点:
可以发现远程系统(路由协议)
还是比较快
缺点:
比ARP发现慢
通常是由防火墙过滤
第4层的发现与TCP的缺点如下:
优点:
可以发现远程系统(路由协议)
更可靠的比ICMP(过滤器是不太常见的或有选择地实施)
缺点:
状态防火墙的过滤器可产生不可靠的结果
彻底的发现可能耗时
Arp发现最简单的命令当然就是arp了。
root@End:~# arp
Address HWtype HWaddress Flags Mask Iface
192.168.148.254 ether 00:50:56:fb:89:70 C eth0
192.168.148.1 ether 00:50:56:c0:00:08 C eth0
192.168.148.2 ether 00:50:56:ef:21:57 C eth0
然后就是nmap 。
root@KaliLinux:~# nmap 172.16.36.136 –sn
root@KaliLinux:~# nmap 172.16.36.0-255 –sn
root@KaliLinux:~# nmap -iL iplist.txt –sn
-sn:ping扫描 - 禁用端口扫描,如果在局域网,你会发现被扫的主机还会返回目标主机的mac地址。
-iL<输入的文件>:从输入的主机/网络的列表,你可以等个***在arp一下就有复制很多IP地址让你扫着玩了。
而UDP,TCP四层协议扫描,其中TCP三次握手得说明一下,TCP三次握手的意思就是主机A通过TCP协议连接主机B,先发个SYN包给B,B收到后返回个ACK包,A响应后再回个ACK包建立连接,也就可以完全的相互通信了,所以nmap有个很有意思的参数就是sS,意思是在主机B响应发的SYN包后不发起第三次握手,那么TCP三次握手就不会完成就不是完整的TCP连接,那么就不会被主机B记录,也就是比较安全的扫描方式。
root@KaliLinux:~# nmap 172.16.36.135 -PU53 –sn
root@KaliLinux:~# nmap -iL iplist.txt -sn -PU53
-PU表示使用UDP协议,-PU53当然就是扫描UDP53端口了。
nmap 172.16.36.135 -PA80 –sn
-PA ACK模式,如最前面的nmap参数,nmap有很多的扫描方式
-sN / SF / SX
-sS / ST / SA / SW / SM
笔者常用-sS –sF –sA 如果你发现某种扫描技术不能很好的出结果就换着来吧,总能把要被扫的主机扫出来
二:端口扫描
root@KaliLinux:~# nmap 172.16.36.0-255 -sU -p 53
-sU扫描,其实应用于UDP的服务不多,多数都是TCP。
root@KaliLinux:~# nmap -iL iplist.txt -sU -p 123
root@KaliLinux:~# nmap -sS 172.16.36.135 -p 80
root@KaliLinux:~# nmap -sS 172.16.36.135 -p 21,80,443
Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-17 21:46 EST
Nmap scan report for 172.16.36.135
Host is up (0.00038s latency).
Not shown: 977 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
root@KaliLinux:~# nmap -sS 172.16.36.135 -p 0-65535
系统一共有65535个可用端口,如果你想更仔细的发现一些端口的话可以把端口范围设置为0到65535,这样可能会发现有意思的服务。
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
6697/tcp open unknown
8009/tcp open ajp13
root@KaliLinux:~# nmap -sS -iL iplist.txt -p 80
-sSTCP握手,所以不会被目标主机记录,比较安全,因为有些目标主机可能会根据***者的一些扫描方式而触动一些防火墙规则而IP被列入黑名单,所以sS的扫描方式就要安全的多了。
三:指纹识别
指纹识别当然就是为了识别特点端口运行的服务及其版本,大多数服务会自己的标识,在你连接后就会在响应包里包含,其中的一些细节当然不用我们操心,交给nmap就够了。
这里有个小工具短小精悍netcat。
-c shell命令为`-e';使用/ bin / sh的,以执行[危险!!]
-e文件名程序Exec之后连接[危险!]
-b允许广播
-g网关源路由跳点[S],多达8个
-G NUM源路由指针:4,8,12,...
-h这个克鲁夫特
找来线-i秒延迟间隔,端口扫描
套接字设置keepalive选项
-l监听模式,用于入站所连接
-n纯数字IP地址,DNS不
交通-o文件的十六进制转储
-p port本地端口号
-r随机本地和远程端口
EOF后退出的标准输入和秒的延迟-q秒
-s地址本地源地址
-T TOS设置服务类型
-t回答TELNET协商
-u UDP模式
-v详细[使用两次,更详细]
-w秒超时连接和最终净读取
-z零I / O模式[用于扫描
用于识别某个服务可以使用如下命令
root@End:~# netcat -vn 172.16.36.135 22
SSH-2.0-OpenSSH_4.3
root@End:~# netcat –vn 172.16.36.135 3306
4
5.0.77C
)X]MH_(Fi]tQy,md,Ks'
root@End:~# netcat –vn 172.16.36.135 21
220 ProFTPD 1.3.2e Server (ProFTPD)
返回结果极其的快,你甚至可以用一个脚本去执行一些你想要的结果如:
root@End:~# for x in $(seq 1 100);do nc -nvz 64.6.255.13 $x ;done
而nmap当然就更简单了
root@KaliLinux:~# nmap -sT 172.16.36.135 -p 22 --script=banner
root@KaliLinux:~# nmap -sV 172.16.36.135
root@KaliLinux:~# nmap -sT 172.16.36.135 –O
-O 用于识别目标机器系统。
-sV 用于识别已开放端口的服务及其版本。
总结而言,本书前面一大部分就是在扯淡,会用nmap基本就够了,所以其他工具就不写了,写了也是滥竽充数。
而扫描的重点在于先确定主机是否存活或者找出其ip地址甚至mac地址,在这个基础上在确定所开的服务,比如ftp,ssh,vnc,MySQL之类大家比较关心的服务,在此基础上就得想到底是什么版本有没有漏洞,如果有的话最好没有的话可能就只能暴力破解或者通过社工去解决了。