快速刷通PWN的第一天
计划
声明:因为是自己学习的一个计划,所以可能并不是适用于所有人。但是尽可能考虑到由浅入深,由易到难。
一个比较推荐的二进制方面的课程是 Live Overflow
的 Binary Hacking
课程,原版的视频是放在 YouTube 上的,但是有好心的小伙伴直接放在了 B 站上,方便大家学习。整个课程讲的非常浅显易懂,并且会带着你一步一步从零开始了解二进制的很多内容,强烈安利!考虑到最近有一次面向新手的技术分享,所以放在最开始,将结合一部分 Binary Hacking
课程和 Exploit-exercises
(对于该部分的介绍将放入笔记正文中)的内容总结分享出来。
笔记
Exploit-exercises 介绍及笔记思路分析(不感兴趣的同学可直接跳入正文)
首先推荐一个练习平台:https://exploit-exercises.lains.space
这个平台主要包括了 Nebula 、Protostar、Fusion 等几个部分。基本顺序为 Nebula->Protostar->Fusion。官网上给了每个部分的虚拟机下载地址,但是下载速度可能非常慢,所以可以从 vulnhub (不是 P 神的 vulhub,vulhub 是偏向学 Web 的,对 Web 感兴趣的同学可以看看)上的镜像站点下载。
Nebula 介绍了一些非常常见的 Linux 下的概念和漏洞,学习完成 Nebula 将会对于 Linux 的本地攻击有一个相当透彻的了解(好吧,官网上自己号称的),并且可以粗略地了解一下远程攻击。这里给一份大佬放在 Github 上的 Nebula 部分的笔记:1u4nx/Exploit-Exercises-Nebula,感兴趣的小伙伴可以参考着去做。个人认为,如果对于 Linux 及相关漏洞没有过多了解,可以先从 Nebula 入手学习,如果有了一定的了解,就可以跳过 Nebula,直接进入下一阶段的 Protostar。
Protostar 是 Nebula 的下一个阶段,会介绍一些基本的内存损坏问题,例如没有开启保护下的 Linux 下的缓冲区溢出、格式化字符串漏洞和堆利用。个人认为这个模式是非常好的模式,因为对于新手而言,重要的不是做 PWN 题,而是清晰地理解底层原理,PWN 题只是一个学习的手段而已。所以虽然本系列笔记叫做快速刷通 PWN,但并不会以上来就会那一堆题目上手去刷题,那样只会流于表面的做题套路,而容易忽视真正的有价值的底层原理。欲速则不达,要想快就先慢。所以本系列笔记会从 Protostar 入手来去学习相关基础知识。
Fusion** 是 Protostar 的下一阶段,依然还是注重内存破坏、格式化字符串和堆利用,但是重点关注更高级的方案和在现代保护系统中的利用(即开启了各种保护**的情况下如何利用)。
所以,在本系列笔记的开始,甚至较长一段时间的开始,你会发现并没有去做任何一道 CTF 比赛中的 PWN 题,因为现有的 CTF PWN 题天然的自带逆向,其本质还是看源码,理解漏洞原理,所以我们跳过前面的一个逆向步骤,直接学习原理,完成之后再去带上逆向这一部分,这样能够更加节省学习时间和成本。
Tips:
- 有关栈相关基础知识可以参考:C语言函数调用栈(一) 和 C语言函数调用栈(二)
- 有关栈溢出相关基础知识可以参考:CTF Wiki-栈溢出原理
正文
Stack0
题目源码如下:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{
volatile int modified;
char buffer[64];
modified = 0;
gets(buffer);
if