如同其他的大冒险,新手村永远是我们的第一个主线任务,也是获得初始经验并快速适应游戏规则的最佳选择,因此本章提供了一个实战场景极为丰富的练习活动,为大家铺平从入门到提升的进阶之路。
本章将基于Kioptrix系列的主机来引导大家完成攻防实战演练的第一课,Kioptrix系列的主机是世界范围内较为有名的以“对初学者友好”著称的攻防挑战环境,该系列共有5台主机,它们各自拥有不同的脆弱性,难度以及所需的知识技能门槛也是逐级提升的,可以说,基于这5台主机进行练习,大家基本上就已经接触到了渗透测试所需的大部分技能和知识,后续只需要进一步深入理解这些知识再加以灵活运用,就可以完成本书中的绝大多数实战内容。
Kioptrix系列的主机均可在VulnHub上下载,下载后,大家只需按照1.1.2节介绍的操作指南进行操作,就可以搭建对应主机的运行环境。以下是5台主机的下载链接:
Kioptrix:Level 1 (#1)(以下简称为Kioptrix:Level 1):
https://www.vulnhub.com/entry/kioptrix-level-1-1,22/
Kioptrix:Level 1.1 (#2)(以下简称为Kioptrix:Level 2):
https://www.vulnhub.com/entry/kioptrix-level-11-2,23/
Kioptrix:Level 1.2 (#3)(以下简称为Kioptrix:Level 3):
https://www.vulnhub.com/entry/kioptrix-level-12-3,24/
Kioptrix:Level 1.3 (#4)(以下简称为Kioptrix:Level 4):
https://www.vulnhub.com/entry/kioptrix-level-13-4,25/
Kioptrix:2014 (#5)(以下简称为Kioptrix:2014):
https://www.vulnhub.com/entry/kioptrix-2014-5,62/
“它过时了,所以呢?”当你告诉别人他的软件过于老旧需要更新时,你大概率会得到一句类似这样的回复。
在很多人看来,虽然现在用的软件版本旧了点,用得久了点,可它的功能又没有什么问题,甚至操作起来还非常习惯,为什么要把它替换成一个看起来功能更多,但要重新学习使用方法的新版本呢?
然而他们不知道的是,软件的更新往往包含着对已知安全漏洞的紧急修复,持续地使用过时的软件版本,意味着大量已知的漏洞有可能长期被攻击者检测和利用。本次实践将演示过时的软件服务所导致的目标主机安全风险。
拿到一台目标主机,首先要对其进行信息收集。获得主机的IP地址后,往往需要先使用nmap进行端口扫描,以获得主机的端口开放情况以及对应的服务信息。本例中目标主机的IP为192.168.192.129,命令如下:
得到扫描的结果如下:
通过扫描结果可以发现,该主机开放了多个常见端口,其中80端口和443端口分别对外提供http和https服务。首先尝试访问80端口提供的http服务,浏览器访问地址为http://192.168.192.129/,访问结果为Apache中间件的默认测试页面,如图2-1所示。
接着尝试访问443端口的https服务,查看https服务是否有运行其他的站点。
小贴士: 相信有不少人会误以为https服务所提供的站点内容与当前主机http服务所提供的相同。实际上,在很多情况下,它们所提供的站点内容并不一样,因此在进行渗透测试时应针对它们分别进行测试。类似地,一个IP下可以运行多个站点,通过IP访问和通过域名访问获得的结果也可能不尽相同,所以应分别留意。
图2-2展示了https服务链接https://192.168.192.129/的访问结果,其与http://192.168.192.129/的访问结果相同,这里暂时未能获得更多信息。
图2-1 访问http://192.168.192.129/的结果
图2-2 访问https://192.168.192.129/的结果
虽然Web页面的内容未能提供新的价值信息,但是该Apache中间件服务的版本却引起了我们的注意。仔细观察一下nmap提供的扫描结果,会发现它检测到的目标主机Apache中间件的版本非常古老,还是Apache 1.3.20版本,这个版本的发行日期是2001年,距今整整21年,如图2-3所示。
对应地,目标主机443端口上所使用的ssl服务也相当古老,为mod_ssl/2.8.4版本,该版本是2001年5月与Apache 1.3.20配套发布的,如果我们访问Exploit Database,并以“mod_ssl”为关键字进行漏洞查询的话,会发现mod_ssl/2.8.4存在已知的远程缓冲区溢出漏洞。如此一来,我们就可以利用该漏洞获得目标主机的系统权限,如图2-4所示。
图2-3 Apache 1.3.20版本发布于2001年5月22日
图2-4 搜索mod_ssl漏洞
该漏洞对应发布的日期的最新exploit为“Apache mod_ssl<2.8.7 OpenSSL-‘OpenFuckV2.c’Remote Buffer Overflow (2)”,对应的下载链接为https://www.exploit-db.com/exploits/47080。
下载时要留意exploit中代码的注释,它们往往会告知使用者该文件中代码的使用方法或编译方式,比如,在上述exploit中,就是通过代码注释告诉使用者编译所需的参数,如图2-5所示。
图2-5 代码注释给出的提示
将代码下载到本地,重命名为“OpenFuck.c”,按要求的格式执行如下命令进行编译。
前面的代码注释中已说明,若编译出现错误,可以先通过apt-get install libssl-dev命令安装libssl-dev来解决,编译完成后会获得名为“OpenFuck”的可执行文件。
执行“./OpenFuck”命令,即可获得该可执行文件的使用说明,如图2-6所示。
图2-6 exploit的使用说明
我们需要根据目标主机操作系统、Apache版本选择不同的参数,通过上述nmap的扫描结果可知,目标主机运行着RedHat Linux操作系统,同时Apache版本是1.3.20,满足该条件的参数有两个,分别是0x6a和0x6b,如图2-7所示。
图2-7 满足现有条件的参数
目前阶段我们已经无法再获得更为详细的主机信息,因此需要分别基于0x6a和0x6b这两个参数测试利用漏洞的执行结果。
按照前面图2-6中所示的利用漏洞的程序的输入格式要求,依次尝试执行如下命令:
其中0x6a参数没有获得目标主机的响应,而0x6b参数成功获得了响应结果。如图2-8所示,0x6b参数获得了目标主机的root用户操作权限。
图2-8 获得root用户操作权限
至此我们已经成功获得了该目标主机的最高权限,但又不免生出一个新的猜测:根据Apache和mod_ssl版本的老旧情况,是否可以合理地推测该目标主机的其他开放端口所运行的服务版本也可能是同时代的旧版本?如果假设成立,该目标主机开放的服务中还存在一个潜在的“漏洞大户”,即位于139端口的Samba服务,若Samba服务的版本也非常古老,那么它也很有可能是一个可利用的渗透途径。
由于之前通过nmap扫描时未能成功地获得Samba服务的准确版本号,因此需要追加其他检测方法来确认上述假设。
小贴士: 即使强大如nmap,在某些情况下也可能无法成功获得所有有效的扫描结果。可见,在渗透测试中信息收集往往不会是一个线性的、规律的静态过程,而是多种途径共同合作、多种工具共同尝试的动态过程,有时还需要一定的联想和推理能力。
使用Metasploit再次对Samba服务进行版本检测,在终端中输入msfconsole命令启动Metasploit,输入“search smb”获得所有与Samba相关的payload信息。这时会找到一个专门用来探测Samba服务的具体版本的payload(auxiliary/scanner/smb/smb_version),如图2-9所示。
图2-9 auxiliary/scanner/smb/smb_version的位置
使用use auxiliary/scanner/smb/smb_version命令即可调用该payload,通过show options命令可查看它运行所需的参数,如图2-10所示。
图2-10 smb_version的运行参数选项
根据上述参数选项可知,我们只需要设置RHOSTS选项即可,输入如下命令:
上述命令执行后的结果如图2-11所示。
通过执行结果可知,该目标主机的Samba服务的具体版本号是2.2.1a,这的确是一个非常古老的版本,印证了我们之前的猜想。
图2-11 smb_version payload的执行结果
在Exploit Database搜索“samba 2.2.x”关键字,会获得大量可用的exploit信息,如图2-12所示。
图2-12 获得exploit信息
在该版本的Samba中,Metasploit集成了可直接使用的exploit,由于在当下阶段更希望大家多尝试手工编译和使用exploit,因此本例中选择的是需要手工编译和执行的“Samba<2.2.8 (Linux/BSD)-Remote Code Execution”,对应的链接为https://www.exploit-db.com/exploits/10。
小贴士: 在实际的渗透测试中,出现无法成功利用类似Metasploit的这一类高度集成化工具的情况是非常正常的。针对同一个漏洞,某种exploit无法使用,而另一种exploit尝试一次就能成功的例子也数不胜数,所以大家在实战练习时要习惯使用多种方法进行尝试,切忌过度依赖单一渠道。
下载后在本地进行编译,由于该exploit没有在注释中要求特定的编译选项,因此可以直接使用如下命令编译。
编译完成后,使用./smb命令执行,将显示如图2-13所示的使用帮助。
图2-13 smb exploit的帮助信息
基于图2-13所示的帮助信息,并根据我们已知的信息,可以构造如下命令:
执行后会成功获得来自目标主机的root权限反弹shell连接,如图2-14所示。
图2-14 smb exploit成功获得反弹shell
至此,该目标主机被我们以两种不同的方式分别成功获得了最高权限,由此可见,使用版本过时的软件和服务会给目标主机带来巨大的安全风险。