购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第1章
准备实验环境

通过本章学习,读者可以达到以下目标:

1.了解渗透测试的基本流程。

2.安装VMWare虚拟机,安装Kali和CentOS系统。

3.搭建LAMP网站平台,安装DVWA。

渗透测试,是指对计算机系统进行模拟攻击,从而对其安全性进行验证。

在现阶段,黑客的攻击目标主要是网站,所以通常所说的渗透测试主要是指针对网站的Web渗透测试。当然,渗透测试的过程,除了Web,还会涵盖操作系统以及数据库等方方面面的知识。

“渗透”这个词也非常形象,对任何一个系统的攻击,通常是一个复杂而漫长的过程,而且很可能在经过反复尝试之后,也无法找到突破点,最终渗透测试以失败告终。当然,能否渗透成功,除了目标系统的安全性之外,渗透测试人员的技术实力必然是一个重要的影响因素。

总之,渗透测试是一门技术性和综合性非常强的学科。为了更好地完成后续的渗透测试操作,本章将用大量的篇幅去介绍如何搭建实验环境,这也是学习后续内容的必备基础。

1.1 渗透测试概述

1.1.1 渗透测试基本流程

渗透测试并没有固定的流程和步骤,图1-1主要是从渗透测试所要达到的目标这个角度来做简单介绍。

进行渗透测试,首先需要明确攻击目标。在现实环境中,渗透目标通常会是一个网站(Web服务器),在本书的实验环境中,渗透目标则是靶机。

