OverTheWire:渐进式战争游戏学 Linux 安全
OverTheWire 挑战:渐进式战争游戏学 Linux 安全
什么是 OverTheWire?
OverTheWire 是一个由社区维护的免费在线平台,通过一系列精心设计的战争游戏(wargames)来帮助任何人学习并实践网络安全、Linux 命令行与系统管理技能。它的核心理念是“在实践中学习”,你将通过解决真实场景下的谜题来获取 flag,从而进阶到下一关。无论你是从未接触过命令行的纯新手,还是想巩固安全基础的开发者,OverTheWire 都能为你提供一条循序渐进的成长路径。
为什么选择 OverTheWire?
- 完全免费:无需注册、无需付费,只需要一个 SSH 客户端即可开始。
- 难度渐进:从最基础的
ls、cd、cat开始,逐渐深入到权限提升、密码破解、网络分析等高级主题。 - 真实环境:每一关都是一个真实的 Linux 用户环境,你通过 SSH 登录到服务器,用所学知识寻找隐藏信息。
- 覆盖全面:除了著名的 Bandit 系列,还有 Natas(Web 安全)、Leviathan(基础漏洞)、Krypton(密码学)等十余个系列,适合不同方向的学习者。
入门前准备
你只需要两样东西:
- 一个 SSH 客户端
- Linux / macOS 系统已内置
ssh命令,直接打开终端即可。 - Windows 用户推荐使用 PowerShell(已附带 SSH)、Windows Terminal 或 PuTTY。
- Linux / macOS 系统已内置
- 一颗主动探索的心 —— 遇到困难时,学会查阅
man手册、搜索引擎以及 OverTheWire 官方社区的提示。
从 Bandit 开始:你的第一个战争游戏
Bandit 是 OverTheWire 为绝对初学者设计的 Linux 基础训练场。它包含 34 个递增关卡,每一关都需要你找到位于服务器某处的密码(flag),并用该密码登录下一关。
连接第一关 (Bandit Level 0)
打开终端,输入以下命令:
ssh bandit0@bandit.labs.overthewire.org -p 2220
- 用户名:
bandit0 - 密码:
bandit0 - 端口:
2220(OverTheWire 游戏服务器均使用此端口)
连接成功后,你会看到一条欢迎信息,现在你已经进入 Bandit Level 0 了。
提示:如果你遇到主机密钥验证提示,输入
yes继续即可。
Bandit 前 5 关详解:快速掌握基础命令
下面我们将带你通过前 5 关,同时解释其中涉及的核心 Linux 概念。每关的 flag(密码)建议自己动手获取,这里仅给出思路与命令。
Level 0 → Level 1
目标:服务器上有一个名为 readme 的文件,里面存放着下一关的密码。
步骤:
- 登录后,使用
ls查看当前目录的文件:ls - 输出中包含
readme,使用cat查看其内容:cat readme - 屏幕上显示的字符串就是 Level 1 的密码。复制它,然后退出当前连接(
exit或Ctrl+D),再使用新密码连接到bandit1。
学到什么:
ls列出目录内容。cat显示文件内容。- Linux 文件系统是分层结构,当前目录默认为用户的主目录。
Level 1 → Level 2
目标:密码存储在名为 - 的文件中。直接使用 cat - 无法正常工作,因为 - 被许多命令解释为标准输入。
步骤:
- 使用
ls确认文件存在。 - 用相对路径明确指定文件,防止歧义:
或者使用完整路径:cat ./-cat /home/bandit1/- - 获得密码。
学到什么:
- 对于以特殊字符(如
-)开头的文件名,需要通过路径前缀(./、/home/...)明确这是一个文件,而不是命令选项。 - 了解命令参数解析的常见陷阱。
Level 2 → Level 3
目标:密码在名为 spaces in this filename 的文件中。文件名包含空格。
步骤:
ls列出文件,看到包含空格的文件名。- 用引号将文件名括起来,或者用反斜杠转义空格:
或者:cat "spaces in this filename"cat spaces\ in\ this\ filename - 查看内容获取密码。
学到什么:
- Linux 文件名可以包含空格,但在命令行中需要转义或使用引号,否则会被当作多个参数。
- 双引号和反斜杠的转义用法。
Level 3 → Level 4
目标:密码存储在 inhere 目录下的一个隐藏文件里。
步骤:
- 进入
inhere目录:cd inhere - 使用
ls -a列出所有文件(包括隐藏文件):ls -a - 会看到一个以点(
.)开头的文件,例如.hidden。使用cat .hidden查看密码。
学到什么:
cd切换目录。- Linux 中以
.开头的文件是隐藏文件,普通ls不显示,需要-a选项。 - 常用连用
ls -la可以看到隐藏文件及详细信息。
Level 4 → Level 5
目标:inhere 目录下只有文件类型是人类可读(ASCII text)的文件存储了密码,其他文件是二进制或数据文件。
步骤:
- 进入
inhere目录。 - 使用
file命令检查每个文件类型:
这里file ./-*./-*匹配所有以-开头的文件(该目录下的文件都叫-file00等)。 - 找到输出为
ASCII text的文件,用cat查看:cat ./-file07 # 示例,根据实际结果替换
学到什么:
file命令可以识别文件类型,而不依赖扩展名。- 通配符
*结合路径使用以批量处理特殊文件名。
继续 Bandit 旅程:你会获得的技能
完成前 5 关后,你已经掌握了命令行最基本的操作。Bandit 后续关卡会逐步引入以下技能:
| 关卡区间 | 主要学习内容 |
|---|---|
| Level 6 – 10 | find 命令查找文件,grep 文本搜索,sort、uniq 数据处理 |
| Level 11 – 15 | Base64/ROT13 等简单编码,tr 字符转换,文件权限与 chmod |
| Level 16 – 20 | 网络端口扫描(nmap),SSL/TLS 连接(openssl s_client),ssh 私钥利用 |
| Level 21 – 24 | 计划任务(cron),临时文件,shell 脚本分析 |
| Level 25 – 30 | git 仓库敏感信息泄露,命令注入,ltrace 追踪库调用等 |
| Level 31 – 34 | setuid 二进制利用,环境变量劫持,高级权限提升 |
每一关都在前一个基础上增加一点点难度,这种渐进式设计让你不会感到跳跃,同时又能不断积累解决真实问题的能力。
实用技巧与常见问题
1. 记住密码和自动登录
随着关卡增多,你会有多个密码需要记录。推荐在本地创建一个文本文件(例如 bandit_passwords.txt)按关卡顺序保存密码。也可以使用 sshpass 工具自动输入密码(但为了学习,前期建议手动操作)。
2. 善用 man 和 --help
遇到不熟悉的命令,立刻查阅手册:
man find
find --help
甚至可以直接搜索引擎输入 linux find command examples,这是学习效率最高的方法。
3. 连接断开或超时?
OverTheWire 服务器会在一段时间不活动后断开连接。需要时重新 SSH 登录即可,进度不会丢失。
4. 严禁扫描或干扰其他玩家
所有战争游戏环境都是共享的,不要尝试提权到 root、攻击服务器或干扰其他用户。我们的唯一目标是找到当前级别的密码,进入下一关。
越过 Bandit:更多挑战系列
当你完成 Bandit 的全部 34 关后,你已经具备了一个初级 Linux 系统管理员或安全分析师的基础。OverTheWire 还有更多主题系列可以继续推进:
- Natas:专注于 Web 安全,教你发现和利用 Web 应用漏洞。
- Leviathan:小幅跳板,重温基础漏洞利用概念。
- Krypton:密码学挑战,从古典密码到现代算法。
- Narnia:基础二进制利用与 shellcode 入门。
- Behemoth:中级二进制漏洞利用和逆向工程。
每个系列都有独立的服务器与端口,你可以在 OverTheWire 官网 找到完整列表与连接方式。
开启你的安全学习之路
OverTheWire 的战争游戏将枯燥的概念变成了一个个待解之谜,让你在获取 flag 的成就感中不断前进。不要害怕遇到困难,每个卡住的瞬间都是学习最深刻的时刻。当你在搜索引擎敲下问题时,你正在成为一名真正的 Linux 实践者。
现在就打开终端,连接 bandit0,迈出第一步吧:
ssh bandit0@bandit.labs.overthewire.org -p 2220
下一个密码,等着你来发现。