服务器渗透测试

Kili on Server Attacking

Posted by Kylin on April 2, 2023

[TOC]

Intro to Kali

Kali Linux 简介

Kali Linux 是一个基于 Debian 的用来进行渗透测试和安全审计的 Linux 操作系统,最初在 2013 年 3 月由具备类似功能的 BackTrack 系统开发而来,由 Offensive Security 团队支持开发。为了支持安全审计和渗透测试的一系列功能,Kali Linux 进行了定制化,包括内核,网络服务和用户都进行了特殊的设置。

Kali 系统内预装了很多安全相关的工具,例如非常有名的 Nmap 端口扫描器、John the Ripper 密码破解器、Metasploit Framework 远程攻击框架等。实验楼的该训练营主要讲述如何利用 Kali Linux 的一系列工具对具备漏洞的靶机进行攻击,同时会介绍攻击的原理。

Kali Linux 中目前最新版是 2019 年发布的 2019.3 版本,实验楼的实验环境中使用的是 2016.2 这个版本。在其中包含了 600 多个渗透测试的工具,并继承了为安全审计定制的内核补丁。

  1. Kali 使用入门
  2. Metasploitable2 使用指南
Kali 的安装
Kali 的包管理

Kali 采用的包管理工具跟 Ubuntu 相同,但需要使用 Kali 自己特定的软件源。

APT 是 Advance Packaging Tool(高级包装工具)的缩写,是 Debian 及其派生发行版的软件包管理器,APT 可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了 Unix 系统上管理软件的过程。APT 最早被设计成 dpkg 的前端,用来处理 deb 格式的软件包。现在经过 APT-RPM 组织修改,APT 已经可以安装在支持 RPM 的系统管理 RPM 包。这个包管理器包含以 apt- 开头的的多个工具,如 apt-get apt-cache apt-cdrom等,在 Debian 系列的发行版中使用。

我们需要从服务器上下载最新的软件信息的时候需要先使用 sudo apt-get update 命令来更新本地的软件包列表,然后才能使用 sudo apt-get install xxx 这个命令安装新的软件包。由于 Kali 默认登录的是 root,所以 sudo 可以去掉。

apt-get

apt-get 使用各自用于处理 apt 包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等,下面列出一些 apt-get包含的常用的一些工具:

工具 说明
install 其后加上软件包名,用于安装一个软件包
update 从软件源镜像服务器上下载/更新用于更新本地软件源的软件包列表
upgrade 升级本地可更新的全部软件包,但存在依赖问题时将不会升级,通常会在更新之前执行一次update
dist-upgrade 解决依赖关系并升级(存在一定危险性)
remove 移除已安装的软件包,包括与被移除软件包有依赖关系的软件包,但不包含软件包的配置文件
autoremove 移除之前被其他软件包依赖,但现在不再被使用的软件包
purge 与 remove 相同,但会完全移除软件包,包含其配置文件
clean 移除下载到本地的已经安装的软件包,默认保存在/var/cache/apt/archives/
autoclean 移除已安装的软件的旧版本软件包

下面是一些 apt-get 常用的参数:

参数 说明
-y 自动回应是否安装软件包的选项,在一些自动化安装脚本中使用这个参数将十分有用
-s 模拟安装
-q 静默安装方式,指定多个 q 或者 -q=#,# 表示数字,用于设定静默级别,这在你不想要在安装软件包时屏幕输出过多时很有用
-f 修复损坏的依赖关系
-d 只下载不安装
--reinstall 重新安装已经安装但可能存在问题的软件包
--install-suggests 同时安装 APT 给出的建议安装的软件包

apt和apt-get的区别: apt-getapt都是用于在Debian和Ubuntu等Linux发行版中安装、更新和卸载软件包的命令行工具,它们的基本功能是相同的。但是,apt命令是apt-get命令的增强版,它提供了更加友好和易用的界面和功能。

安装软件
# 安装某一个软件包
sudo apt-get install <软件包名>
 
# 重新安装某一个软件包(软件包已经存在,但是可能被破坏)
sudo apt-get --reinstall install <软件包名>
模糊搜索软件包
apt-cache search
卸载软件
# 通常文件的移除
sudo apt-get remove nginx
# 不保留配置文件的移除
sudo apt-get purge nginx
# 移除不再需要的被依赖的软件包
sudo apt-get autoremove

基本概念

渗透测试 penetration testing

渗透测试指的是在具备一定授权的情况下,对目标服务器或网络进行信息安全防护能力的评估的过程。包括但不限于采用各种扫描和攻击手段对目标的防护系统进行探测、攻击、破坏以及设置后门。渗透测试是信息安全评估的一部分,目的是为了保证目标系统的网络防御能力达到预期。

漏洞分析

漏洞分析是通过渗透测试的相关扫描和探测工具对目标系统潜在的漏洞进行测试,评估目标系统是否已经完善了补丁或安全策略。如果目标系统仍然存在相应的漏洞,则要对漏洞的风险进行评估,依据发现和利用的难度等指标。

/etc/hosts

/etc/hosts文件是一个本地计算机上的文本文件,它将主机名映射到IP地址。它通常用于在本地计算机上配置静态IP地址,以便您可以在不使用DNS服务器的情况下访问其他计算机。

当您在本地计算机上访问一个主机名时,例如在Web浏览器中输入www.example.com,本地计算机会首先查找/etc/hosts文件,以查看是否有一个条目将该主机名映射到一个IP地址。如果找到了匹配的条目,本地计算机将使用该IP地址来访问该主机名。如果没有找到匹配的条目,本地计算机将查询DNS服务器以获取该主机名的IP地址。

echo "192.168.122.102 target" >> /etc/hosts

# 在添加上面这条规则之后可以直接用target代替ip地址
ssh target
Metasploitable2 虚拟机

Metasploitable2是一款专门用于漏洞测试和渗透测试的虚拟机,它由Rapid7开发和维护。该虚拟机旨在模拟一个易受攻击的Linux系统,其中包含了大量的漏洞,可以供安全研究人员和渗透测试人员使用。

Metasploitable2虚拟机包含了许多常见的漏洞和弱点,包括未经身份验证的服务、弱口令、易受攻击的Web应用程序、易受攻击的数据库等。这些漏洞可以用于测试和验证安全工具的有效性,以及测试渗透测试人员的技能和知识。

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
# 查看当前系统中的所有虚拟机列表,默认返回一台 Kali 和 Metasploitable2 的虚拟机列表,注意这个 Kali 我们不需要使用
sudo virsh list --all
# 查看当前系统中虚拟网络列表,默认返回default网络
sudo virsh net-list --all

virsh常用命令列表:

命令 说明
help 显示该命令的说明
quit 结束 virsh,回到 Shell
connect 连接到指定的虚拟机服务器
create 启动一个新的虚拟机
destroy 删除一个虚拟机
start 开启(已定义的)非启动的虚拟机
define 从 XML 定义一个虚拟机
undefine 取消定义的虚拟机
dumpxml 转储虚拟机的设置值
list 列出虚拟机
reboot 重新启动虚拟机
save 存储虚拟机的状态
restore 回复虚拟机的状态
suspend 暂停虚拟机的执行
resume 继续执行该虚拟机
dump 将虚拟机的内核转储到指定的文件,以便进行分析与排错
shutdown 关闭虚拟机
setmem 修改内存的大小
setmaxmem 设置内存的最大值
setvcpus 修改虚拟处理器的数量
查看监听端口
netstat -tln

rpcinfo -p localhost

An Example Penetration Test