空想网安の乌托邦
首页小说读书项目归档照片墙音乐说说杂谈关于
封面

HTB Academy:Linux 本地权限提升

写作时间:2026-10-05 20:29:03
# HTB Academy
# 网安

本笔记依据 HTB Academy「Linux Privilege Escalation」模块的 28 个小节整理,按概念、发现条件、验证步骤和结果组织,不照搬课程段落。示例均来自课程场景;提权、PoC、容器挂载与反向连接只应在获准的 HTB/自建靶场中验证。

1. 本章学习主线

本章要解决的问题不是“背一条提权命令”,而是从低权限入口出发,判断系统把哪些额外能力交给了当前用户,以及这些能力能否被组合起来:

  1. 盘点主机:系统/内核、用户和组、网络、服务、软件、计划任务、文件权限、历史记录。
  2. 确定执行边界:哪些程序由 root 或其他高权限身份运行;哪些目录、脚本、库或容器接口可由当前用户控制。
  3. 验证前置条件:权限、版本、路径优先级、配置项、可达端口和工具是否匹配课程所示场景。
  4. 证明影响:优先用低影响方式确认控制流或身份变化;在课程靶场中再完成提权链。
  5. 回到防守视角:修补版本、收紧权限、清除不必要服务、限制 sudo/组权限并定期审计。

模块主题大致分为:信息收集(2–4)、环境与权限提权(5–11)、服务提权(12–18)、Linux 内部机制(19–22)、近期漏洞(23–26)、加固(27)和技能评估(28)。课程以 Linux 命令行与基础信息安全知识为前提,并建议先完成 Linux Fundamentals、Intro to Networking 等基础内容。

2. 通用枚举清单

在执行任何利用前,先留下可复查的主机画像。命令可能因发行版或工具未安装而不可用;课程也强调手工枚举不能被自动化脚本取代。

whoami
id
hostname
cat /etc/os-release
uname -a
echo "$PATH"
env
sudo -l
ip a
cat /etc/hosts
cat /etc/resolv.conf
route -n
ss -tulpn
lsblk
df -h

用户、组、登录和本地文件:

cat /etc/passwd
cat /etc/group
getent group sudo
lastlog
w
history
ls -la /home
ls -la ~/.ssh
find / -type f \( -name '*_hist' -o -name '*_history' \) -exec ls -l {} \; 2>/dev/null

文件、脚本、权限与服务:

ps aux
ps aux | grep root
find / -path /proc -prune -o -type f -perm -o+w -print 2>/dev/null
find / -path /proc -prune -o -type d -perm -o+w -print 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null
find / -user root -perm -6000 -type f -exec ls -ldb {} \; 2>/dev/null
ls -la /etc/cron.daily/
find / -type f \( -name '*.conf' -o -name '*.config' \) -exec ls -l {} \; 2>/dev/null
find / -type f -name '*.sh' 2>/dev/null | grep -v 'src\|snap\|share'

记录方式:对每个发现写下“证据路径/命令、属主与权限、谁会执行、执行身份、当前用户可控制的输入、验证结果”。不要因出现某个 SUID 文件、组名或旧版本就直接断言可提权;还需要满足该技术的具体条件。

3. 分小节笔记

A. 信息收集

1|Linux 权限提升简介

  • root 拥有系统管理权限;低权限 shell 的价值在于继续枚举本机权限边界。
  • 本地提权可能暴露敏感文件、服务凭据和网络信息;若主机加入域环境,主机上的材料还可能成为后续网络活动的入口。
  • LinPEAS、LinEnum 等自动化工具可以补充发现,但本章的核心训练是能解释手工枚举结果。
  • 课程关注项:内核与系统版本、root 服务、软件包、登录用户、home 与 SSH 文件、bash 历史、sudo、配置文件、密码文件、cron、磁盘挂载、SUID/SGID,以及可写文件和目录。