本书中所使用的靶机全部来自VulnHub(https://www.vulnhub.com/),这是一个全球知名的开源靶场,我们可以从网站中下载靶机镜像,然后直接导入VMware虚拟机中使用。

图1-1 渗透测试的基本流程

除了靶机,本书还引用了大量CTF例题,这些例题主要来自以下网站。这些网站都是知名的公共学习平台,网站中所有题目都是免费的。

BUUCTF:https://buuoj.cn/challenges。

攻防世界:https://adworld.xctf.org.cn。

Bugku:https://ctf.bugku.com/。

青少年CTF:https://www.qsnctf.com/。

另外需要强调的是,如果未取得授权,切记一定不要在真实环境中进行渗透测试,否则就是违法行为。本书中的所有操作都是在实验环境中进行的。

在明确了渗透目标之后,渗透测试的第一步通常都是信息收集,即要尽可能全面地收集目标系统的敏感信息。当然,具体要收集什么敏感信息,本书后续将进行详细介绍。

在掌握了足够多的信息之后,接下来就要分析其中是否存在可以利用的漏洞。任何系统中都有可能存在各种各样的漏洞。如果这个漏洞的危险级别比较低(低危漏洞),或者是因为种种限制,这个漏洞无法被有效利用,那么都将导致渗透测试被迫结束。

对于渗透测试人员,最有价值的就是那些可以造成严重危害的高危漏洞。从图1-1可以看出,渗透测试人员的主要目的就是希望可以借助于高危漏洞来获取系统权限,从而控制整台服务器。

当然,对于零基础的读者,可能一时还很难理解什么是获取系统权限,怎样才是控制了整台服务器,后续本书都将对这些概念一一进行详细介绍。

1.1.2 关于漏洞

网络安全的核心是漏洞(Vulnerability),不论是攻还是防,都是围绕着各种漏洞展开的。

安全漏洞是指信息系统中存在的缺陷或不适当的配置,它们可使攻击者在未授权的情况下访问或破坏系统。

从漏洞的定义中可以看出,安全漏洞要么是系统或程序本身的缺陷,如缓冲区溢出漏洞、SQL注入漏洞等,要么是管理人员不恰当的配置,如弱口令漏洞、不恰当的权限配置等。

那么,具体哪些地方可能会产生漏洞呢?大概包括以下3个层面。

通信层面:主要是在数据传输过程中存在的一些漏洞,如ARP欺骗、明文传输、拒绝服务等。

系统层面:包括操作系统(Linux、Windows)本身,以及系统中运行的各种服务(Apache、Nginx、IIS),都可能会存在各种漏洞。

应用层面:主要是指Web应用,即网站。网站是黑客最主要的攻击目标,相应的Web安全也是目前信息安全中最主流的一个分支。Web安全中涉及的漏洞非常多,如SQL注入、命令执行、文件上传、反序列化等。

其中,系统层面和应用层面是我们的主要学习方向。从攻击的角度,黑客在渗透测试的过程中,主要目的就是找出目标系统中存在的安全漏洞,并实施攻击。从防守的角度,管理人员也应在了解各种漏洞的基础之上,采取有效的防御措施,避免产生漏洞。

世界上不存在完美的事物,理论上任何一个系统或者应用都会存在漏洞,只是我们能否发现而已。当然,如果一个系统或者应用中没有发现目前已知的各种漏洞,那么也就可以认为这个系统或应用是安全的。

有一种漏洞被称为0day漏洞,特指最新被挖掘出来的,而且没有任何防御措施的漏洞。毫无疑问这是最有价值的一类漏洞,例如2021年年末发现的“Apache Log4j”就是一个典型的0day漏洞。这种漏洞之所以称为0day,是因为在一个漏洞被发现之后,存在漏洞的系统或者应用的相应厂商或组织通常会及时发布补丁程序来进行修补,但在漏洞被发现直至补丁程序发布的这段时间,就被称为0day。在这期间,黑客们利用0day攻击目标系统可以达到100%的成功率,同时也可以躲避检测。因此,挖掘0day漏洞是高水平黑客的主要目标。

对于一个初学者,我们不可能去挖掘0day漏洞,我们的目标是去学习和利用各种已知漏洞。这些已知漏洞也是浩如烟海,由于开发人员或者运维管理人员存在知识或能力上的缺陷和不足,在目前正在运行和使用的各种系统中仍然可能存在大量的已知漏洞。那么,我们如何发现系统或应用中是否存在已知漏洞呢?一方面可以借助于各种扫描工具,另一方面更加重要的是需要我们的知识和经验的积累。

接下来,我们将通过一台台靶机,去学习和了解如何找出一个系统或应用中存在的漏洞并加以利用。同时,还要分析和理解这些漏洞为什么会产生,如何去进行利用,以及怎样修补。当然,这里不会涉及一些很复杂的知识或操作,主要是介绍思路和方法。

1.2 搭建实验环境

本书的实验环境需要用到以下软件。

VMware WorkStation(简称VMware):VMware是一个广泛使用的虚拟机软件,利用VMware可以创建安装各种操作系统的虚拟机。本书的所有实验操作都是在虚拟机中进行的。

Kali Linux(简称Kali):用作攻击机。

CentOS 7:用作服务器。

Xshell:Xshell是一个远程连接软件,通过Xshell远程连接到Kali和CentOS虚拟机上,可以更便于执行各种操作。

各种VulnHub靶机。

下面分别介绍如何安装和使用这些软件。

1.2.1 安装配置VMware

1.创建VMware虚拟机

VMware是由美国的VMware公司推出的一款著名的虚拟化软件。VMware的安装过程比较简单,下面简要介绍主要步骤。

(1)运行安装程序,打开安装向导。接受许可协议之后,修改软件的安装位置。建议不要使用默认的安装路径,而是将VMware安装到C盘以外的分区,如安装到D:\vmware文件夹中。

(2)输入序列号进行注册。序列号可以从网上查找,正确注册之后,VMware的安装就完成了。

安装完VMware之后,就可以创建并使用虚拟机了。

下面以创建一个用于安装CentOS系统的虚拟机为例,介绍创建虚拟机的主要步骤。

(1)在VMware主窗口中单击“创建新的虚拟机”按钮,打开“新建虚拟机向导”。

(2)选择“自定义”模式,以对虚拟机中的硬件设备进行定制。

(3)在“安装客户端操作系统”界面中选择“稍后安装操作系统”,待创建完虚拟机之后再单独进行系统的安装。

(4)选择要安装的操作系统版本为“CentOS 64位”,如图1-2所示。

图1-2 选择安装的操作系统版本

(5)设置虚拟机名称及虚拟机文件的存放位置。建议最好在C盘以外的专门文件夹中单独存放,如图1-3所示。

图1-3 设置虚拟机名称及虚拟机文件的存放位置

(6)对虚拟机的CPU和内存进行配置。

物理主机的CPU现在都是多核心的,一般只给虚拟机配置1个或2个CPU核心即可。

虚拟机内存可根据物理内存的大小灵活设置,一般建议设为2 GB。

(7)网络类型以及I/O控制器、磁盘类型都选择默认设置。

在“选择磁盘”界面中选择“创建新虚拟磁盘”。虚拟磁盘以扩展名为“.vmdk”的文件形式存放在物理主机中,虚拟机中的所有数据都存放在虚拟磁盘中。

然后,需要指定磁盘容量,默认为20 GB,如图1-4所示。这里的容量大小是允许虚拟机占用的最大空间,而并不是立即分配使用这么大的磁盘空间。磁盘文件的大小随着虚拟机中数据的增多而动态增长,但如果选中“立即分配所有磁盘空间”复选框,则会立即将这部分空间分配给虚拟机使用,所以不建议选中该复选框。

另外,建议选中“单个文件存储虚拟磁盘”单选按钮,这样会用一个单独的文件来作为磁盘文件。如果选中“虚拟磁盘拆分成多个文件”单选按钮,则会影响虚拟机性能。

图1-4 设置虚拟磁盘

至此,一台新的虚拟机就创建好了。

2.配置虚拟网络

本书的实验环境中会用到多台虚拟机,这些虚拟机之间既要彼此通信,而且还要能够访问互联网,这就需要对VMware的虚拟网络进行正确配置。

VMware提供了3种不同的网络模式:桥接、仅主机、网络地址转换(NAT)。默认情况下,所有的虚拟机都是采用NAT模式,这也是本书推荐采用的网络模式。通常我们无须做任何配置,采用NAT模式的虚拟机之间都可以正常通信,并能够访问互联网。下面对这些不同的网络模式做简单介绍。

打开虚拟机设置界面,选中网络适配器,可以看到虚拟机有“桥接模式”“NAT模式”“仅主机模式”3种不同的网络连接模式,每种网络模式都对应了一个虚拟网络,如图1-5所示。注意,必须要保证选中了“设备状态”中的“已连接”复选框,否则虚拟机就相当于没有插接网线。

1)桥接模式

