文章总结: 文章系统梳理栈溢出从漏洞定位到getshell的完整实战流程,以checksec判保护、IDA找危险函数、gdb算偏移、ROP或shellcode构造payload四步为核心,给出32/64位模板与远程调试常见坑,强调工具链熟练度决定成功率,附真题exp可改地址复用。 综合评分: 82 文章分类: CTF,漏洞分析,二进制安全,WEB安全,实战经验
漏洞挖掘实战系列(第 4 期):Pwn 专项(上)——从看懂到 getshell
原创
点击关注👉
网络安全学习室
2026年1月8日 10:32 湖南
Pwn 模块在 CTF 里占比高、难度大,但栈溢出是最稳的得分点之一:套路固定、工具成熟、真题重复率高。这一期我把“栈溢出从挖洞到 getshell”拆成你照着做就能复现的流程:找漏洞点 → 算偏移 → 找 gadget → 写 exp。全程用 2025 常见真题风格举例,脚本可直接改地址复用。
一、先把环境搭对:Pwn 入门三件套
1) 必备工具 
- checksec:看保护机制(NX/Canary/PIE/FORTIFY)
- IDA / Ghidra:反编译找危险函数
- gdb + pwndbg / gef:动态调试算偏移、看寄存器
- pwntools:写 exp 脚本(远程连接、打包 payload)
安装建议(Linux/WSL):
二、栈溢出的本质:把“返回地址”改成你想执行的地址
栈溢出发生在:程序用 gets / scanf / strcpy 等函数读输入时,没有限制长度,导致你输入的数据把栈上的 ebp / return address 覆盖掉。
你要做的就是:
- 用垃圾数据填满缓冲区 + 覆盖 ebp(可选)
- 把 return address 覆盖成某个 gadget 的地址
- 让程序“返回到”你安排的代码流程(system(“/bin/sh”) 或读 flag)
三、第一步:用 checksec 快速判断“能不能打”
拿到二进制文件先跑:
常见结果与策略:
- NX enabled:栈不可执行 → 不能直接塞 shellcode → 用 ROP / ret2libc
- Canary found:有栈保护 → 先想办法泄露 canary 再覆盖
- PIE enabled:地址随机化 → 需要泄露基址再计算偏移
- FORTIFY enabled:部分危险函数被替换 → 更难直接溢出(但仍可能有其他漏洞)
新手最友好的情况:32位 + NX on + Canary off + PIE off。
四、第二步:IDA 找漏洞点(重点盯这 3 个函数)
打开 IDA,看 main 里的调用链,重点找:
gets(buf)scanf("%s", buf)strcpy(dst, src)
只要看到类似:
基本就可以按栈溢出做。
五、第三步:gdb 算偏移(最关键也最容易错)
1) 生成 pattern 
把生成的字符串作为输入跑程序,程序 crash 后看:
看 eip(32位)或 rip(64位)里的值,比如是 0x41384141。
2) 找偏移 
得到 offset,比如 offset = 44。
经验:32位常见偏移 28/32/44/52;64位常见偏移 40/48/56(具体看栈帧)。
六、第四步:构造 payload(两种最常见打法)
打法 A:ret2libc(NX on 但无 Canary/PIE) 
思路:让程序调用 system("/bin/sh")。
步骤:
- 找
system地址(libc 里) - 找
/bin/sh字符串地址(libc 里) - 找一个
ret或pop ...; ret作为跳板(对齐栈/控制流程)
exp 模板(32位):
64位要注意:参数通过寄存器传,通常需要 pop rdi; ret 这种 gadget 来把 /bin/sh 地址放到 rdi。
打法 B:直接 shellcode(NX off) 
如果 checksec 显示 NX disabled,可以更粗暴:
七、真题风格案例:一个“标准栈溢出题”的完整 exp
题目特征(常见):
- 32位,NX on,Canary off,PIE off
- 有
gets(buf),buf 大小 0x20 - 目标:远程 getshell 或读
/flag
exp(你只需要改 offset / 地址 / 交互提示):
八、Pwn 新手最常踩的 5 个坑
- 没开 context.arch:导致 shellcode / packing 不对
- offset 算错:最常见,eip 没被完全覆盖
- 64位没处理 rdi:直接填 system+binsh 会失败
- 远程和本地 libc 不一样:本地能打远程打不了 → 要指定远程 libc 或泄露
- 交互提示写错:
sendlineafter没匹配到,payload 发早了
九、福利+互动
如果你觉得 Pwn 难,其实是“工具不熟 + 调试不会”。
200节攻防教程,限免领!
想要的兄弟,关注我+在后台发“学习”,直接免费分享!
咱学漏洞挖掘和CTF,光看文章不够,这套教程里全是实战演示——从工具配置到漏洞利用,每一步都手把手教,跟着练就能上手!
(注:资源领取入口在公众号后台,关注后发“学习”自动弹链接)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网络安全学习室 点击关注👉《漏洞挖掘实战系列(第 4 期):Pwn 专项(上)——从看懂到 getshell》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论