1. 漏洞分析实战:pwn1_sctf_2016栈溢出利用详解
最近在刷CTF题目时遇到一个挺有意思的栈溢出漏洞利用案例——pwn1_sctf_2016。这个题目看似简单,但其中包含几个值得深入分析的技巧点。作为二进制安全方向的老兵,我想通过这篇详细的技术笔记,记录下完整的分析过程和利用思路,特别适合刚入门PWN的新手学习参考。
1.1 初始检查与程序概况
拿到任何二进制题目,我的第一反应永远是先做基础检查。用file命令查看文件信息:
bash复制$ file pwn1_sctf_2016
pwn1_sctf_2016: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=..., not stripped
这是个32位的ELF文件,动态链接且没有去除符号表(not stripped),这意味着我们能看到函数名等调试信息,对逆向分析很友好。接着用checksec检查安全机制:
bash复制$ checksec pwn1_sctf_2016
[*] '/tmp/pwn1_sctf_2016'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
关键信息:
- 32位小端序架构
- 栈保护(Stack Canary)未启用
- NX(不可执行栈)已启用
- 未启用地址随机化(PIE)
这些安全机制的状态直接影响我们的利用方式。没有栈保护意味着可以直接通过栈溢出覆盖返回地址;NX开启意味着不能直接在栈上执行shellcode;没有PIE意味着代码段的地址固定,便于计算偏移。
1.2 逆向分析与漏洞定位
用IDA Pro打开程序,直接查看main函数:
c复制int __cdecl main(int argc, const char
