博主昵称:摆烂阳
博主主页跳转链接
博主研究方向:渗透测试 、python编程
博主寄语:希望本篇文章能给大家带来帮助,有不足的地方,希望友友们给予指导
信息收集是安全渗透测试非常重要的环节,在对目标进行安全渗透之前,需要充分掌握目标的基本信息,通过这些基本信息了解目标的情况,为后续的渗透提供支持。掌握的信息越多、越全面,渗透成功的概率就越大。
在进行信息收集之前首先要明确信息收集的目标是什么,一般情况下信息收集的目标就是用户准备要渗透的目标,要根据用户实际情况来定。对于安全领域来说,信息收集的目标通常有以下四个:
硬件设备时计算机系统、网络系统运行的基础,大的方面包括系统构架信息、网络设备信息(包括网络终端设备,如主机、服务器、智能终端;网络连接设备,如中继器、集线器、网关、交换机、路由去、网关、AP等);小的方面包括CPU、内存、磁盘、网卡、声卡、显卡、调制解调器、接口、数据线等各种设备的信息。
操作系统时逻辑上的第一层软件,统一管理整个计算机系统的软硬件资源。操作系统属于系统级的文件,与计算机的底层硬件联系紧密,并为上层应用软件的运行提供服务。操作系统主要的功能有:为整个计算机系统提供硬件驱动、存储管理、文件系统、输入输入操作(I/O)、进度调度、数据库系统、网络服务、安全审计等方面的服务。同时为运行在操作系统之上的应用软件提供API接口供其调用,实现应用软件的功能。
计算机、网络和移动终端的应用之所以如此普及,与种类繁多、形式多样、满足人们各种需求的应用软件是分不开的。无论是硬件平台、操作系统还是网络设施,其作用都是为了满足人们各种各样的应用需求。应用软件数量庞大、种类繁多,与具体的应用相关联,很容易成为黑客攻击的目标,除了传统的四大应用——Web应用、邮件服务、远程登陆服务、FTP应用之外,随着电子商务、电子政务和各种手机APP应用的普及,这些新兴的应用日渐成为黑客攻击的主要命令。
局域网、城域网和广域网将计算机连接在一起,互联网在网络连接在一起,物联网将物体连接在一起。网络已经成为信息社会最基本的基础设施,借助网络,人、物体和各种终端设备连接起来,打造出一个万物互联的世界。在当今社会,网络的应用如此普及,针对网络的攻击也越来越频繁,早先,有线网络时黑客攻击的主要目标,而今,随着无线网络技术的发展,各种应用搬到了以智能手机为代表的移动终端上,因此网络攻击的目标有从有线网络转移到无线网络的趋势。
在明确攻击目标之后,需要了解目标的一些重要信息,弄清楚目标的基本情况,因此要对目标进行信息收集。哪些信息是重要的,对攻击有帮助的呢?针对不同的攻击目标,信息收集的主要内容包括以下几个方面:
对于软件设备要收集的信息除了硬件名称、厂商、型号、生产日期、使用寿命这些通用信息外,还要根据硬件产品的功能和用途,针对不同的硬件弄清楚其特有的信息(比如性能)、例如对于磁盘来说,要弄清楚其接口、制造工艺、容量、转速、磁盘访问速度、磁盘文件格式、散热情况等信息;对于网卡来说要弄清楚其接口、带宽、有线还是无线等,对于无线网卡还要进一步弄清楚其信号强度、信号覆盖范围、信道数等信息。
对于操作系统需要了解主机名称、操作系统名称、操作系统类型(如32位、64位)、操作系统版本、操作系统制造商、操作系统配置、操作系统构件类型、系统用户、初始按照时间等基本信息,然后根据操作系统版本信息可以通过网络查找该版本操作系统的特性、提供了哪些服务,以及存在的问题(即漏洞)。这些信息一般是公开的,在网上可以找到。
对于应用软件要搞清软件的名称、版本、运行平台(一般指其运行的操作系统平台,包括类型和版本支持)、运行环境、工作模式(如单机模式、客户机/服务器模式、浏览器/服务器模式、P2P模式等)、文件目录、文件名称和大小、可执行的程序名称、运行的进程名称、运行的端口、CPU占用率、内存使用情况、网络带宽等信息。同样地,根据应用软件地版本信息可进一步通过网络查找该版本应用软件已经发布在网上的漏洞。
对于计算机网络环境来说,要搞清楚网络类型信息(如有线网络、无线网络、卫星通信、局域网、城域网、广域网、私有网络、企业网络、内部网络、外部网络等信息)、网络拓扑信息(如物理拓扑、逻辑拓扑)、网络协议信息(如链路层协议、网络层协议、传输层协议、应用层协议、路由协议等)、网络技术指标(如组网技术、有线技术、无线网络技术、数据加密技术、数据传输技术等)、网络性能指标(如网络带宽、网络时延、带宽时延积、网络的收敛时间、网络吞吐量、网络的可靠性等)。
需要指出的是,以上目标并不是孤立的,在对一台主机进行攻击时,往往需要综合考虑其硬件设备、网络环境、操作系统和运行的应用,对这些信息进行收集。还是那句话,信息收集得越全面,攻击成功的概率越大。
按照信息收集的方式来分,信息收集可以分为以下两个方面:
被动信息收集不会与目标服务器做直接的交互,在不被目标系统察觉的情况下,通过搜索引擎、社交媒体等方式对目标外围的信息进行收集,例如:网站的Whois信息、DNS信息、管理员以及工作人员的个人信息等等。所谓被动信息收集,形象地说,就是不触及目标系统自身,而是对其周边的情况进行打探,避免直接接触目标而打草惊蛇。
主动信息收集和被动信息收集正好相反,主动信息收集会与目标系统有直接的接触和交互,从目标系统直接获取需要的情报信息,例如:直接扫描目标系统开放的服务端口、采用TCP/IP堆栈探测技术收集目标主机的操作系统信息。
IP地址是一个逻辑地址,工作在TCP/IP协议栈的网络层,位于IP协议的首部字段中,分为源IP地址和目的IP地址。由于目前IP协议有IPV4和IPv6 两个版本,因此对应的IP地址也有两种,一种是32位的IPv4地址,另一种则是128位的IPv6地址,这两种地目前都在使用。用户习惯并且使用最多
的是32位的IPv4地址,该地址一般用点分十进制表示,如“192.168.1.3”。
IP地址实现两级寻址,由高位的网络地址
和低位的主机地址
两部分组成
IP地址中网络地址与主机地址的分界线有以下两种方式来确定
有类地址
:可以按照有类地址的规则将IP地址划分为A、B、C、D、E五类,在有类地址中,IP地址的网络地址的位数遵循默认的规则,以常用的C类地址为例,其高位三个字节为网络地址,低位一个字节为主机地址;
无类地址
:利用掩码来区分网络位和主机位,如掩码255.255.255.0,表明高三个字节为网络地址,与C类地址相同。
查询IP地址的方法有以下几种:
如果要查询本机的IP地址,方法很简单,在Windows系统中可采用“ipconfig”命令,在Kali系统中可采用“ifconfig”命令,如下图所示:
根据上图,采用“ifconfig”命令可以查看到Kali虚拟机系统所有的网络接口信息,其中lo为环回接口,eth0为当前工作的网卡接口。图中显示了“eth0”网络接口的最大传输单元、IP地址、网络掩码、所在网段的广播地址、IPv6的地址以及一些发送和接收数据包的信息。根据查询到的IP地址和网络掩码,可以计算出该主机所在网段的网络地址为“192.168.137.0/24”,这样通过路由器就可以找到该网段。找到该网段后,再根据主机号“128”定位该主机。这个过程要用到ARP,也就是找到目标网段后,根据IP地址,采用ARP协议找到其对应的网卡物理地址,这样就可以在物理上(或链路上)找到目标主机的网卡,构造完整的链路层的数据帧,将数据帧发给目标主机,实现通信。
要查询某个网站的IP地址,一般情况是已知该网站的网址,根据网址来查询其IP地址。大家知道访问网站时,在浏览器地址栏输入该网站的网址就可以访问了,其背后的原理用到了域名系统(DNS)服务,所谓DNS服务是在容易记忆的网站域名和难以记忆的Web服务器IP地址之间建立一个对应关系表,用户通过域名去访问网站实质上访问的是网站的网页文件所在的Web服务器的IP地址。可采用“ping”命令来实现,只要用“ping”命令ping一下网站域名即可,如下图所示:
根据上图,百度网站Web服务器的IP地址为“39.156.66.18”,我们可以在浏览器中直接输入这个IP地址来打开百度网站,这个过程避免了DNS域名解析,打开网站的速度要比通过域名访问网站要快一些,如下图所示:
当然,目前很多网站为了防止服务器IP地址的泄露,减轻服务器的负担,往往会采用“内容分发网络”技术,一方面可以避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定;另一方面通过这种镜像访问服务,使得用户实际访问的是服务器的远程镜像缓存服务器,而避免用户对原站点Web服务器的直接访问。因此采用上述方法获得的网站服务器的IP地址可能不是真实服务器的IP地址,而是多个镜像服务器IP地址中的一个。要想获得网站真实服务器的IP地址,在ping网站域名时,可以把前面的“www”去掉,直接ping后面的部分,以百度网站为例,可以ping域名“ baidu.com ”,如下图所示:
根据上图,去掉“www”后,得到的百度网站服务器的IP地址为“39.159.66.10”,这个地址为百度网站真实服务器的IP地址。ping某个网站的域名时,系统会去做DNS解析,找到网站域名对应的服务器的IP地址,然后再发送ICMP协议“回应请求和应答报文”中的请求包给该IP地址对应的服务器,如果能够访问,服务器将回应ICMP应答包给发起ping命令的主机作为应答。所以ping命令实际上ping的就是网站所在服务器的IP地址。很多使用CDN服务器的站点没有将一级域名解析到CDN服务器上,在进行DNS解析时,一级域名对应的IP地址不是CDN镜像服务器的IP地址,而是真实服务器的IP地址。也就是说当去掉“www”后,“ baidu.com ”变成了一级域名,该一级域名没有解析到百度的CDN镜像服务器上,而是与百度真实服务器的IP地址对应。在浏览器中输入IP地址“39.159.66.10”,同样可以访问百度网站,如下图所示:
Whois是一个用来查询域名的IP以及所有者等信息的传输协议,而Whois 信息就是查询域名是否已经被注册,以及注册域名的详细信息,包括域名所有人、域名注册商、注册地址、注册时间等信息。可以采用Whois命令或一些可以查询Whois信息的工具来查询目标域名的Whois信息,也可以在网络上通过一些专门提供Whois查询服务的网站查询。Whois查询服务的端口一般是TCP协议的43号端口。每个域名的Whois信息由对应的管理机构保存。
用Whois命令查询网站的Whois信息(域名信息),只需在Whois命令之后跟上要查询的网站域名即可,继续以百度网站为例,其Whois信息如下图所示:
采用Whois命令可以查询到网站域名以及域名注册人的相关信息,例如域名注册商、DNS服务器地址、联系电话、邮箱、姓名、地址等。
一些网站也提供了Whois信息查询服务,如 http://whois.chinaz.com/, 在浏览器中打开网站,在网页中输入要查询的网站域名,即可得到域名对应的Whois信息,如下图所示:
需要指出的是,一些网站的Whois信息出于安全的考虑,可能会被服务商屏蔽,无法查询到其Whois信息。
DNS提供了域名服务,实现了域名到服务器IP地址的解析。整个域名服务系统的核心是一台或多台域名服务器(DNS服务器),DNS服务器上存储着域名与服务器IP地址的对应关系。用户在浏览器中输入网站域名时,会先在本地缓存中查询域名对应的Web服务器IP地址,如果找不到,则会查询为其配置的DNS服务器,从DNS服务器获取与该域名对应的Web服务器IP地址。有时候网络明明是通的,却无法在浏览器中打开某个网站的网页,往往是因为DNS服务器的IP地址设置错误。可使用“host”命令来查询DNS信息,也可以使用工具来查询。
在Kali系统中可使用“host”命令来查询DNS信息,以百度网站的DNS服务器为例,其查询过程如下图所示:
host命令中用到的命令行参数含义如下:
-t:指定查询的域名信息类型,后面跟ns表示查询DNS的NS记录。
NS(Name Server)记录:
所谓NS记录是指域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。当用户注册域名时,总有默认的DNS服务器,每个注册的域名都是由一个DNS域名服务器来进行解析的,DNS服务器的NS记录地址一般以以下的形式出现:
ns1.domain.com 、ns2.domain.com等。简单地说,NS记录是指定由哪个DNS服务器对域名进行解析。
所谓旁站就是和目标网站处于同一服务器的站点,有些情况下,在对一个网站进行渗透时,发现网站安全性较高,久攻不下,那么我们就可以试着从其旁站入手,等拿到一个旁站的Webshell(是指以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,可将其视为一种网页后门)后,看是否有跨目录的权限,如果有,直接对目标网站进行跨权限渗透;如果没有,继续提升权限拿到更高权限之后再对目标网站进行渗透。
要弄清楚C段网站查询,首先要知道什么是C段。我们知道IPv4地址常用点分十进制的方式表示,每个IP地址都有四个分段,如IP地址“123.125.115.110”,123为A段,125为B段,115为C段,110为D段。
在进行Web渗透时,如果目标站点没有拿下,而旁站也一无所获,或者根本没有旁站,服务器也没有发现其他漏洞,那么怎么办呢?我们可以通过渗透同一个C段的网站、提权拿下服务器,也就是尝试拿下D段1~254中的一台服务器,接着进行内网渗透,这时可用的方法就多了,比如:ARP欺骗、嗅探等。那么,如何收集C段存在的站点呢?之前有不少C段查询的工具,由于这些工具多数使用的必应(Bing)接口, Bing接口现在已经做了限制,需要申请Api-Key,所以很多工具不能用了,如果要收集C段站点的话,可以用旁站查询中的方式挨个查询。
搜索引擎作为信息搜索的重要工具,在信息收集方面的作用不可忽视。用户可以使用搜索引擎对某些特定的网络主机漏洞(通常是服务器上的脚本漏洞)进行搜索,以达到快速找到漏洞主机或特定主机的漏洞的目的。利用Google搜索引擎定义的语法格式,可以对搜索进行高级的定制。本节就以Google为例,介绍利用Google搜索引擎收集信息的一些常用的方法。
查找与某个网站相关的URL地址信息,可以使用关键词“site”来实现,语法格式为:“site:要查找的网站域名”。以百度网站为例,其查询结果如下图所示:
搜索到的这些网站URL都是和百度网站相关的,在这些网站中很可能存在百度网站的旁站
查找与某个网站存在链接的站点信息,可以使用关键词“link”来实现,语法格式位:“link:要查询的网站域名”。以百度为例,其查询结果如下图所示。
如上图所示,采用link关键字在Google中搜索到与百度网站存在链接关系的站点,在这些站点中有可能很多与百度的主页属于C段网站,也就是在同一个局域网或内网中。
查找指定类型的文件可使用关键词“filetype”,语法格式为:“site:要查找的网站域名filetype:文件类型”。例如在百度文库网站中查找“pdf”格式的文件,其查询结果如下图所示:
其中文件类型字段“filetype”后可跟以下文件格式:doc、xls、ppt、pdf、rtf、txt、swf、ps、all等。其中, all包含所有文件类型。
发现主机主要是指对某个网段进行扫描,找到其中所有有效的IP地址(即能够访问的在线的主机),在Kali中可采用工具nmap来对某个网段的IP地址进行查询,采用nmap对其查询的结果如下图所示:
-sP:执行ping扫描,判断主机是否在线。
端口是一种抽象的软件结构,它既是通信进程的标识,也是进程访问传输服务的入口点。每个端口都有一个16位的端口号,其分配方式有两种:
采用集中控制方式由权威机构IANA分给特定应用程序端口号并公开发布出来,所有协议软件都遵守这种分配,因此又称为熟知端口或周知端口。其分配的范围为0~1023。其缺点是不能适用大量且变化迅速的端口使用环境。
根据应用软件的需要动态分配端口号。如当某个应用进程需要与远程的某个已知端口服务器进行通信时,向本地操作系统动态提出申请,操作系统返回一个本地唯一的端口号。所申请的端口号又称为临时端口号。当通信完成后,该端口号就释放掉。这种分配方式的特点是灵活方便,缺点是其他主机难以得知其端口号。大多数TCP/IP应用中,临时端口号的分配范围为1024~5000,大于5000的端口号一般为其他服务预留。
nmap是一款功能强大的信息收集工具,在执行端口扫描时可使用命令行参数-p来开启其端口扫描功能,并指定扫描的端口范围,扫描结果如下。
如下图所示,在-p参数后指定扫描的端口范围为1~1023,扫描结果显示出开放的端口及其对应的服务名称。一般情况下,为节省端口扫描的时间,只需扫描周知端口即可,因为常见应用服务一般都采用周知端口,以便于用户的连接。但是不排除一些木马程序,其被控制端(服务器端)进程为了更好的隐蔽自身,会采用端口在1024以上的临时端口。
信息收集可以说是进行安全渗透的准备阶段,准备得越充分,安全渗透成功的概率就越大,多数情况下攻击者通过对攻击目标的信息收集就可以确定该目标是否有攻击的价值,以及攻击成功的概率。信息收集看似简单,但是却很需要经验、分析能力以及较为全面的安全方面的知识,因为只有这样才能从繁多的信息中抽丝剥茧,找到真正有用的信息。