2|环境枚举

  • 建立操作系统、内核、CPU、PATH、环境变量、可用 shell、防护机制、网络配置、挂载点、用户/组和临时目录的基线。
  • 网络工具:课程列出 <code>ip a</code>、<code>route</code>/<code>netstat -rn</code>、<code>arp -a</code>、<code>/etc/hosts</code>、<code>/etc/resolv.conf</code>;若 <code>ifconfig</code> 不存在,课程建议使用 <code>ip a</code>。
  • 用户资料:查看 <code>/etc/passwd</code>、<code>/etc/group</code>、sudo 组、用户 home、隐藏文件、SSH keys/known_hosts 与 Bash 历史。可读的历史或配置文件可能留下凭据。
  • 磁盘与隐藏位置:<code>lsblk</code>、<code>df -h</code>、<code>/etc/fstab</code>、<code>/tmp</code>、<code>/var/tmp</code>、<code>/dev/shm</code>。课程给出了临时目录清理周期示例,但具体周期受系统配置影响,应以目标实际情况为准。
  • 使用原则:手动记录发现,再用 LinPEAS/LinEnum 补查;脚本缺失、权限不足或发行版差异都不代表没有问题。

3|Linux 服务与内部枚举

  • 重点问题:运行了什么服务、谁在运行、打开了哪些端口/套接字、有哪些工具、近期用户/登录/历史、配置/备份/日志、网络连接和定时任务。
  • <code>/proc</code> 是提供进程、硬件及内核信息的虚拟文件系统;课程用它检查进程命令行。示例:
find /proc -name cmdline -exec cat {} \; 2>/dev/null | tr ' ' '\n'
apt list --installed | tr '/' ' ' | cut -d' ' -f1,3 | sed 's/[0-9]://g' | tee -a installed_pkgs.list
sudo -V
strace ping -c1 <目标IP>
  • 课程还示范搜索配置文件、shell 脚本、root 进程,以及把已安装程序与 GTFOBins 条目交叉检查。其在线 API 示例需要网络、<code>curl</code> 和 <code>jq</code>;不要把“在清单里”当作可利用结论。
  • net-tools 等旧工具可能未安装;以目标实际提供的命令为准。<code>strace</code> 可辅助观察程序调用的系统接口,但它本身不等同于提权漏洞。

4|凭据搜寻

  • 搜索重点:<code>.conf</code>、<code>.bashrc</code>、<code>.config</code>、XML、shell 脚本、历史记录、备份文件、数据库文件、邮件队列以及网站配置。
  • 课程示例搜索配置文件:
find / ! -path '*/proc/*' -iname '*config*' -type f 2>/dev/null
  • Web 根目录中的配置文件(课程以 WordPress 配置为例)可能含数据库账号;只记录是否存在凭据及其用途,不把课程演示中的明文值复制进笔记或报告。
  • 检查用户 home 下的 SSH 私钥和 <code>known_hosts</code>。后者可提示曾连接的主机;私钥的可读性和可用性需在授权环境中验证。

B. 环境与权限型提权

5|PATH 滥用

  • Shell 按 PATH 中目录顺序查找未写绝对路径的命令。如果高权限程序调用命令时使用裸命令名,而低权限用户能控制优先命中的目录/同名文件,就可能让程序执行错误的目标。
  • 检查 <code>echo "$PATH"</code>,再检查高权限脚本/任务里的命令是否使用绝对路径。
  • 课程实验演示把当前目录放入 PATH 前部并创建同名命令文件,观察调用结果。学习重点是搜索顺序与控制权,不是在真实主机中覆盖系统命令。

6|通配符滥用

  • <code>*</code> 匹配任意长度文件名,<code>?</code> 匹配单字符,<code>[]</code> 匹配字符集合/范围,<code>~</code> 展开 home;通配符由 shell 在命令执行前展开。
  • 课程用 root cron 中的 <code>tar ... *</code> 演示风险:文件名若长得像 <code>tar</code> 选项,会被展开为命令参数。条件链是:任务以高权限执行、当前用户可写入其工作目录、调用方式展开通配符、所用程序有可触发的危险选项。
  • 课程示例使用 <code>tar</code> 的 checkpoint 相关参数文件触发脚本。复盘时先确认任务命令、工作目录和写权限,再解释选项如何从文件名变成参数;只在课程靶场复现。

7|逃离受限 shell

  • <code>rbash</code>、<code>rksh</code>、<code>rzsh</code> 等受限 shell 限制目录切换、环境变量、命令或脚本等功能;其目的通常是将用户约束在有限操作范围。
  • 课程归纳的思路:检查被允许的命令及参数,观察命令替换、命令串联(如 <code>;</code>、<code>|</code>)、环境变量、shell 函数或参数解释是否提供绕过路径。
  • 示例意图:若某个允许命令的参数会被 shell 再解释,可能间接执行其他命令。不要将单个示例理解成对所有 restricted shell 都有效;要逐项验证策略边界。

