Linux exploit如何编写与利用
导读:Linux Exploit 编写与利用实战指南 一、安全与合规声明 本内容仅用于授权的安全测试、教学与研究,严禁用于未授权的系统或网络。对实际系统进行操作前必须取得明确书面授权,并自行承担全部法律与合规风险。 在生产环境进行任何测试前,务...
Linux Exploit 编写与利用实战指南
一、安全与合规声明
- 本内容仅用于授权的安全测试、教学与研究,严禁用于未授权的系统或网络。对实际系统进行操作前必须取得明确书面授权,并自行承担全部法律与合规风险。
- 在生产环境进行任何测试前,务必做好备份、快照与变更管控,避免造成业务中断或数据损坏。
二、从信息收集到提权的通用流程
- 信息收集
- 系统基础:uname -a、cat /etc/os-release、cat /proc/version
- 用户与权限:id、sudo -l
- 进程与服务:ps aux、systemctl list-units --type=service --all、netstat -tuln
- 文件系统与权限:find / -perm -4000 -type f 2> /dev/null(SUID)、find / -perm -2000 -type f(SGID)、find / -writable -type d、find / -perm -2 -type f
- 计划任务:crontab -l、cat /etc/crontab、ls -al /etc/cron.*
- 漏洞探测与利用
- 内核漏洞:基于内核/发行版信息匹配已知 LPE,使用或改造公开 Exploit;经典案例包括 Dirty COW(CVE-2016-5195)、Dirty Pipe(CVE-2022-0847)、PwnKit(CVE-2021-4034)。
- SUID/SGID 滥用:定位可被滥用的二进制,结合 GTFOBins 执行提权(如 find -exec /bin/sh -p ; -quit)。
- 计划任务与环境劫持:可写脚本/目录、未限定路径的命令、通配符滥用等。
- Sudo 配置错误:通过 sudo -l 发现可免密或以高权限执行的命令/脚本,进一步利用。
- 自动化辅助
- 信息收集与线索汇总:LinPEAS、LinEnum、linuxprivchecker
- 漏洞匹配建议:linux-exploit-suggester / linux-exploit-suggester2、searchsploit
- 提权后处理
- 稳定交互:获取稳定 root shell,必要时进行持久化与清理痕迹(仅限授权环境)。
三、用户态常见利用编写要点
- 典型流程
- 触发点定位:栈溢出、堆溢出、格式化字符串、UAF、整数溢出、逻辑漏洞等。
- 保护机制识别:检查 ASLR、NX、PIE、RELRO、Canary;据此选择 ROP/JOP、栈迁移、泄露地址、one-gadget 等路径。
- 信息泄露:利用格式化字符串或越界读写获取 libc/stack/heap 地址。
- 控制流劫持:覆盖返回地址/函数指针,构造 ROP 链调用 system(“/bin/sh”) 或 one-gadget。
- 稳定利用:处理 PIE/ASLR、对齐与寄存器约束,避免崩溃与异常日志。
- 最小 PoC 模板(示意)
- 目标:验证栈溢出并调用 system(“/bin/sh”)
- 步骤:发送超长 payload → 泄露 libc 基址 → 计算 system/“/bin/sh” 地址 → 发送二次 payload 触发 ROP
- 注意:需关闭 ASLR/Canary 或先完成泄露;不同架构/ABI 需调整寄存器与调用约定。
四、内核态利用编写要点
- 常见攻击面与入口
- 内核模块通过 proc_create/ioctl 暴露接口,用户态程序 open/ioctl 交互;模块回调在 ring0 以 root 权限执行,典型漏洞包括栈/堆溢出、越界读写、UAF、竞态等。
- 提权原语与符号解析
- 提权常用原语:commit_creds(prepare_kernel_cred(0)),得到 uid=0 的进程凭证;符号地址可在 /proc/kallsyms 获取(部分系统需更高权限)。
- 典型利用路径
- 栈溢出 → 泄露 canary → ROP 在 kernel 内调用提权原语 → 返回用户态获取 root shell。
- ret2usr:在内核态直接跳转到用户态准备好的提权函数(如 commit_creds/prepare_kernel_cred 的封装),减少在内核构造复杂 ROP 的需求;需关闭 SMAP,且注意 SMEP 对内核执行用户态代码的限制。
- 保护与绕过
- 缓解:KASLR、SMEP、SMAP、KPTI、Stack Canary、NX 等;绕过思路包括信息泄露、ROP/JOP、内核 ROP、ret2usr、竞态窗口扩大等。
- 本地实验环境
- 常见形式:提供 bzImage(内核镜像)+ rootfs.cpio + vmlinux(符号)+ start.sh(QEMU 启动脚本);必要时用 extract-vmlinux 从 bzImage 提取 vmlinux 辅助分析。
五、快速上手清单与示例命令
- 信息收集与枚举
- 基础与权限:uname -a、cat /etc/os-release、id、sudo -l
- SUID/SGID/可写:find / -perm -4000 -type f 2> /dev/null、find / -perm -2000 -type f、find / -writable -type d、find / -perm -2 -type f
- 任务与网络:crontab -l、cat /etc/crontab、ls -al /etc/cron.*、ps aux、netstat -tuln
- 漏洞匹配与利用
- 本地匹配:searchsploit linux kernel < 版本> ;linux-exploit-suggester2
- 自动化巡检:LinPEAS / LinEnum / linuxprivchecker
- 内核提权示例(需匹配目标内核与配置):编译并运行对应 CVE 利用,成功后验证 id 为 0。
- SUID 滥用示例:若发现 /usr/bin/find 设置了 SUID,可执行 find . -exec /bin/sh -p ; -quit 获取 root shell(仅限授权测试)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux exploit如何编写与利用
本文地址: https://pptw.com/jishu/770473.html
