Agent Skills
返回列表
🔒

Linux 漏洞利用基础

IT 运维与安全 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/basic-exploitation-6l3a。

技能介绍

要解决什么问题

通过 fuzzing 或审计,你通常已经拿到了一个稳定的崩溃输入。但崩溃本身没有价值,漏洞利用的核心问题只有一个:如何把一次可控的内存破坏,变成对程序执行流程的实际接管。具体来说,缓冲区溢出之后,返回地址被改写,ret 指令弹出的下一个地址就是你的;这个地址怎么精确定位、怎么被稳定控制、以及控制之后下一步跳到哪,是这条链路上真正的难点。

技能如何工作

该技能围绕 Week 5 课程展开,在关闭现代缓解措施的 Ubuntu x86-64 环境中,系统讲解经典利用技术:

  • EIP/RIP 控制:使用 pattern 定位偏移,用 cyclic -l 反查确切的覆盖长度
  • 栈布局与 AMD64 差异:RBP 对齐、16 字节栈对齐、r10 替代 rcx 的 syscall 参数顺序
  • Shellcode 注入:手工组装 execve("/bin/sh") 的 23 字节 AMD64 shellcode
  • ROP chain 与 ret2libc:jmp rsp / call rsp gadget 作为稳定跳转目标
  • 缓解措施绕过思路:ASLR、NX、stack canary 的基本原理,为 Week 7 的完整绕过打基础
  • 环境与调试卫生:env -i、pwndbg、checksec、setarch -R 的规范化用法

关键步骤按天组织:搭建实验环境 → 编译 vuln1 并验证 checksec 输出 → 确定偏移 → 在 GDB 中验证 RIP 控制 → 组装完整 exploit → 调试直到稳定拿到 shell。

适用边界与注意点

  • 本技能刻意关闭 DEP/ASLR/canary,目的是先掌握纯利用技术;不要把它当作绕过真实防护的方案
  • ASLR 在系统层面应保持开启,只在实验进程内通过 setarch -R 或 GDB 的 set disable-randomization on 禁用
  • 永远不要硬编码栈地址。GDB 与真实执行的栈地址因环境变量差异可偏移数百字节,必须用泄露或 NOP sled
  • AMD64 的 call 前需要 16 字节对齐,栈对齐错误会导致 libc 内部 segfault
  • 缓冲区处理要用 p.recvuntil() 而非 sleep();p.recv() 不保证取到全部数据,必要时用 p.clean()
  • Ubuntu 24.04 使用 glibc 2.39,含完整 safe-linking;做经典堆利用练习建议用 Docker 跑旧版 Ubuntu

这些坑每一项都能让 exploit 在 GDB 里成功、在真实运行中失败,调试清单比最终 payload 更重要。

使用场景

  • 正在学习漏洞利用,需要搭建关闭保护的 Linux 靶场环境
  • 已有一个程序崩溃输入,想定位缓冲区溢出偏移并控制 RIP
  • 需要编写 pwntools exploit,用 jmp rsp gadget 执行 shellcode
  • 在做题或红队评估中,需绕过 ASLR/NX/canary 之前的基础知识验证

适合人员

  • 刚开始学 Pwn 的高校或自学者,想理解栈溢出如何变成 shell
  • 安全研究员,需要把 fuzz 得到的崩溃转成可利用 PoC
  • 红队工程师,在授权靶场练习 Linux 基础利用与调试技巧
  • CTF 选手,准备参加二进制利用方向比赛