8|特殊权限:SUID/SGID

  • SUID 让程序以文件属主身份执行;SGID 让程序以文件属组身份执行。权限位显示为 <code>s</code>/<code>S</code>,搜索结果需要人工核对文件、属主、执行位及具体程序功能。
  • 课程枚举示例:
find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null
find / -user root -perm -6000 -type f -exec ls -ldb {} \; 2>/dev/null
  • 继续检查二进制的用途、版本、可调用功能和依赖;GTFOBins 用于查已知程序行为与安全边界。课程举了 SUID 程序及 sudo 授权程序的示例,重点是误配功能而非“见 SUID 就等于 root”。

9|滥用 sudo 权限

  • 先执行 <code>sudo -l</code> 查看当前用户授权命令、目标身份、是否需要密码及限制参数;sudoers 配置决定允许范围。课程正文翻译中有 <code>sudo -r</code> 等错译,应以代码示例中的 <code>sudo -l</code> 为准。
  • 例:若 <code>sudo -l</code> 显示仅可无密码运行 <code>/usr/sbin/tcpdump</code>,再检查该程序有哪些选项会执行外部命令/脚本。课程以 <code>-z postrotate-command</code> 做演示;要点是“授权了哪个二进制 + 它的受控输入/回调能力”。
  • 防护原则:sudoers 中写绝对路径;仅授予工作必需命令;认真限定参数、身份和环境变量;较新系统的 AppArmor 等限制也可能阻止旧示例。

10|特权组

课程强调组成员身份可能把管理能力间接交给普通用户:

组/能力 课程指出的影响 <code>lxd</code>/<code>lxc</code> 可管理容器;若可创建特权容器并挂载主机文件系统,容器 root 可触及宿主数据 <code>docker</code> 可管理 Docker daemon/容器;危险挂载可映射宿主机文件系统 <code>disk</code> 可访问 <code>/dev</code> 下磁盘设备,可能直接读取文件系统数据 <code>adm</code> 可读取 <code>/var/log</code> 中日志,可用于发现凭据、用户行为和 cron 线索;本身不等于 root

  • 用 <code>id</code>/<code>getent group <组名></code> 先确认成员资格,再检查该组可调用的管理接口及宿主挂载。
  • LXD 的详细工作流见第 14 节;Docker 的 socket/组权限见第 15 节。不要把容器内 <code>uid=0</code> 与宿主 root 混为一谈,关键是是否存在宿主资源映射。

11|Linux Capabilities

  • Capabilities 将传统 root 权限拆成细粒度能力。<code>setcap</code> 为可执行文件赋权,<code>getcap</code> 检查;滥用过宽能力可能绕过文件权限或获得额外操作能力。
  • 课程示例命令:
find /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin -type f -exec getcap {} \; 2>/dev/null
getcap /usr/bin/vim.basic
sudo setcap cap_net_bind_service=+ep /path/to/program
  • 高风险能力示例:<code>cap_setuid</code>、<code>cap_setgid</code>、<code>cap_sys_admin</code>、<code>cap_dac_override</code>。实际影响取决于获得能力的程序如何使用它。
  • 课程以 <code>cap_dac_override</code> 的 Vim 二进制演示对受文件权限保护内容的读写;示例涉及敏感系统文件,仅在隔离靶场理解权限效果。

C. 服务型提权

12|易受攻击的服务

  • 服务版本、运行身份和配置都可能形成入口。课程案例为 Screen 4.5.0/4.05.00(页面代码输出为 <code>4.05.00</code>),指出其日志处理权限检查问题。
  • 先识别版本:<code>screen -v</code>;再判断是否与课程所讲易受影响版本/条件匹配。课程展示了本地 PoC 通过 <code>/etc/ld.so.preload</code> 达到 root 的过程。
  • PoC 需要匹配目标环境,且会修改系统级状态。生产主机不应直接运行未经验证的利用程序。

13|滥用 cron 定时任务

  • Cron 条目按分钟、小时、日、月、周和命令执行;关注任务以何种身份运行、脚本/目录是否可写、路径是否绝对、运行频率以及参数是否受可写文件影响。
  • 课程通过备份文件时间戳发现任务约每三分钟运行,再用 pspy 观察到 root 启动脚本:
