在嘉木的督促下,我去简略地听了一下嘉木推荐的慕课,本篇文章就所看慕课做一篇简略概述。
这一篇主要是讲越界访问和缓冲区溢出。
越界访问
为什么会出现越界访问呢?这是由于数组元素可以由指针来访问,因而对数组的引用没有边界约束。因此在对数组的访问时可能会有意或无意地超越数组存储区范围而无法发现。
数组存储区可看成一个缓冲区,超越数组存储区(越界访问)的写入操作称为缓冲区溢出。缓冲区溢出会被利用进行缓冲区溢出攻击,可导致程序运行失败、系统关机、重新启动等后果。造成缓冲区溢出的原因是没有对栈中作为缓冲区的数组的访问进行越界检查。
栗子
这个漏洞就会给黑客留下机会。就像下面这个栗子所示一样
可以看到,这个函数非常简单,只是单纯的读取一串字符,然后储存到buf中,但是
开辟的缓存区只有0x10个字节大小,但是read最多可以读取0x100个字节,这样就会造成缓冲区溢出。这也就是简单地栈溢出,也就是将保存在栈中的ebp,ebx,返回地址覆盖掉。
于是呢,我们就可以通过用我们输入的内容来将ebp,ebx,返回地址覆盖掉后加上自己想要执行的函数的地址,来控制程序执行自己想要执行的函数。这样就可以进行攻击啦。
在这里呢,我们可以找到一个后门函数,然后通过上述操作执行后门函数,可以获取这个题的flag,这就是一道简单的pwn题啦!