[ pwn 学习 ] CTFshow-pwn0
2026-08-22 20:36:38
写在前面

大一上初涉 CTF,选择了先学习 Misc 这个板块。在我看来, Misc 恰似一款开放世界的沙盒游戏,随处都是彩蛋。它富有极大的趣味性,带来了密集的正反馈,在玩乐中把基础打扎实,也是我坚持打 CTF 直到现在的动力之一。
大一下过半开始接触 pwn。 一开始觉得自己的编程不好,对 pwn 畏惧。一直蜗牛一样慢吞吞地学一点点。后来我才明白。慢是最正常不过的,快反而是运气,或者是绝对的天赋。没必要过度焦虑了。
pwn 学习是借力打力——pwn 的本质不是写繁复的汇编语言,而是理解执行流。其实汇编语言不需要会太多。做 pwn 只需要认识这些指令、偏移量、栈、堆、程序段。上述指令已经覆盖了 90%的漏洞分析场景,剩下那 10%遇到现查就可以。
1 | call xxx → 调用函数 |

长期坚持的秘诀其实是无视中断。搞砸了也要继续。中断不可怕,可怕的是中断之后就不再回来。人生和调试一样,断点是用来观察状态,调整寄存器的,不是用来停止进程的。一以贯之的努力,不得懈怠的人生。每天的微小积累会决定最终结果,这就是答案。
如果说 Misc 像沙盒游戏,那我觉得 pwn 像越狱……
一日一日地找图纸(理解程序逻辑),磨钥匙(构造 payload)你不需要会设计整个监狱(写大型工程),只需要知道狱警几点换岗,哪扇门没上电磁锁。最终在看似铜墙铁壁的牢房里打出/bin/sh的那扇暗门
C 语言函数
strcpy
C 语言最基础的字符串复制函数
1 | strcpy(v0, a0) |
把a0的内容 原封不动地复制到v0里
1 | // 假设 a0 = "hello" |
关键是它不知道什么时候停
1 | strcpy 只有一个停止条件:碰到 \x00 |
做题时看到strcpy且 Canary 没开。第一反应就是:溢出,算偏移
pwn0

1 | ssh ctfshow@pwn.challenge.ctf.show -p28110 |
等待程序跑完
1 | cat /ctfshow_flag |
获得flag