./pspy64 -pf -i 1000
find / -path /proc -prune -o -type f -perm -o+w -print 2>/dev/null
ls -la /dmz-backups/
  • <code>pspy</code> 在课程中是已取得的工具文件;<code>-pf</code> 显示进程/文件事件,<code>-i 1000</code> 指定约每秒扫描。正文未讲完整安装流程,不额外假设目标已安装。
  • 如果高权限 cron 运行可写脚本,脚本改动会在下次调度以该身份执行。修改前应备份并先做无害验证;评估完成后恢复实验环境。

14|LXD/LXC 容器

  • 关键前提:当前账号属于 <code>lxd</code>/<code>lxc</code> 管理组,且 daemon/配置允许创建特权容器及挂载宿主目录。
  • 课程示例流程:确认 <code>id</code> 中有 <code>lxd</code>;使用课程提供的 Ubuntu/Alpine 镜像包导入本地 image;必要时按默认值完成 <code>lxd init</code>;创建 privileged container;把宿主 <code>/</code> 映射到容器 <code>/mnt/root</code>;启动后进入容器检查挂载。
  • 命令骨架(镜像名、包名随课程靶场而异):
lxc image import <本地镜像包> --alias <镜像别名>
lxc init <镜像别名> <容器名> -c security.privileged=true
lxc config device add <容器名> host-root disk source=/ path=/mnt/root recursive=true
lxc start <容器名>
lxc exec <容器名> /bin/sh
  • 成功信号不是“容器内显示 root”本身,而是容器中出现宿主文件系统映射并可按课程权限访问。不要对非授权宿主执行挂载操作。

15|Docker

  • 架构认知:Docker CLI/Compose 发出管理请求,daemon 创建容器、管理镜像、网络、日志和卷。镜像是只读模板;容器是镜像实例;卷用于持久化/共享数据。
  • 本地枚举:<code>id</code> 检查 <code>docker</code> 组,查看 <code>docker image ls</code>、运行容器与 socket(课程示例位置 <code>/var/run/docker.sock</code> 或应用目录中的 <code>docker.sock</code>)。
  • 危险前置条件:当前用户在 <code>docker</code> 组、sudoers/SUID 允许以高权限调用 Docker,或 socket 可写;可控 daemon 权限结合将宿主目录挂载进容器,可能打破容器与宿主边界。
  • 课程演示的利用链:通过可用 CLI/daemon socket 列出容器或使用已有镜像;创建容器时把宿主路径以 volume 映射到容器;在容器内检查映射内容。若容器环境没有 CLI,课程举例从 Pwnbox 传入 docker 客户端并执行 <code>chmod +x</code>;这是课程环境中的工具准备方式,不代表所有平台都兼容。
  • 风险检查重点是socket 的访问权限、daemon 授权、volume 是否可写、是否含敏感宿主目录。容器内的 root 不能自动视为宿主 root,挂载和 daemon 控制才是关键。

16|Kubernetes

  • 结构:Control Plane 管理集群;Worker Nodes 运行 Pod;一个 Pod 可包含一个或多个容器。API Server 是控制入口,etcd 保存集群状态;Kubelet 在节点管理 Pod。
  • 课程列出的常见端口:etcd <code>2379/2380</code>、API Server <code>6443</code>、Scheduler <code>10251</code>、Controller Manager <code>10252</code>、Kubelet API <code>10250</code>、只读 Kubelet API <code>10255</code>。端口可达性本身不等于权限。
  • 课程示例先请求 API Server 的 6443,收到 <code>403 Forbidden</code>/<code>system:anonymous</code>;再检查 Kubelet API:
curl -k https://<节点IP>:10250/pods | jq .
kubeletctl -i --server <节点IP> pods
kubeletctl -i --server <节点IP> scan rce
  • <code>kubeletctl</code> 用于课程中的 Pod 枚举/命令交互;该工具在课程场景中已可用,章节未详述安装步骤。
  • 权限链:匿名/弱认证访问 Kubelet → 列出 Pod/容器 → 验证容器内身份和可访问内容 → 课程示例读取 ServiceAccount token 与 CA → 用 <code>kubectl auth can-i --list</code> 检查 token 权限。工具调用需要能访问对应 API,且 token/证书要与目标 API 匹配。
  • 课程展示的高权限 Pod YAML 使用 <code>hostPath: /</code> 和自动挂载 ServiceAccount token。学习重点是审计 <code>hostPath</code>、Pod 创建权限、RBAC、匿名 Kubelet、Secrets/ServiceAccount 和网络暴露;此类配置会把容器权限扩展至宿主文件系统,必须只在课程实验环境演示。

