WiLL75G/overthewire-bandit-skills
GitHub: WiLL75G/overthewire-bandit-skills
一份基于 OverTheWire Bandit 战争游戏全部 34 关的技能映射与无剧透学习笔记,帮助蓝队分析师和 Linux 学习者系统掌握安全基础概念。
Stars: 1 | Forks: 0
# OverTheWire Bandit
[](https://opensource.org/licenses/MIT)
[](https://overthewire.org/wargames/bandit/)
[](https://overthewire.org/wargames/bandit/)
[](https://www.kernel.org/)
[]()
[]()
[](https://www.gnu.org/software/bash/)
[]()
## 攻略
## 攻略
在 Medium 上的逐级通关解析:[medium.com/@wgokahp](https://medium.com/@wgokahp)
**关于剧透:** OverTheWire 要求玩家不要发布密码或分步解决方案。本文档记录了每个阶段教授的技能和概念,而不是答案。重点在于展示理解,而不是提供作弊表。
## 概览
| 字段 | 详情 |
| --- | --- |
| Wargame | OverTheWire Bandit,全部 34 个级别 |
| 专注领域 | Linux 基础、SSH、权限提升、Git、受限 shell |
| 工具 | ssh、nc、openssl、nmap、diff、git、cron、GNU coreutils |
| 节奏 | 每天,结合 SOC 动手实验工作 |
| 状态 | 已完成 |
## 为什么这很重要
Bandit 在每个级别背后都设置了挑战,迫使你真正去使用工具,而不是纸上谈兵。涵盖了 SSH 原理、文件处理、shell、网络、权限提升、版本控制以及受限 shell 逃逸。
对于蓝队的价值并不在于我能提升权限,而在于我从内部见识过这些技术中的每一种,这正是它们能在日志中被识别出来的原因。
从未使用过 setuid 二进制文件的分析师在文件列表中看到 `-rwsr-xr-x` 时,看到的只是一个权限字符串。而使用过它的分析师看到的则是一个权限提升途径。
## 技能
| 领域 | 概念 |
| --- | --- |
| SSH 与远程访问 | 基于密钥的身份验证、自定义端口、非交互式执行、主机密钥处理 |
| 文件分析 | 比较版本、按属性定位数据、处理旨在破坏简单命令的文件名 |
| 网络 | 端口和服务发现、原始 TCP、TLS 封装的 socket |
| Shell | 变量展开、循环、shell 如何解析和执行输入 |
| 权限提升 | setuid 二进制文件、实际 UID 与有效 UID 的对比、使用受控二进制文件作为另一个用户操作 |
| 计划任务 | 读取 cron、分析执行上下文、可写的脚本路径 |
| 版本控制 | 从提交历史、分支和标签中恢复机密。为什么 .gitignore 不是一种控制手段 |
| 受限 Shell | 使用合法的程序功能逃逸基于分页器和输入处理受限的 shell |
| 自动化 | 生成并传输输入集,以暴力破解受限的搜索空间 |
## 各个主题带来的启发
### SSH
Bandit 让你沉浸其中。包括私钥身份验证、在交互式 shell 被故意破坏时的非交互式执行,以及隐藏在这一切背后的反复出现的教训:*在*主机上可访问的服务与你可以从*外部*登录的服务是不同的。
了解连接的起点和服务实际所在的位置,几乎出现在每个阶段。这种区别与在数据包捕获中区分入站探测和驻留信标是一样的。
### 文件
比较两个版本以找出更改之处。按大小或所有者查找文件。处理旨在破坏假设输入良好的命令的文件名。
虽然不起眼,但这正是大部分工件分类的实际工作。
### 网络
通过端口扫描来映射正在监听的内容,然后直接连接到这些服务,包括那些包裹在 TLS 中的服务(单纯的纯文本连接无法返回任何有用的信息)。
了解服务需要哪种客户端,以及为什么原始 TCP 连接到 TLS 端口会失败,这是基础。这也是为什么端口 443 上的纯 HTTP 值得发出警报的原因。
### 权限提升
关键的区别在于:**实际 UID 与有效 UID 的对比。**
setuid 二进制文件以其所有者的权限而不是调用者的权限运行。这就是整个机制,也是为什么一个配置错误的二进制文件会让攻击者获得 root 权限。
在文件列表中识别出 setuid,并理解为什么它是一个攻击途径而不是一个无关紧要的事物,这对于 Linux 主机的攻防双方都适用。
### Cron
有几个阶段是基于它构建的,而有益的见解并不是语法。
而是**执行上下文**。作业是以哪个身份运行的,对比是谁安排了它。由特权作业执行的可写脚本路径不是一种配置错误,而是一个等待有人注意到的权限提升隐患。
这也是为什么 cron 是 Linux 上最常被滥用的持久化机制之一。它是内置的,能在重启后存活,而且看起来就像是例行维护。
### Git 作为攻击面
这是游戏中最贴近实际工作的部分。
机密信息不仅存在于当前文件中。它们存在于**提交历史**、**非默认分支**和**标签**中。我恢复出了已经从工作树中删除但从未真正被抹去的凭据。
`.gitignore` 不是一种安全控制手段。它能阻止文件被添加,但对于你三个月前就已经提交的文件却无能为力。
这正是 gitleaks 和 trufflehog 这类工具存在的扫描面,它也是 SOC、IR 和 pentest 工作中一个现实存在的问题。
### 受限 Shell 逃逸
有两个阶段会将你置于故意设置为残缺的 shell 中。逃逸意味着要理解 shell 是如何解析输入的,然后利用环境中的合法功能来进入一个正常的 shell。
防守方的角度才是重点。分析师需要识别突破行为留下的工件,而从内部了解其机制正是使其变得易于理解的关键。
### 自动化
有一个阶段需要在一个极小的有限空间中猜测一个值。与其手动尝试,不如生成完整的集合并将其传输进去。
这与开发检测工具的直觉是一样的:让计算机去做重复性的工作。
## 两天的瓶颈
Bandit 教会我的最有用的东西并不是一条命令。
有一个阶段花了我整整两天时间。所有记录在案的方法都是正确的。但就是行不通。
突破来自于思路的转变。我不再假设谜题是障碍,而是开始质疑我的环境。这是一个工具问题,而不是知识问题。一旦我分离出这个变量,改变了运行命令的位置和方式,那个一直以来都正确的解决方案立刻就奏效了。
当警报触发且答案不明显时,SOC 分析师运行的就是这种循环:
**将问题与工具分离。** 失败是因为我的方法错了,还是因为我的环境中有东西在干扰?
**分离变量。** 每次只改变一件事,这样每次尝试都能让你学到东西,而不是增加干扰。
**知道何时改变环境,而不是方法。** 有时解决方法是更换机器或提供一个更干净的初始状态,而不是换一条命令。
**坚持到底。** 愿意停留在“我还不知道”的状态而不关闭终端,在实践中,这就是这份工作。
同样的情况也出现在我的实验室中。一个语法正确的 UFW 规则却毫无作用,因为流量根本没有经过该规则所在的链。规则没有错。环境并不是我以为的那样。
我是刻意记录下这些卡壳的时刻的。只展示顺利的胜利,会隐藏掉构建能力的那一部分。
## 蓝队相关性
| Bandit 技能 | 为什么它在 SOC 中很重要 |
| --- | --- |
| setuid 和权限提升 | 识别该技术及其留下的工件 |
| Cron 和执行上下文 | 理解持久化和计划任务滥用 |
| Git 历史、分支、标签中的机密 | 审计代码库中泄露的凭据 |
| 受限 Shell 逃逸 | 在 shell 活动中发现突破行为 |
| 端口和服务发现 | 从防守者的角度读取侦察行为 |
| TLS 与原始连接的对比 | 分析加密和明文流量 |
| 脚本和自动化 | 检测工具的基础 |
## 工具
ssh、nc、openssl、nmap、diff、git、cron、GNU coreutils、shell scripting
## 状态
所有级别均已完成。
Bandit 是 OverTheWire 系列中的基础 wargame。完成它就奠定了更高级 wargame 所构建的 Linux 和安全基础,而这正是蓝队工作假设你已经具备的条件。
[](https://linkedin.com/in/WilliamInCyber)
[](https://x.com/WilliamInCyber)
[](https://medium.com/@wgokahp)
标签:Bash, CTI, PE 加载器, Web报告查看器, 内存分配, 学习资源, 安全基础, 安全测试工具, 应用安全, 网络安全, 网络安全研究, 隐私保护