“Linux exploit(漏洞利用)”是安全研究领域的话题。从防御和学习角度看,了解其原理有助于打补丁、做防护;但任何未授权攻击他人系统都是违法的。下面只做原理性、防御向科普。
一、Exploit 是什么
Exploit = 利用软件/系统漏洞,使目标执行非预期行为,常见目标:
- 提权(普通用户 → root)
- 逃逸(容器 → 宿主机)
- 远程代码执行(RCE)
- 信息泄露
二、Linux 常见漏洞类型(原理)
1. 内存破坏类
历史最常见,现在已难很多。
- 栈溢出:写超出缓冲区,覆盖返回地址
- 堆溢出 / Use-After-Free:误用已释放内存
- 整数溢出:长度计算错误
利用方式:
- 覆盖返回地址 → 跳到 shellcode
- 改函数指针
- 借助
libc 地址计算(ASLR 下需泄漏)
缓解机制:
- ASLR / PIE
- Stack Canary
- NX(不可执行内存)
- FORTIFY_SOURCE
2. 权限检查错误
- 文件权限判断错误
capabilities 配置错误
- SUID 程序逻辑缺陷
例:
- SUID root 程序未清环境变量
- 能写
/etc/ld.so.preload
3. 内核漏洞
- 内核态越界读写
- 竞态条件(TOCTOU)
- syscall 参数校验缺失
利用结果:
4. 配置类“软漏洞”
不是代码 bug,但是 exploitable:
sudo 规则过宽
- 可写 cron 文件
- Docker socket 暴露
- 弱密码 + SSH
三、一个简化利用流程(示例思路)
以“本地提权”为例(仅说明逻辑):
- 找到有漏洞的程序(如 SUID)
- 触发漏洞(溢出 / 逻辑错误)
- 控制执行流或环境变量
- 加载恶意
.so 或执行 shell
- 获得 root
实际中还需绕过:
- ASLR
- SELinux / AppArmor
- seccomp
四、防御角度:如何防止被 exploit
- 及时更新内核和软件
- 不开不必要 SUID
- 最小权限原则
- 开启安全编译选项
- 用容器 / 沙箱隔离
- 审计 sudo / cron / capabilities
五、合法学习资源
- CVE + PoC(仅本地实验)
- CTF(pwn 方向)
- 《Computer Systems: A Programmer’s Perspective》
- Linux 内核源码
- 自己搭 VM 实验
如果你愿意,我可以:
- 讲某一个具体 CVE 的原理(防御向)
- 讲如何做 exploit 防护
- 讲pwn 入门知识(合法学习)
只要不用于攻击他人即可。