17|logrotate

  • <code>logrotate</code> 根据日志大小/年龄执行轮转、压缩、重命名或创建新日志;通常由 cron 周期运行,主配置 <code>/etc/logrotate.conf</code>,细项在 <code>/etc/logrotate.d/</code>。
  • 检查命令/状态:
logrotate --help
cat /etc/logrotate.conf
ls /etc/logrotate.d/
grep 'create\|compress' /etc/logrotate.conf | grep -v '#'
  • 课程给出的利用前提:日志/相关路径可写;logrotate 以 root 或更高权限运行;版本属于课程列举的易受影响版本(3.8.6、3.11.0、3.15.0、3.18.0)。
  • <code>logrotten</code> 的课程准备步骤是克隆源码并用 <code>gcc</code> 编译;还要根据配置判断 <code>create</code>/<code>compress</code> 等轮转选项,准备课程 payload 和监听端。可复现前先确认所有前置条件,不能仅因看到 logrotate 就判定存在漏洞。

18|其他技术:流量、NFS、tmux

被动流量检查

  • 若允许非特权用户抓包,流量中可能出现明文协议凭据、SNMP 团体字符串或认证材料。课程提到 <code>tcpdump</code>、net-creds、PCredz 等工具。
  • 发现抓包权限后,优先评估接口/权限和是否暴露敏感数据;不得捕获无授权的真实用户流量。

NFS

  • <code>showmount -e <主机></code> 查看导出目录;课程用 TCP/UDP 2049 说明 NFS 服务。
  • <code>/etc/exports</code> 中 <code>root_squash</code> 会将远端 root 映射为低权限身份;<code>no_root_squash</code> 允许远端 root 保留身份,若同时导出可写共享,风险显著。
  • 课程实验流程:确认可写导出及 <code>no_root_squash</code> → 在 Pwnbox 编译课程给出的测试程序 → 挂载共享、复制并设置 SUID → 回到靶机验证权限变化。前置依赖包括有权限的 NFS 客户端挂载能力、可写导出及匹配的执行条件。

tmux 会话

  • 课程展示 root 建立共享 tmux socket、将其属主/组设置为可被低权用户访问的组成员后,组内用户可附加会话并继承其中的高权限操作上下文。
  • 检查 <code>ps aux | grep tmux</code>、socket 文件权限/属组、<code>id</code> 中的组成员关系;仅当 socket 可访问且会话确属高权限时才成立。

D. Linux 内部机制

19|内核漏洞利用

  • 先用 <code>uname -a</code>、<code>cat /etc/lsb-release</code> 记录内核与发行版,再与课程 PoC 的目标版本和架构对应;课程以 Dirty COW 和旧 Ubuntu 内核为例。
  • 课程常见操作链:下载源码/PoC → 按其说明编译(例:<code>gcc kernel_exploit.c -o kernel_exploit</code>)→ 设置执行权限 → 在实验靶场运行 → 用 <code>whoami</code>/<code>id</code> 复核。
  • 这是影响面最大的路径之一:课程明确提醒内核 PoC 可能造成系统不稳定/宕机。生产环境不应试跑;先做版本匹配和隔离快照。

20|共享库与 LD_PRELOAD

  • 静态库通常编入程序;动态 <code>.so</code> 在运行时加载。<code>ldd <程序></code> 查看依赖及路径;运行路径可能来自编译配置、环境变量、默认目录或 <code>/etc/ld.so.conf</code>。
  • <code>LD_PRELOAD</code> 可在程序开始时优先加载指定库。课程利用前提是 sudoers 允许的高权限程序保留 <code>LD_PRELOAD</code>(示例 <code>env_keep+=LD_PRELOAD</code>),而用户可提供自定义共享库。
  • 检查示例:
ldd /bin/ls
sudo -l
  • 课程示例以 <code>gcc -fPIC -shared ... -nostartfiles</code> 编译共享库,再将其作为 <code>sudo LD_PRELOAD=...</code> 环境变量传给获准重启的程序。关键不是 Apache 本身,而是 sudo 环境策略将加载控制权交给了低权用户。