在桥接(bridged)模式下,虚拟机就像是一台独立主机,与物理主机是同等地位,可以通过物理主机的网卡访问外部网络,外部网络中的计算机也可以访问此虚拟机,如图1-6所示。

为虚拟机设置一个与物理网卡在同一网段的IP,则虚拟机就可以与物理主机以及局域网中的所有主机之间互相通信。

桥接模式对应的虚拟网络名称为VMnet0,在桥接模式下,虚拟机其实是通过物理主机的网卡进行通信的,如果物理主机有多块网卡(例如一块有线网卡和一块无线网卡),那么还需注意虚拟机实际是桥接到了哪块物理网卡上。

图1-5 设置网络模式

图1-6 桥接模式示意图

在“编辑”菜单中打开“虚拟网络编辑器”,可以对VMnet0网络桥接到的物理网卡进行设置,如图1-7所示。

2)仅主机模式

仅主机(host-only)模式对应的是虚拟网络VMnet1。VMnet1是一个独立的虚拟网络,它与物理网络之间是隔离开的,如图1-8所示。也就是说,所有设为仅主机模式的虚拟机之间以及虚拟机与物理主机之间可以互相通信,但是它们与外部网络中的主机之间无法通信。

安装了VMware之后,在物理主机中会添加两块虚拟网卡:VMnet1和VMnet8,其中VMnet1虚拟网卡对应了VMnet1虚拟网络。如果物理主机要与仅主机模式下的虚拟机之间进行通信,那么就得保证虚拟机的IP与物理主机VMnet1网卡的IP在同一网段。

3)网络地址转换模式

网络地址转换模式对应的虚拟网络是VMnet8,这也是一个独立的网络。

图1-7 设置桥接的物理网卡

图1-8 仅主机模式示意图

在此模式下,物理主机就像一台支持NAT功能的代理服务器,而虚拟机就像NAT的客户端,虚拟机可以使用物理主机的IP地址直接访问外部网络中的计算机,但是由于NAT技术的特点,外部网络中的计算机无法主动与NAT模式下的虚拟机进行通信。

物理主机与NAT模式的虚拟机之间,以及所有NAT模式的虚拟机之间,都是可以互相通信的,前提是虚拟机的IP要与VMnet8网卡的IP在同一网段。

如果物理主机已经接入Internet,那么只需将虚拟机的网络设为NAT模式,虚拟机就可以自动接入Internet,所以如果虚拟机需要联网,那么非常适合设置为NAT模式。

在本书的实验环境中,所有的虚拟机都推荐采用默认的NAT模式。在这种模式下,VMware会自动为虚拟机分配IP地址等网络参数。在“虚拟网络编辑器”中选中VMnet8,然后单击“DHCP配置”,可以查看到自动分配的IP地址范围,如图1-9所示。

在“NAT设置”中,可以查看到虚拟机所使用的网关,默认是使用网段中的第2个IP地址作为网关,如图1-10所示。

后续我们创建好的虚拟机,VMware就会按照这些默认设置自动为其分配好各项网络参数。所以,我们通常不需要对虚拟网络做任何配置即可正常使用。

图1-9 查看NAT模式的IP地址范围

图1-10 查看NAT模式的网关

1.2.2 Linux系统简介

下面将重点介绍如何安装配置Kali和CentOS虚拟机。Kali和CentOS都属于Linux系统,它们之间有什么联系和区别呢?

Linux系统最本质的特征是开源,这也是Linux被广泛应用的最主要原因。但开源的特性也带来了一个问题,就是存在着大量Linux发行版,Kali和CentOS就分别属于两种不同的Linux发行版。要厘清这些Linux发行版之间的联系,就要先了解什么是Kernel(内核)。

Linux的作者是李纳斯·托沃兹(Linus Torvalds),但他发布的其实只是Linux Kernel。Kernel是负责完成操作系统最基本功能的程序。

Kernel的作用如图1-11所示。Kernel直接运行在计算机硬件之上,主要作用是管理计算机中的硬件资源。例如指挥CPU去做各种运算,从内存或硬盘中读写数据,通过网络与其他计算机通信等。

图1-11 Kernel的作用

Kernel虽然很强大,但用户是无法直接使用它,用户使用的是安装在Kernel上的各种外围程序。例如我们平常使用的安装了Windows系统的计算机,其实主要是在使用浏览器、微信、Office这些外围程序,而所有的外围程序都需要安装在Windows系统的内核之上。

所以Kernel的主要作用就是负责统一管理计算机中的硬件资源,从而为应用程序提供运行环境,因而可以将Kernel看作是计算机中所有软件的核心和基础。

自从1991年李纳斯在互联网上发布了第一版的Kernel之后,截至今日,Linux Kernel仍是由李纳斯领导的一个小组负责开发更新的。Linux Kernel的官方网站是https://www.kernel.org,用户从该站点中可以免费下载目前已发布的所有版本的Kernel。

