2017-2018-2 20155314《网络对抗技术》Exp6 信息搜集与漏洞扫描
2017-2018-2 20155314《网络对抗技术》Exp6 信息搜集与漏洞扫描
目录
实验目标
掌握信息搜集的最基础技能与常用工具的使用方法。
实验内容
各种搜索技巧的应用
DNS IP注册信息的查询
基本的扫描技术:主机发现、端口扫描、OS及服务版本探测、具体服务的查点
漏洞扫描:会扫,会看报告,会查漏洞说明,会修补漏洞
实验环境
- macOS本机
- macOS下Parallels Desktop虚拟机中(网络源均设置为共享网络模式):
- Kali Linux - 64bit(攻击机,IP为
10.211.55.10
) - Windows 7 - 64bit(靶机,IP为
10.211.55.14
) - Windows XP Professional Version 2002 Service Pack 3(靶机,IP为
10.211.55.16
)
- Kali Linux - 64bit(攻击机,IP为
基础问题回答
- 哪些组织负责DNS,IP的管理。
- 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器、DNS和IP地址管理。
- 全球根域名服务器:绝大多数在欧洲和北美(全球13台,用A~M编号),中国仅拥有镜像服务器(备份)。
- 全球一共有5个地区性注册机构:ARIN主要负责北美地区业务,RIPE主要负责欧洲地区业务,APNIC主要负责亚太地区业务,LACNIC主要负责拉丁美洲美洲业务,AfriNIC负责非洲地区业务。
- 什么是3R信息。
- 3R即注册人(Registrant)、注册商(Registrar)、官方注册局(Registry)
- 3R注册信息分散在官方注册局或注册商各自维护数据库中,官方注册局一般会提供注册商和Referral URL信息,具体注册信息一般位于注册商数据库中。
- 评价下扫描结果的准确性。
预备知识
实验步骤
1 信息搜集
1.1 外围信息搜集
- 外围信息搜集又叫公开渠道信息搜集。
- 搜索引擎,公共信息库,目标门户网站等等都是很好的入手点。
- metasploit有一类“辅助模块”,可以帮助你进行信息搜集的工作,并且还集成了nmap等神器。
1.1.1 通过DNS和IP挖掘目标网站的信息
-
使用
whois
命令查询域名注册信息:注意:进行whois查询时去掉www等前缀,因为注册域名时通常会注册一个上层域名,子域名由自身的域名服务器管理,在whois数据库中可能查询不到。
从图中可以得到**3R信息**,包括注册人的名字、组织、城市等信息!whois baidu.com
-
使用
nslookup
和dig
命令查询域名:- nslookup:
nslookup可以得到DNS解析服务器保存的Cache的结果,但并不是一定准确的。
``` nslookup > set type=A > baidu.com ``` <img src="https://images2018.cnblogs.com/blog/1071508/201805/1071508-20180509102241289-531264022.png" width="100%" />
- dig:
dig可以从官方DNS服务器上查询精确的结果。
``` dig @dns.baidu.com baidu.com ``` 其中dns.baidu.com为DNS服务器 <img src="https://images2018.cnblogs.com/blog/1071508/201805/1071508-20180509102308600-787167060.png" width="100%" />
-
使用www.maxmind.com根据IP查询地理位置信息:
-
使用netcraft提供的信息查询服务,能获取到更多的更详细的信息:
-
使用IP2进行反域名查询:
可以通过http://www.ip-adress.com/reverse_ip/查询和定位:
国内的也可以用http://www.7c.com/进行查询,结果更准确。
1.1.2 通过搜索引擎进行信息搜集
-
Google Hacking
- Google提供了高级搜索功能。GHDB数据库包含了大量使用Google从事渗透的搜索字符串,
- http://www.exploit-db.com/google-dorks 可以在上述网址看GHDB的内容。
- 一些自动化的工具,SiteDigger ,Search Diggity,Gooscan,具体用法自行百度。
-
搜索网址目录结构:
首先可以手工测试一些常见的目录名,如 admin,login等等。
用Google查询:parent directory site:XXX.com 来查找目录。一般对拓展名为inc,bak,txt,sql的文件要特别留意。inc:可能包含网站的配置信息。
bak:通常是文本编辑器留下的备份文件。
txt or sql:包含网站运行的sql脚本。
自动化的工具:metasploit的brute_dirs,dir_listing,dir_scanner等辅助模块,主要是暴力猜解。以dir_scanner为例:
msf > use auxiliary/scanner/http/dir_scanner。
具体的辅助模块需要百度自行查找。
一些网站还会在根目录下放置robots.txt文件,用以告诉搜索引擎哪些目录和文件不被抓取。
- 搜索特定类型的文件
有些网站会链接通讯录,订单等敏感的文件,可以进行针对性的查找,
如Google,site:XXX.com filetype:xls。
- 搜索E-Mali
metasploit中有search_email_collector,进行针对性的搜集。
msf auxiliary(dir_scanner) > use auxiliary/gather/search_email_collector
-
搜索存在sql注入的页面以及后台登陆的页面:
Google:site:XXX.com inurl:login site:XXX.com inurl:.php?id=1
-
利用traceroute进行IP路由侦查:
traceroute www.baidu.com
1.2 主机探测和端口扫描——基于Armitage自动化实现
1.2.1 活跃主机扫描和操作系统辨别
- ICMP Ping命令
ping www.baidu.com
- 使用netdiscover探测私有网段存活主机:
netdiscover是基于ARP的网络扫描工具。ARP是将IP地址转化物理地址的网络协议。通过该协议,可以判断某个IP地址是否被使用,从而发现网络中存活的主机。Kali Linux提供的netdiscover工具,就是借助该协议实施主机发现。它既可以以被动模式嗅探存活的主机,也可以以主动模式扫描主机。用户还可以根据网络稳定性,调整发包速度和数量。
- Kali中使用命令
netdiscover
对私有网段进行主机探测: - 192.168.0-255.0/16
- 172.16
- 172.26
- Kali中使用命令
- metasploit中的模块
位于modules/auxiliary/scanner/discovery 主要有 arp_sweep, ipv6_multicast_ping, ipv6_neighbor, ipv6_neighbor_router_advertisement, udp_probe,udp_sweep.
arp_sweep 使用ARP请求枚举本地局域网的活跃主机,即ARP扫描器
udp_sweep 使用UDP数据包探测。 - 利用Armitage进行Nmap自动化探测
- 在Armitage中上方工具栏依次选择
Hosts
->Nmap Scan
->Quick Scan(OS detect)
:
- 填写靶机所在网段
10.211.55.0/24
:
- 给靶机扫出来!
- 在Armitage中上方工具栏依次选择
1.2.2 端口扫描与服务探测
扫描技术:TCP Connect ,TCP SYN, TCP ACK ,TCP FIN ,TCP IDLE
- metasploit的端口扫描模块:
用search portscan
命令找到相关模块 - Armitage下Nmap端口扫描和探测详细服务信息:
- 选中靶机
10.211.55.16
,右键选择Services
,查看靶机上开启的端口和相应服务:
可见靶机的139端口开启了netbios-ssn服务,445端口开启了microsoft-ds服务~ - 选中靶机
10.211.55.16
,右键选择Scan
,Armitage会调用Metasploit的漏洞扫描模块,定向扫描靶机,寻找存在的漏洞,为下一步确定攻击方法提供参考依据:
可见类似前几次实验在Metasploit中手动配置主机号、端口号等设置现在统统直接自动化了!
返回目录
- 选中靶机
1.3 服务扫描和查点——基于Armitage自动化实现
metasploit中有许多相关工具,大部分都在Scanner辅助模块,常以[service_name]_version(用以遍历主机,确定服务版本)和[service_name]_login(进行口令探测攻击)命名
可输入 search name:_version查看所有服务查点模块
- 在Armitage中就更简单了!我们选中靶机
10.211.55.16
,右键选择Scan
,Armitage会调用Metasploit的漏洞扫描模块,定向扫描靶机,寻找存在的漏洞,为下一步确定攻击方法提供参考依据:
可见类似前几次实验在Metasploit中手动配置主机号、端口号等设置现在统统实现自动化~
1.3.1 网络服务扫描
- telent服务扫描
use auxiliary/scanner/telent/telent_version
- SSH服务扫描
use auxiliary/scanner/ssh/ssh_version
- Oracle数据库服务查点
msf auxiliary(ssh_version) > use auxiliary/scanner/oracle/tnslsnr_version
- 开放代理探测 open_proxy模块
msf auxiliary(tnslsnr_version) > use auxiliary/scanner/http/open_proxy
1.3.2 口令猜测与嗅探
具体可参考我的上一篇实验博客:2017-2018-2 20155314《网络对抗技术》Exp5 MSF基础应用 - John the Ripper_linux口令破解模块:Armitage下Auxiliary辅助模块应用
-
首先我们需要以特定格式设置用户名和密码Hash(这里选择用MD5在线生成):
-
访问MD5在线加解密网站CMD5,在上方【密文】处输入一段字符串,下方【查询结果】处就立即显示出结果(只要不超过31位,否则会卡住233):
-
分别将不同用户名对应的密码经过MD5在线加密之后得到Hash值,获得下面这张表:
用户名 密码 Hash admin admin 21232f297a57a5a743894a0e4a801fc3 user user ee11cbb19052e40b07aac0ca060c23ee Tom password 5f4dcc3b5aa765d61d8327deb882cf99 jtr_linux abc123 e99a18c428cb38d5f260853678922e03 20155314 qwertyu123. 682e9cfe26d949a10009cfc9969076ad kxjsjc@163.com kxjsjc_wx_1553 d80b3f4f2517d9a3ecf2a1e8031f6ff1
-
-
在Kali攻击机中新建一个名为
hashes.txt
的文本文件,把表中信息添加进去,每行包含一个用户名和一个Hash,以:
分隔(username:hash
):
-
在Armitage左侧树型目录下依次选择
auxiliary
->analyze
->jtr_linux
并双击打开开始配置,配置好JOHN_PATH然后点Launch
:
-
用
show options
命令还可以查看模块的有效选项及其详细描述:
-
Armitage会为我们生成一个单词列表文件WordList,但是不知道什么原因它并没有识别出我的
hashes.txt
而报错:(
-
此时我们手动使用刚刚Armitage生成的单词列表进行破解,打开终端并执行以下命令:
可以看到单词列表中6个口令破解了4个。我们还能看出,John每秒能尝试10,013,000次(10,013KC/s)!!!john --wordlist=/tmp/jtrtmp20180502-5917-ctqwpk --format=raw-md5 hashes.txt
-
至于剩下的两个,可能是我把密码设置得太复杂的原因吧一直没破解出来(ー ー;)将
--wordlist
选项去掉采用暴力破解的方式也一直没跑出来(ー ー;)时间原因跑了不到10分钟就被我掐掉了感觉速度还是比彩虹表要慢很多啊(ー ー;)
1.4 网络漏洞扫描
漏洞扫描器会向目标发送大量数据包,甚至会导致目标系统拒绝服务,而且会有很多误报或漏报,因此需要人工分析。
-
使用OpenVAS漏洞扫描器进行漏洞扫描
OpenVAS是一款开放式的漏洞评估工具,主要用来检测目标网络或主机的安全性。与安全焦点的X-Scan工具类似,OpenVAS系统也采用了Nessus较早版本的一些开放插件。OpenVAS能够基于C/S(客户端/服务器),B/S(浏览器/服务器)架构进行工作,管理员通过浏览器或者专用客户端程序来下达扫描任务,服务器端负载授权,执行扫描操作并提供扫描结果。
一套完整的OpenVAS系统包括服务器端,客户端的多个组件。
-
服务器层组件
-
openvas-scanner(扫描器):负责调用各种漏洞检测插件,完成实际的扫描操作。
-
openvas-manager(管理器):负责分配扫描任务,并根据扫描结果生产评估报告。
-
openvas-administrator(管理者):负责管理配置信息,用户授权等相关工作。
-
-
客户层组件
-
openvas-cli(命令行接口):负责提供从命令行访问OpenVAS服务层程序。
-
greenbone-security-assistant(安装助手):负责提供访问OpenVAS服务层的web接口,便于通过浏览器来执行扫描任务,是使用最简便的客户层组件。
-
Greenbone-Desktop-Suite(桌面套件):负责提供访问OpenVAS服务层的图形程序界面,主要允许在Windows客户机中。
-
- 由于本人使用的Kali中不自带OpenVAS,需要自己安装和配置,使用以下命令安装:
apt-get install openvas
- 安装配置OpenVAS:
openvas-setup
-
-
查找特定服务漏洞
Nmap是针对性扫描工具之一,其拥有很多script的脚本可供使用。
1.5 渗透测试信息数据库共享
metasploit提供了对psrtgresql数据库的支持。并提供了db_namp命令,可以将Nmap扫描结果存入数据库中,还提供了db_import命令,支持多种扫描结果导入。
-
使用网络数据库共享
-
通过RPC 服务共享
2 NMAP
- NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。
- nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。
- Nmap 以隐秘的手法,避开闯入检测系统的监视,并尽可能不影响目标系统的日常操作。
- 基本功能有三个:一是探测一组主机是否在线;其次是扫描主机端口,嗅探所提供的网络服务;还可以推断主机所用的操作系统 。
- 语法格式:namp [空格] 【选项|多选项|协议】 【空格】
- Nmap包含四项基本功能:主机发现(Host Discovery);端口扫描(Port Scanning);版本侦测(Version Detection);操作系统侦测(Operating System Detection)。另外Nmap提供强大的NSE(Nmap Scripting Language)脚本引擎功能,脚本可以对基本功能进行补充和扩展。
- 功能架构图
2.1 基本用法
- 确定端口状况
如果直接针对某台计算的IP地址或域名进行扫描,那么Nmap对该主机进行主机发现过程和端口扫描。该方式执行迅速,可以用于确定端口的开放状况。
命令形式:nmap targethost
可以确定目标主机在线情况及端口基本状况。
- 对主机全面扫描
如果希望对某台主机进行完整全面的扫描,那么可以使用nmap内置的-A选项。使用了改选项,nmap对目标主机进行主机发现、端口扫描、应用程序与版本侦测、操作系统侦测及调用默认NSE脚本扫描。
命令形式:nmap –T4 –A –v targethost
其中-A选项用于使用进攻性(Aggressive)方式扫描;-T4指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4;-v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态。
下面详细讲解每个具体功能。
2.2 主机发现(Host Discovery)
-
默认情况下,Nmap会发送四种不同类型的数据包来探测目标主机是否在线。
- ICMP echo request
- a TCP SYN packet to port 443
- a TCP ACK packet to port 80
- an ICMP timestamp request
依次发送四个报文探测目标机是否开启。只要收到其中一个包的回复,那就证明目标机开启。使用四种不同类型的数据包可以避免因防火墙或丢包造成的判断错误。
-
通常主机发现并不单独使用,而只是作为端口扫描、版本侦测、OS侦测先行步骤。而在某些特殊应用(例如确定大型局域网内活动主机的数量),可能会单独专门适用主机发现功能来完成。
不管是作为辅助用法还是专门用途,用户都可以使用Nmap提供的丰富的选项来定制主机发现的探测方式。-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解析。
--dns-servers <serv1[,serv2],...>: 指定DNS服务器。
--system-dns: 指定使用系统的DNS服务器
--traceroute: 追踪每个路由节点
其中,比较常用的使用的是-sn,表示只单独进行主机发现过程;
-Pn表示直接跳过主机发现而进行端口扫描等高级操作(如果已经确知目标主机已经开启,可用该选项);
-n,如果不想使用DNS或reverse DNS解析,那么可以使用该选项。
-
例子
- 探测scanme.nmap.org
下面以探测scanme.nmap.org 的主机为例,简单演示主机发现的用法。
命令如下:
nmap –sn –PE –PS80,135 –PU53 scanme.nmap.org
- 探测局域网内活动主机
扫描局域网192.168.1.100-192.168.1.120范围内哪些IP的主机是活动的。
命令如下:
nmap –sn 192.168.1.100-120
- 探测scanme.nmap.org
2.3 端口扫描(Port Scanning)
-
端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。
-
默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。
-
Nmap通过探测将端口划分为6个状态:
open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
open|filtered:端口是开放的或被屏蔽。
closed|filtered :端口是关闭的或被屏蔽。 -
用法
端口扫描用法比较简单,Nmap提供丰富的命令行参数来指定扫描方式和扫描端口。
具体可以参见如下描述。- 扫描方式选项
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描。
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。
--scanflags
: 定制TCP包的flags。 -sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。
-sO: 使用IP protocol 扫描确定目标机支持的协议类型。
-b
: 使用FTP bounce scan扫描方式 - 端口参数与扫描顺序
-p
: 扫描指定的端口 实例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP协议、U代表UDP协议、S代表SCTP协议)
-F: Fast mode – 快速模式,仅扫描TOP 100的端口
-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)。
--top-ports
:扫描开放概率最高的number个端口(nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率。以此排列出最有可能开放端口的列表,具体可以参见文件:nmap-services。默认情况下,nmap会扫描最有可能的1000个TCP端口) --port-ratio
: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,让概率大于--port-ratio的端口才被扫描。显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services文件。 -
例子
这里,我们以扫描局域网内192.168.1.100主机为例。
命令如下:nmap –sS –sU –T4 –top-ports 300 192.168.1.100
参数-sS表示使用TCP SYN方式扫描TCP端口;-sU表示扫描UDP端口;-T4表示时间级别配置4级;--top-ports 300表示扫描最有可能开放的300个端口(TCP和UDP分别有300个端口)。
2.4 版本侦测(Version Detection)
-
版本侦测,用于确定目标主机开放端口上运行的具体的应用程序及版本信息。
-
版本侦测主要分为以下几个步骤:
- 首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。
- 如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。
- 如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
- 如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。
- 如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。
- 如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务
-
版本侦测的用法
-sV: 指定让Nmap进行版本侦测
--version-intensity: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。
--version-light: 指定使用轻量侦测方式 (intensity 2)
--version-all: 尝试使用所有的probes进行侦测 (intensity 9)
--version-trace: 显示出详细的版本侦测过程信息。 -
例子
命令:
nmap –sV 192.168.1.100
对主机192.168.1.100进行版本侦测。
2.5 操作系统侦测(Operating System Detection)
-
操作系统侦测用于检测目标主机运行的操作系统类型及设备类型等信息。
-
Nmap拥有丰富的系统数据库nmap-os-db,目前可以识别2600多种操作系统与设备类型。
-
OS侦测用法
-O: 指定Nmap进行OS侦测。
--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)。
--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。 -
例子
命令:
nmap –O 192.168.1.100
实验中遇到的问题及解决过程
解决方案
实验总结与体会