21|共享对象劫持

  • 从高权限/SETUID 程序开始:<code>ls -l</code> 检查权限,<code>ldd</code> 找非标准库依赖,<code>readelf -d <程序> | grep PATH</code> 检查 RUNPATH/RPATH,随后检查该目录是否可写。
  • 课程 <code>payroll</code> 示例依赖 <code>/development/libshared.so</code>,且 <code>/development</code> 可写;程序调用缺失的 <code>dbquery</code> 符号后,可在实验室构造同名库并实现该函数,验证库加载顺序和身份变化。
  • 前提需同时成立:高权限程序加载该依赖;搜索路径优先指向可写目录;库名/符号匹配;程序运行时实际调用该符号。

22|Python 库劫持

三条课程路径:

  1. 模块文件可写:高权限运行脚本导入的模块对当前用户可写。
  2. 搜索路径劫持:目标模块位于较低优先级目录;较高优先级目录可写;创建同名模块及同签名函数。
  3. PYTHONPATH 可控:sudo 允许 <code>SETENV</code>,运行的 Python 会从用户指定目录导入模块。

检查脚本授权、导入模块、模块文件权限与搜索顺序:

sudo -l
ls -l <脚本>
grep -r 'def <函数名>' <模块目录>
ls -l <模块文件>
python3 -c 'import sys; print("\n".join(sys.path))'
pip3 show <模块名>
  • 课程以 <code>mem_status.py</code> 导入 <code>psutil.virtual_memory()</code> 为例;需确认模块名、函数名和参数形式均与被导入代码一致。
  • 课程特别说明:将 SUID 位设在 Python 脚本上通常不会让解释器自动以脚本属主身份运行;示例真正依赖的是 sudo 授权。
  • 仅当 <code>sudo -l</code> 明确给出 <code>SETENV</code>/Python 运行权限或目录确实可写时才成立;测试输出用 <code>id</code> 验证后,再讨论影响。

E. 近期本地漏洞

23|Sudo

  • 先检查配置和版本:<code>sudo -l</code>、<code>sudo -V | head -n1</code>,再结合发行版版本判断是否属于课程展示的历史漏洞范围。
  • 课程举例:CVE-2021-3156(对应的 PoC 需编译,并按目标发行版/版本选 profile);CVE-2019-14287(前提是 sudoers 允许当前用户运行特定命令)。
  • 课程用 PoC profile、OS 信息和 UID 边界展示结果;应将这些作为版本/配置核查示例,而不是假定任意 sudo 主机都可利用。不要在未授权系统下载或运行 PoC。

24|Polkit / PwnKit

  • Polkit 负责授权;课程介绍 action、rules、local authority 文件,以及 <code>pkexec</code>、<code>pkaction</code>、<code>pkcheck</code>。<code>pkexec -u <用户> <命令></code> 可按指定身份启动程序,实际能否执行取决于授权策略。
  • 课程随后介绍 CVE-2021-4034/PwnKit:下载 PoC、在目标或副本上用 <code>gcc</code> 编译,再于实验环境验证。防守侧应核对软件包/修补状态,不能仅凭系统存在 <code>pkexec</code> 推断可利用。

25|Dirty Pipe

  • 课程介绍 CVE-2022-0847:内核管道相关漏洞;其课程描述为在拥有文件读取权限时写入文件,并展示对 <code>/etc/passwd</code> 或 SUID 二进制路径的 PoC。
  • 先用 <code>uname -r</code> 对照课程所列内核范围,再按课程流程取得源码并运行 <code>compile.sh</code>。利用包含改动系统文件/二进制的高影响步骤,应仅在可重置靶机执行。
  • 课程强调 Android 也受影响;复习重点是版本识别、文件权限影响与系统恢复风险。

26|Netfilter

  • Netfilter 为内核网络过滤/连接跟踪/NAT 框架。课程列举 CVE-2021-22555、CVE-2022-1015、CVE-2023-32233,并详细演示若干 PoC;有些利用包含内存破坏、竞态和内核修改。
  • 一般流程:<code>uname -r</code> 确认内核 → 根据 CVE 核对适用范围/架构 → 查看 PoC 编译依赖(课程例涉及 <code>gcc</code>、<code>make</code>,某例依赖 <code>libmnl</code>/<code>libnftnl</code>)→ 仅在隔离靶场验证身份。
  • 课程明确警告此类利用可能不稳定并损坏系统。不要以 CVE 年份、模块名称或单一版本字符串代替完整适用性判断。