Kernel虽然很重要,但作为一个最终提供给用户使用的操作系统,仅仅只有内核是远远不够的,在Kernel上还必须安装各种外围程序。很多公司或组织在Linux内核的基础之上添加上各种管理工具和应用软件,这样就构成了一个完整的操作系统,像这样将系统内核和应用软件封装在一起的操作系统就称为Linux发行版。我们平常所使用的各种Linux系统,其实都是Linux的发行版。

由于Linux开源的特性,任何公司或社团甚至是个人都可以将Linux内核和各种自由软件打包成一个完整的Linux发行版。据不完全统计,目前各种Linux发行版本已超过300种,虽然每个Linux发行版都有不同的名称,但其实所采用的都是相同的Linux Kernel,只不过在不同的发行版中所安装的应用软件是有区别的,从而使得不同的发行版可以适合不同的用途。总体而言,不同的Linux发行版在操作和使用上都是类似的,只要学会了其中的一种,其他的就可以触类旁通了。

目前Linux发行版主要分成了两大派系,分别是RedHat和Debian。

RedHat派系的Linux运行稳定,主要用作服务器的操作系统,CentOS就属于这个派系。本书中我们需要用CentOS搭建一个Web服务器。

Debian派系的Linux更新速度比较快,也提供了更为丰富的应用软件。Kali就属于Debian派系,在Kali中内置了大量的安全工具,因而Kali主要用作攻击机。

总结:Kali和CentOS都属于Linux发行版,它们使用的是相同的Kernel(版本会有区别),它们的主要区别是所安装的应用软件和管理工具有所不同。在这两个系统中,绝大多数操作都是通用的,对于某些不一致的操作,在后面用到时也会予以说明。

1.2.3 安装配置Kali

在本书的实验环境中,Kali被用作攻击机。下面将介绍下载安装Kali、设置网络以及设置中文界面。

1.下载安装Kali

Kali的官网是https://www.kali.org,可以从官网免费下载最新的Kali系统。

Kali官网提供了安装镜像(Installer Images)和虚拟机(Virtual Machines)两种不同的安装版本,如果使用安装镜像的话,在安装过程中需要下载大量安装包,比较耗时,而且默认也没有安装图形界面,因此对于初学者使用会有一定难度。

这里推荐下载虚拟机版本,如图1-12所示。这是一个已经安装好系统的虚拟机镜像,下载解压之后直接可以在虚拟机中使用了,尤其适合于初学者。

图1-12 下载Kali虚拟机镜像

Kali官网提供了很多不同类型的虚拟机镜像可供选择,我们这里使用64位的VMware虚拟机镜像,如图1-13所示。

下载解压之后,找到扩展名为.vmx的虚拟机文件,直接双击就可以把Kali虚拟机导入VMware中了,如图1-14所示。

导入虚拟机之后,开机进入系统登录界面,默认的账号和密码都是kali。

图1-13 下载VMware 64位Kali虚拟机镜像

Kali官方不建议直接使用root用户,但使用默认的kali用户执行很多操作时,都需要通过sudo来提升权限。因此,本书为了方便操作,建议启用root用户。

因为Kali没有提供root用户的密码,所以可以先使用kali账号登录,然后执行sudo passwd root命令为root用户设置密码,然后就可以执行su - root命令切换到root用户了,如图1-15所示。

图1-14 找到扩展名为“.vmx”的虚拟机文件

图1-15 切换到root用户

2.设置网络

Kali虚拟机默认使用的是NAT网络模式,如果物理主机已经联网,那么默认情况下Kali也是可以接入外部网络的。可以通过执行ping www.baidu.com命令测试能否联网。

如果无法联网,可以查看IP地址、默认网关、DNS等参数是否设置正确。

执行ifconfig命令可以查看网卡配置信息,默认网卡名为eth0,在这里可以看到Kali所使用的IP地址,如图1-16所示。

图1-16 查看IP地址

如果没有IP地址,可以执行ifconfig eth0 IP命令设置IP。需要注意,IP地址应该与NAT模式的网段保持一致,例如在笔者的实验环境中,NAT模式使用的是192.168.80.0/24网段。

执行route -n命令可以查看默认网关,如图1-17所示。

图1-17 查看默认网关

如果没有默认网关,可以执行“route add default gw网关地址”命令添加默认网关。NAT模式下的默认网关是网段中的第2个IP地址。

执行cat /etc/resolv.conf命令可以查看DNS服务器,如图1-18所示。默认情况下,使用默认网关作为DNS服务器即可。

图1-18 查看DNS服务器

3.设置中文界面

默认安装的Kali是一个英文版系统,我们可以先在系统中安装中文语言包,然后就可以将系统设置为中文界面了。

首先,修改系统安装源配置文件,执行命令如下:

vim /etc/apt/sources.list

在文件中将原有的安装源注释禁用,然后再新添加两个设置项,将安装源设置为阿里云开源镜像站:

修改完成后,再执行下面的命令,更新软件索引列表:

apt-get update

执行下面的命令安装中文语言包字体:

apt-get install xfonts-intl-chinese ttf-wqy-microhei

执行下面的命令将系统语言设置为zh_CN.UTF-8,如图1-19所示。

