本实验中我们初步接触 Kali Linux 和渗透测试的概念。需要依次完成下面几项任务:
Kali Linux 的简介
web 渗透的简介
Kali Linux 的搭建与部署
Metasploitable2 靶机的了解
学习实验楼提供的多机实验环境如何使用
尝试简单的命令注入
本节实验推荐阅读下述内容:
要去渗透一个网站我们首先得了解我们可以通过哪些方面去渗透?
Web 应用的架构无外乎会涉及到这样的一些组件:
Web Browser/Client (通常为我们的浏览器)
Web Server(通常为网站所在服务器)
Web app(通常为部署网站的后台应用)
DB(数据库,数据存储所在)
(此图来自于thomas G+)
而这样的方式会受到这样的一些攻击:
URL interpretation attacks(URL解释攻击):浏览器是通过 URL 来访问一个网站,而在 URL 中显示一些请求的参数,若是安全级别较低的网站,我们甚至可以通过 URL 访问到服务器上的一些敏感数据;
Input Validation attacks(输入验证攻击):浏览器这一端发往HTTP服务端请求数据包皆为输入,而若是服务端没有对输入的数据做严格的校验,就可能被有机可趁;
SQL Injection attacks(SQL注入攻击):网站中我们会注册用户,登陆用户等等的操作,而这样的操作都会涉及到数据库,而若是服务端没有很好的控制就会造成不用密码就可登陆,甚至是修改一些敏感的数据;
Buffer Overflow attacks(缓冲区溢出攻击):通过网络连接的原理使得服务端无法为用户提供正常的网络服务,例如 DDos 攻击就是这样。
由这样的攻击而衍生出了这样的一些方式:
XSS(Cross Site Script,跨站脚本攻击)
Cross Site Request Forgery (CSRF, 跨站请求伪造)
Session hijacking attack(Session 挟持)
File inclusion vulnerability(文件包含漏洞)
file upload attack(文件上传攻击)
Weak Password Vulnerability(弱密码暴力破解)
webshell(web 后门攻击)
SQL Injection(SQL 注入)
Distributed Denial of Service (DDoS, 分布式拒绝服务)
接下来我们便会通过这样的几个方面介绍来学习该课程。学习之前我们会先了解环境的使用。
注意: 实验楼中已经配置好了 Kali 虚拟机的实验环境,无需再次安装,下列步骤仅供本地环境搭建参考。
Kali Linux 已经被安装到了实验楼环境的虚拟机中,这里我们仅仅进行简单的安装步骤的介绍,供感兴趣的同学在本地环境中安装。
Kali Linux 安装有几种方法:
下载官方 ISO 镜像,安装到物理机器或虚拟机中
下载官方虚拟机镜像,在虚拟机管理软件中启动
下载并部署 ARM 镜像到 ARM 系统中
任何方案都需要从官方网站下载镜像,下载之后务必校验 SHA1 值,避免下载到有安全漏洞的系统。
通常作为学习环境,我们都会安装到本地的虚拟机,实验楼中的环境采用的就是该方案,通过下载现成的虚拟机磁盘镜像避免了安装的复杂过程。如果希望使用官方的 ISO 镜像进行安装,可以从下面的两个链接地址获得帮助:
Kali ISO 下载链接 请注意区分版本,其中的 Light 版本只包含常用的工具,建议下载 Kali Linux 完全版本。
建议使用 VirtualBox 虚拟化管理软件,该软件在 Ubuntu 上可以通过下面的方式安装:
sudo apt-get update sudo apt-get install virtualbox
安装完成后默认会自动配置好虚拟网络,下一步是在 Offensive Security 官网下载虚拟机镜像:
注意需要根据你使用的虚拟化管理软件下载相应的虚拟机镜像,我们使用的是 VirtualBox,则需要下载下面的这个地址:
虚拟机镜像的版本有四个,推荐下载 64 位的 Kali Linux 64bit VBox,下载得到的是一个 OVA,直接使用 VirtualBox 的导入功能就可以加载到 VirtualBox 中,点击开始虚拟机就启动了。
启动后的 Kali 虚拟环境中默认进入桌面系统,默认的用户名是 root,密码是 toor。由于系统默认没有开启 SSH 服务,但实验楼的环境中已经开启,后续实验中可以通过 SSH 连接到 Kali 环境中。
实验楼采用的实验环境包含两台虚拟机,分别是攻击机和靶机:
攻击机:Kali Linux 2.0 虚拟机,主机名是 kali,IP 地址为 192.168.122.101,默认用户名密码为 root/toor
靶机:Metasploitable2 虚拟机,主机名是 target,IP 地址为 192.168.122.102,默认用户密码为 msfadmin/msfadmin
8.2 虚拟机管理
上述的两台虚拟机已经被安装到实验楼的虚拟环境中,可以通过 Libvirt 系列命令进行管理和查看。
Libvirt 是一套免费、开源的支持 Linux 下主流虚拟化工具的 C 函数库,其旨在为包括 Xen 在内的各种虚拟化工具提供一套方便、可靠的编程接口,支持与 C,C++,Ruby,Python 等多种主流开发语言的绑定。当前主流 Linux 平台上默认的虚拟化管理工具 virt-manager(图形化),virt-install(命令行模式)等均基于 libvirt开发而成。
Libvirt 库是一种实现 Linux 虚拟化功能的 Linux API,它支持各种虚拟机监控程序,包括 Xen 和 KVM,以及 QEMU 和用于其他操作系统的一些虚拟产品。
简单的说 Libvirt 是一套标准化虚拟化管理接口,可以管理上述我们提到的各种虚拟资源。Libvirt 除了各种语言的 SDK 外,还提供一个命令行工具 virsh
。在我们的实验环境中可以通过下列方式来启动,请花些时间熟悉virsh
命令,非常有助于我们后续开发过程中的调试。
# 启动 libvirt-bin 服务sudo service libvirt-bin start# 查看当前系统中的虚拟机列表,默认返回为空sudo virsh list# 查看当前系统中虚拟网络列表,默认返回 default 网络sudo virsh net-list --all
virsh
常用命令列表:
命令 说明help 显示该命令的说明quit 结束 virsh,回到 Shellconnect 连接到指定的虚拟机服务器create 启动一个新的虚拟机destroy 删除一个虚拟机start 开启(已定义的)非启动的虚拟机 define 从 XML 定义一个虚拟机 undefine 取消定义的虚拟机 dumpxml 转储虚拟机的设置值 list 列出虚拟机 reboot 重新启动虚拟机 save 存储虚拟机的状态restore 回复虚拟机的状态suspend 暂停虚拟机的执行resume 继续执行该虚拟机dump 将虚拟机的内核转储到指定的文件,以便进行分析与排错 shutdown 关闭虚拟机 etmem 修改内存的大小 setmaxmem 设置内存的最大值 setvcpus 修改虚拟处理器的数量
8.3 查看并启动实验环境
在实验桌面中,双击 Xfce 终端,打开终端,后续所有的操作命令都在这个终端中输入。
首先使用 virsh list
命令查看当前环境中虚拟机的列表和状态,注意需要使用 sudo,另外需要加上参数 --all
才会显示所有关机状态的虚拟机:
然后我们使用 virsh start
命令启动虚拟机,注意区分大小写,虚拟机的名字是大写的字母开始,再次查看状态虚拟机已经进入 running 状态:
注意由于虚拟机启动需要时间,大概要等四分钟左右我们就可以使用 SSH 访问两台虚拟机了。
首先使用 SSH 连接到 Kali,我们大部分的攻击操作都需要在 Kali 虚拟机中进行,注意用户名root,密码 toor 是不显示的,使用命令 ssh root@kali
即可,因为当前实验环境中已经把 IP 地址和主机名的对应写入到了 /etc/hosts
文件中,避免输入不好记的 IP 地址:
然后打开一个新的终端标签页,SSH 连接到 Metasploitable2 中,用户名 msfadmin,密码 msfadmin:
在 Kali 虚拟机中 ping target
测试两台虚拟机都可以通过内部的虚拟网络进行连接,使用 Ctrl-C 退出 ping:
现在两台实验环境都已经启动了,我们可以开始渗透测试了。
注意后续部分实验的 Kali 并没有采用虚拟机,而是使用 Docker 容器,原因是部分实验在 Docker 容器的速度要比虚拟机快很多,所以采用 Docker 的形式运行 Kali 系统。
9.2 Metasploitable2 安装
注意:实验楼环境中已经部署好了 Metasploitable2 虚拟机,所以下列步骤仅供感兴趣的同学在本地搭建靶机系统。
首先,需要在以下链接下载最新版本的 Metasploitable2 虚拟机镜像:
可以使用 wget 下载,下载得到的是一个 zip 压缩包,需要使用下面的命令进行解压:
unzip metasploitable-linux-2.0.0.zip
解压后的文件是一个虚拟磁盘,格式为 VMDK。同样,使用 VMware 或 VirtualBox 软件创建一个新的虚拟机,在选择磁盘的时候选使用现有的磁盘,不要选择创建新磁盘。创建好的虚拟机,直接点击开机就可以了。
Metasploitable2 环境中的默认的用户名和密码都是 msfadmin,并且 SSH 服务默认打开,可以直接使用 SSH 登录到系统上。
9.3 登录 Metasploitable2
按照 7.3 的步骤,我们使用 SSH 登录到 Metasploitable2中,用户名 msfadmin,密码 msfadmin:
按照 7.3 的步骤,我们使用 SSH 登录到 Metasploitable2中,用户名 msfadmin,密码 msfadmin:
Metasploitable2 上的系统和数据账户都有非常严重的弱口令,至少包括下面的弱口令:
msfadmin:msfadmin
user:user
postgres:postgres
sys:batman
klog:123456789
service:service
9.6 后门服务
系统中内置了很多的潜在后门服务,例如 ftp 服务使用的 vsftpd 软件,具备一个可以作为后门的漏洞。这个版本的软件如果接受到的
ftp 用户名后面有笑脸符号,则会自动在 6200 端口上打开一个监听的 Shell。简单的测试方式是使用 telnet 尝试连接 vsftp
服务并发个笑脸 :)
符号获取 Shell。
这个简单的实验留作本节的课后作业供大家自己尝试。可以将尝试方法发到讨论去中讨论。