F. 加固与综合练习

27|Linux 加固

更新与补丁

  • 持续更新内核、系统组件和第三方服务;课程提到 unattended-upgrades、yum-cron 等自动更新机制。

配置管理

  • 定期检查可写文件/目录与 SUID;cron 和 sudoers 使用绝对路径;避免在所有人可读文件中存明文凭据;清理 home 与 Bash history;防止低权限用户修改程序加载的自定义库;移除不必要的软件包/服务;考虑 SELinux。

用户管理

  • 控制用户和管理员账户数量;记录有效/无效登录;使用强密码或易记忆的 passphrase;限制密码复用;检查用户组权限;遵循 sudo 最小权限。

审计

  • 定期进行安全配置检查;基线/合规框架用于参考,不应替代贴合组织风险的安全计划,也不应替代渗透测试。
  • Lynis 用于 Unix 类系统配置审计和加固建议。课程示例在取得仓库后运行:
./lynis audit system
  • 非 root 扫描会跳过部分需要 root 的测试;报告包含 warnings、suggestions、hardening index 和日志/报告文件。它是人工检查的补充,不是替代品。

28|Linux 本地权限提升技能评估

  • 目标:对 INLANEFREIGHT 面向公众的 Web 服务器做安全评估。课程提供低权限用户和 SSH 连接方式;通过本章方法发现错误配置/漏洞。
  • 任务要求在主机上找到五个需要不同权限等级访问的 flags,从普通 <code>htb-student</code> 逐步提升至 root,并提交全部五个。
  • SSH 是课程给定的初始访问方式;如想提高难度,课程允许自行探索其他 shell 获取方式,但这是可选项,不影响分数或完成度。
  • 建议按此顺序记录每一步:初始身份/主机信息 → 新发现及证据 → 前置条件验证 → 权限变化 → flag 所需身份 → 返回并复核路径。课程页要求用英语回答问题;本笔记不提供旗标答案。

4. 常见结果判断与误区

  • sudo -l 输出为空/报密码需求:不能据此结束枚举;继续检查组、计划任务、服务、文件、库路径和版本。
  • 有可写脚本 ≠ 一定提权:还要证明高权限进程会执行该脚本,且调用间隔/输入条件可达。
  • 发现 SUID/能力 ≠ 一定可利用:需要理解程序功能、有效权限、参数及环境限制。
  • 容器内 root ≠ 宿主 root:要找到宿主目录挂载、可写 Docker socket/daemon 控制等实际边界。
  • 发现旧版本 ≠ 可直接跑 PoC:核对发行版、精确版本、架构、补丁状态、编译依赖和运行风险。
  • 自动化工具有盲区:LinPEAS、LinEnum、pspy、Lynis 等补充手工检查;缺少结果不证明安全。
  • 终端输出可能含账号、密钥或哈希:笔记/报告脱敏;不要把真实凭据粘贴进公共文档。

5. 复盘时的最小记录模板

目标/授权范围:
当前用户与组:
系统/发行版/内核:
发现的配置/文件/进程:
高权限执行者:
当前用户可控制的部分:
利用前置条件逐项验证:
验证命令及观察到的结果:
影响与稳定性风险:
清理/恢复动作:
修复建议:

课程中的参考链接

  • HTB Academy:Linux Privilege Escalation 模块
  • GTFOBins(课程用于核对常见二进制的危险功能)
  • LinPEAS · LinEnum(课程列举的辅助枚举工具)
  • Lynis(课程介绍的 Unix 系统审计工具)

配图复核:已逐节检查本模块 28 个课程页面;未发现课程正文需要保留的独立教学图片,因此本笔记以命令、输出判读和文字流程呈现,不添加外部示意图。

 

‍

avatar

Zybaxy918039

书本,学术,网安之间反复横跳的业余爱好者,目前在自学计算机网络和AI相关知识

RECOMMENDED

HTB Academy:使用 Nmap 进行网络枚举

2026-09-19 22:17:09

HTB Academy:信息收集-网络版(Web Reconnaissance)学习笔记

2026-09-19 22:22:34

HTB Academy:Footprinting(足迹收集)

2026-09-20 12:23:20

Table of Contents