dpkg-reconfigure locales

图1-19 将系统语言设置为zh_CN.UTF-8

执行reboot命令,重启系统。重启之后,就可以发现系统已经切换到中文界面。

最后建议关闭自动锁屏功能。默认情况下,只要隔一段时间不对Kali进行操作,系统就会自动锁屏,因此就会要求重新输入用户名和密码才可再次进入系统。为了方便操作,建议将自动锁屏功能关闭。

在Kali中单击右上角的电源按钮,打开电源管理器,在“安全性”选项中关闭“自动锁定会话”功能,如图1-20所示。

图1-20 关闭自动锁屏功能

1.2.4 安装配置CentOS

在本书的实验环境中,CentOS被用作服务器。下面继续介绍如何安装配置CentOS虚拟机。

1.下载安装CentOS

CentOS的官网是www.centos.org,但笔者推荐从国内的阿里云开源镜像站(https://developer.aliyun.com/mirror/)下载CentOS镜像。截至笔者截稿,CentOS的最新版本是CentOS 8,这里推荐下载较为成熟且应用更为广泛的CentOS 7版本,如图1-21所示。

图1-21 下载OS镜像

CentOS的安装过程非常简单,首先在“虚拟机设置”中加载已经下载好的系统镜像文件,如图1-22所示。

打开虚拟机电源,虚拟机会自动从光盘引导,出现安装界面。在安装界面中选择Install CentOS Linux 7,如图1-23所示,开始安装系统。然后进入语言选择界面,选择“简体中文”。

接下来会进入“安装信息摘要”界面,在这里可以集中设置“日期和时间”“软件选择”“安装位置”等信息,如图1-24所示。

图1-22 在虚拟机中加载镜像文件

图1-23 选择Install CentOS Linux 7

图1-24 “安装信息摘要”界面

“软件选择”默认为最小安装,这里建议单击“软件选择”,然后在“基本环境”界面中选中“带GUI的服务器”单选按钮,如图1-25所示。设置完成后,单击“完成”按钮即可返回“安装信息摘要”界面。

图1-25 选中“带GUI的服务器”

由于Linux的发行版就是“Kernel+各种应用软件”,所以在Linux的系统安装光盘中已经集成了在Linux中可能会用到的绝大部分应用软件。当然这些应用软件我们不可能全都安装,而应根据需要进行选择性的安装。对于初学者,建议选择“带GUI的服务器”,这样系统安装完成后,会进入界面比较友好的桌面环境。

“安装位置”用于指定将Linux安装到哪块硬盘上,这里进入如图1-26所示的界面选择硬盘,并设置自动配置分区。需要注意的是,虽然CentOS默认采用的是自动配置分区方式,但仍然需要进入安装位置,然后再单击“完成”按钮做一次确认动作。

图1-26 选择系统安装位置

在“安装信息摘要”中设置完成后,单击“开始”按钮即可开始安装CentOS 7系统,开始安装后需要设置“ROOT密码”,同时还可以添加额外的普通用户,如图1-27所示。

图1-27 开始系统安装过程

首先设置“ROOT密码”,由于我们只是学习之用,为了方便登录系统,所以这里将密码设置为123,但在生产环境中一定要让密码足够复杂,否则系统将会面临严重的安全问题。Linux系统对密码的设置要求比较严格,这里会提示密码“Too short”,同时要求单击两次“完成”按钮方可确认。

然后再创建一个名为student的普通用户,同样也将密码设置为123,如图1-28所示。由于root用户的权限过大,所以Linux希望我们能使用普通用户登录系统并处理日常工作,在需要执行系统管理类操作时再切换到root用户。不过在学习阶段,建议以root用户身份登录并使用系统,否则很多操作将无法完成。

图1-28 创建普通用户student并设置密码

系统安装完所有的软件包后,会提示重启计算机。系统重启之后,第一次启动系统时还需要对系统做一些初始化设置。

在“初始设置”界面(见图1-29)中提示“未接受许可证”。单击“LICENSE INFORMATION”,然后在“许可信息”界面中选中“我同意许可协议”即可。返回“初始设置”界面后,单击“完成配置”。

接下来会出现系统登录界面,如图1-30所示。可以看到在登录界面中只有刚创建的student用户,如果想以root用户身份登录,需要单击“未列出?”,然后输入用户名“root”以及密码。

图1-29 “初始设置”界面

图1-30 系统登录界面

在之后的“欢迎”界面中选择系统语言为“汉语”,键盘布局也为“汉语”,“在线账号”的步骤可跳过,完成这些简单设置之后,出现“一切都已就绪”的提示,单击“开始使用CentOS Linux”,之后会看到Linux系统的桌面。至此,CentOS系统安装已成功完成。

2.设置网络

CentOS虚拟机默认也是采用NAT模式,执行ifconfig命令可以查看虚拟机的IP地址,CentOS 7虚拟机中的网卡默认名称是ens33,如图1-31所示。

图1-31 查看IP地址

在CentOS 7系统中,由于提供了network和NetworkManager两种不同的网络服务,有时会因为这两种服务的冲突而导致IP地址等网络参数丢失问题。

当执行ifconfig ens33命令后,发现ens33网卡没有IP地址,这说明出现冲突了。这时可以单击桌面右上角的电源按钮,将“有线”设置为“已连接”即可,如图1-32所示。

图1-32 解决IP地址丢失问题

为了彻底避免这个问题,还是建议为CentOS虚拟机设置一个固定的静态IP地址,并且关闭NetworkManager服务。

执行下面的命令,修改网卡配置文件:

[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

在网卡配置文件中,首先需要修改原有的两个设置项:

BOOTPROTO=static
ONBOOT=yes

BOOTPROTO设置项的默认值是dhcp,表示使用动态IP地址,修改为static,表示要设置静态地址。

ONBOOT设置项的默认值是no,修改为yes,表示在启动network时会自动加载网卡配置文件,从而使设置生效。

除了修改原有的两个设置项之外,还需要在配置文件中添加以下4个设置项:

IPADDR=192.168.80.140
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS1=223.5.5.5

这4个设置项分别用于设置IP地址、子网掩码、默认网关、DNS服务器,除了DNS服务器,其余3个参数在每个用户的实验环境中都是不同的,读者可以查看自己的“虚拟网络编辑器”,确定应使用什么参数。

图1-33是修改好的网卡配置文件。

设置完成后,需要重启network服务使设置生效。

[root@CentOS ~]# systemctl restart network

图1-33 修改好的网卡配置文件

然后,关闭并禁用NetworkManager服务。

[root@CentOS ~]# systemctl stop NetworkManager
[root@CentOS ~]# systemctl disable NetworkManager

3.设置yum源

在CentOS虚拟机中同样需要安装很多软件,因而需要我们先设置好安装源。在Debian派系的Linux系统中采用的是apt安装方式,在RedHat派系的Linux系统中采用的则是yum安装方式,因而这里需要设置yum源。

CentOS系统的yum源文件默认存放在/etc/yum.repos.d/目录中,在这个目录中已经存在了很多由系统默认提供的yum源文件。这些yum源都是指向位于国外的CentOS官方服务器,这里同样建议采用阿里云开源镜像站作为yum源。

首先,执行下面的命令,将默认的yum源文件全部删除:

[root@CentOS ~]# rm -f /etc/yum.repos.d/*

然后,再执行下面的命令从阿里云开源镜像站下载yum源文件:

[root@CentOS ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.
aliyun.com/repo/Centos-7.repo

至此,CentOS的yum源就设置好了。

4.关闭防火墙和SELinux

对于CentOS,还需要再做最后一项配置,即关闭防火墙和SELinux。

CentOS主要是用作服务器,会接收到很多来自客户端的访问请求,而防火墙和SELinux默认会拦截所有的访问请求,导致服务无法被正常访问。虽然可以通过设置防火墙和SELinux来放行客户端的访问请求,但对于初学者来说,这无疑存在很大难度,因而建议直接将防火墙和SELinux全部关闭,以防止它们对后续操作的干扰。

关闭防火墙需要执行下面两条命令,以下两条命令分别用于停止运行防火墙服务以及禁止防火墙随系统自动运行:

#停止运行防火墙服务
[root@CentOS ~]# systemctl stop firewalld
#禁止开机自动运行防火墙
[root@CentOS ~]# systemctl disable firewalld

关闭SELinux时,首先需要执行下面的命令将其临时关闭:

[root@CentOS ~]# setenforce 0

然后,再修改配置文件/etc/selinux/config,将其永久关闭。

[root@CentOS ~]# vim /etc/selinux/config

在配置文件中将设置项SELINUX的值修改为disabled:

SELINUX=disabled

修改好的SELinux配置文件如图1-34所示。

图1-34 修改好的SELinux配置文件

1.2.5 设置Xshell远程登录

在生产环境中,管理员一般都是通过网络远程登录到Linux服务器对其进行操作的。本书也强烈建议采用远程连接的方式对虚拟机进行操作,这样,一方面最大程度地模拟了生产环境,另一方面操作更为简便。

可以实现远程登录的工具有很多,如SecureCRT、putty等,这里推荐使用Xshell,这是一款商业软件(官网为https://www.xshellcn.com/),读者可以从https://www.xshell.com/zh/free-for-home-school/下载免费的试用版。

下载之后,在物理机上安装Xshell,安装过程非常简单,这里就不再介绍了。下面分别介绍如何通过Xshell远程连接到CentOS和Kali虚拟机。

要实现远程登录,首先需要为虚拟机中的Linux系统设置好IP地址,这在之前已经做过详细介绍。下面先来连接CentOS,在Xshell中新建一个会话,会话名称可以随意设置,如CentOS,然后在“主机”处输入虚拟机的IP地址,如图1-35所示。

图1-35 用Xshell远程登录Linux

单击“确定”按钮之后,会提示是否保存Linux主机的密钥,如图1-36所示,这里单击“接受并保存”按钮。

图1-36 接受并保存密钥

然后,输入管理员账号root以及相应的密码,就可以远程登录CentOS,如图1-37所示。

图1-37 在Xshell中成功远程登录Linux虚拟机

在Xshell的“工具”菜单中选择“配色方案”(见图1-38),用户可以选择自己喜欢的界面风格,如“ANSI Colors on White”界面看起来更加清晰。另外,用户还可以在工具栏中对字体大小进行设置。

图1-38 “选择配色方案”界面

下面介绍如何连接到Kali虚拟机。

由于Kali默认不允许root用户远程登录,所以首先需要在Kali中修改SSH服务的配置文件/etc/ssh/sshd_config,命令如下:

┌──(root㉿kali)-[~]
└─# vim /etc/ssh/sshd_config

将配置文件中“PermitRootLogin”设置项的默认值“prohibit-password”修改为yes,从而允许root用户远程登录:

PermitRootLogin yes

修改完成后,还需要重启SSH服务,使设置生效,再将SSH服务设置为开机自动运行:

┌──(root㉿kali)-[~]
└─# systemctl restart ssh
┌──(root㉿kali)-[~]
└─# systemctl enable ssh

至此,Kali的配置就完成了,最后在Xshell中创建会话并连接即可。

1.3 搭建LAMP网站平台

之前介绍过,目前所说的渗透测试主要是指针对网站的Web渗透测试,要学习Web渗透测试,读者首先要对网站有所了解。

搭建网站的方法有很多,很多初学者通常利用phpStudy之类的模拟软件来一键搭建网站,但本书更加推荐在CentOS系统中搭建一个真实的网站。当然,这会涉及大量的操作,整体比较烦琐,但只有这样,才能为我们的学习奠定良好的基础,我们才能对网站以及整个服务器有更为深入的理解。因为我们所需要的并非仅仅只是一个可以运行的网站,而是要从整个服务器的角度去了解网站的整体架构,以及如何对网站进行维护和配置。

另外,笔者强烈建议读者购买一台云服务器,这将非常有助于提高大家的实践能力。如果读者掌握了下面介绍的搭建LAMP网站平台的方法,您将自然而然地精通云服务器的配置。

1.3.1 什么是LAMP

网站,即Web服务器,主要由以下4个部分组成:操作系统、Web容器、脚本语言程序、数据库。

(1)操作系统主要是Linux和Windows Server,目前绝大多数的服务器采用的都是Linux系统,尤其是CentOS,因为它本身就是一个专门用于服务器的操作系统。本书推荐使用CentOS 7。

(2)Web容器是用于提供Web服务的服务程序,就像在客户端必须要借助于浏览器才能访问网站一样,在服务器端也同样要借助于Web容器才能提供Web服务。目前常用的Web容器主要有Apache、Nginx和IIS等,本书使用的是Apache。

(3)除了Apache这类Web服务程序,还需要安装脚本语言程序与之配合。因为Apache或Nginx默认只支持对静态资源的访问,本身并不具备执行脚本程序的能力。而目前的网站基本上都是采用动态资源,这就必须要借助于外部程序来运行脚本程序,如ASP.NET、PHP或JSP等。本书使用的脚本程序是PHP。

(4)数据库也是网站的核心组成部分,因为网站中的绝大部分数据都是存储在数据库中的。数据库也有很多不同种类,本书使用的是在中小型网站中广泛应用的MySQL数据库。

综合以上,我们下面要搭建的Web服务器使用的是Linux操作系统、Apache容器、MySQL数据库、PHP脚本程序,因而合称LAMP(Linux+Apache+MySQL+PHP)。

1.3.2 安装LAMP

在部署LAMP时,软件安装的一般顺序是Apache→PHP→MySQL。

1.安装Apache

Apache的软件名和所对应的服务名都是httpd,执行下面的命令安装并启动httpd服务,并将其设为开机自动运行:

[root@CentOS ~]# yum install httpd -y
[root@CentOS ~]# systemctl start httpd
[root@CentOS ~]# systemctl enable httpd

由于Apache中已经设置好了一个默认的Web站点,因而这时在客户端输入Web服务器的IP地址就可以访问默认网站了,如图1-39所示。如果在客户端无法正常访问,那多半是由于防火墙或SELinux的原因,因此用户需要将服务端的防火墙和SELinux关闭。

图1-39 Apache中的默认Web站点

2.安装PHP

Apache本身只支持对静态资源的访问,所以接下来需要接着安装PHP。

PHP安装包的名称就是php,CentOS 7系统中所提供的PHP版本是5.4.16。同时,还要再安装一个软件包php-mysql,只有安装了这个软件包之后,PHP才可以操作MySQL数据库:

[root@CentOS ~]# yum install php php-mysql

需要注意的是,PHP并不是一个独立的服务,而是被视作Apache的一个功能模块,因而在安装完PHP之后,需要重启httpd服务才能生效。

[root@CentOS ~]# systemctl restart httpd

下面测试Web服务器是否可以支持PHP动态页面。

首先,在网站主目录/var/www/html中生成一个PHP的测试网页test.php,页面代码中只有一个phpinfo()函数。当客户端访问test.php页面时,会先在服务器端执行该函数,然后将函数的执行结果返回给客户端。

<?php
phpinfo( );
?>

然后,在客户端浏览器中输入URL地址“http://服务器IP/test.php”来访问该测试页面,如果成功出现如图1-40所示页面,则证明Apache已经可以支持PHP动态网页了。

图1-40 Web服务器可以支持PHP动态网页

3.安装MySQL

在CentOS 7系统中默认提供的是MySQL的分支MariaDB,但MariaDB与MySQL完全兼容,所以完全可以使用它作为MySQL的替代品。

MariaDB服务的安装包名称为mariadb-server,安装完软件之后,启动服务,并将其设为开机自动运行:

[root@CentOS ~]# yum install mariadb-server -y
[root@CentOS ~]# systemctl start mariadb
[root@CentOS ~]# systemctl enable mariadb

下面还需要对MariaDB做一些初始化的操作,主要是设置MariaDB的管理员密码。MariaDB的管理员账号也叫root,但并非Linux中的根用户,它们只是名字相同而已。

可以利用CentOS中的mysqladmin命令为MariaDB的管理员账号设置密码,为了方便之后的操作,笔者这里使用了弱口令123:

[root@CentOS ~]# mysqladmin -u root password "123"

然后,就可以利用客户端工具mysql来登录MariaDB了,成功登录之后可以进入MariaDB的交互模式,使用quit或exit命令即可退出:

[root@CentOS ~]# mysql -uroot -p123

下面测试是否可以利用PHP来连接MariaDB数据库。在网站主目录/var/www/html中创建一个测试页面test2.php,页面代码如下。

<?php
$conn=mysql_connect("127.0.0.1","root","123");
if ($conn) {
         echo "success";
}else{
         echo "fail";
}
mysql_close($conn);
?>

这段代码表示以root用户的身份,使用密码123来连接位于本地服务器上的MariaDB数据库,如果连接成功,则输出success,否则输出fail。

在客户端浏览器通过URL地址“http://服务器IP/test2.php”访问该测试页面,如果出现success,则表示之前的配置全部成功。

至此,一个功能完备的LAMP平台就搭建好了。

1.3.3 安装DVWA

搭建好LAMP环境之后,我们继续通过安装一个真实的网站,从而更加真切地了解网站的整体架构,这里要安装的网站是DVWA(Damn Vulnerable Web App)。

DVWA是用PHP+MySQL编写的一套用于常规Web漏洞教学和检测的测试网站,包含了SQL注入、命令执行、文件上传等常见的一些安全漏洞,是一个非常好的Web安全实验平台。

目前DVWA的最新版本是1.9,对于初学者,笔者这里推荐使用相对较旧的版本DVWA-1.0.8。DVWA压缩包可以从本书的资源中获取。

下面介绍DVWA的安装过程。

首先,将下载的压缩文件上传到网站主目录/var/www/html中,推荐使用Xshell连接到CentOS虚拟机,这样就可以将物理主机中的文件直接拖到虚拟机中了。

然后,用unzip命令解压,并将解压后生成的目录改名为dvwa:

[root@CentOS ~]        # cd /var/www/html
[root@CentOS html] # unzip DVWA-1.0.8.zip
[root@CentOS html] # mv DVWA-1.0.8 dvwa

修改网站配置文件:

[root@CentOS html]# vim dvwa/config/config.inc.php

这里需要将配置文件中的“$_DVWA[ 'db_password' ]”修改为我们之前为MariaDB的root用户设置的密码,也就是在安装完MariaDB后用mysqladmin命令所设置的密码,本书设置的密码是123。

DVWA中的核心数据都是存放在数据库中的,所以这里必须要告知网站MySQL的账号和密码,这样网站才能连接到MySQL并对其进行操作。

接下来就可以在客户端浏览器中访问DVWA了,DVWA在CentOS中的路径为/var/www/html/dvwa,所以它的URL地址就是“http://虚拟机IP/dvwa”。

首次登录会提示我们去安装数据库,如图1-41所示。

图1-41 单击here超链接安装数据库

单击here超链接之后,在设置页面中单击Create/Reset Database按钮创建数据库,如图1-42所示,成功安装后会出现“Setup successful!”的提示。

图1-42 创建数据库

再次访问URL地址“http://虚拟机IP/dvwa”,就会出现DVWA的登录页面,如图1-43所示。默认的用户名和密码是admin和password。

图1-43 DVWA登录页面

至此,DVWA安装完成,我们的整个实验环境也搭建好了。

1.4 本章小结

千里之行始于足下,本章内容虽然稍显烦琐,但仍希望读者能按照书中的操作步骤搭建起实验环境,如此才能为后续学习奠定好基础。

在搭建实验环境的同时,也要注意掌握相关的Linux系统操作。对于普通用户,平时基本上都是在使用Windows系统,很少会接触到Linux系统。但是在计算机的大多数专业领域,都是要用到Linux系统。

学习网络安全,Linux系统是必须要掌握的一项基本技能。在本书中主要用到Kali和CentOS这两种Linux系统。其中,Kali作为攻击机,后续的渗透测试操作主要都是在Kali中进行的。CentOS作为服务器,主要便于让我们从服务器的层面去理解网站的运行逻辑。 FiTfKBMgbYygryFA2smv8Ys1IPIUQrbOXIX4u6pZja5fKbYewhe9gTLWUpUN8e0W

点击中间区域
呼出菜单
上一章
目录
下一章
×