CTF数组越界漏洞内存布局简析

今天为大家带来一篇关于数组越界漏洞原理的分析,并且结合CTF中的实例给大家讲解下。由于自己也是第一次接触,如若有不到位的地方,还希望各位评论补充我会及时的改正。

总体来说数组越界其实和栈溢出差不多。。。
推荐一篇文章

http://blog.csdn.net/human_evolution/article/details/40752047

基本上把数组越界的原理给讲清楚了。在这里呢,我主要是结合CTF中的题,让大家实际的感受一把如何利用这个漏洞。

上题咯!(有时候我在想要不要把题目的链接也发出来让大家可以一起练习呢?需要题目的留言一下哦~)

习惯性的检查开了哪些保护。
CTF数组越界漏洞内存布局简析_第1张图片
开了NX,没开栈保护,可以往栈溢出这方面着手。
CTF数组越界漏洞内存布局简析_第2张图片
随便运行了下,好像是个数组(array).
CTF数组越界漏洞内存布局简析_第3张图片
感觉程序逻辑还挺绕,不过这都不用管,主要是这:s[v3] = v2,问题都出在,程序员永远都不要相信别人的输入,这是程序员很容易犯的一个错误。
我这里主要是想和大家一起学习下程序是如何给数组分配内存的,以及数组各元素所处的相对位置。下个断点咱们来调试一下。
CTF数组越界漏洞内存布局简析_第4张图片

这个解释起来,代码,堆栈,寄存器都得看,截图比较麻烦。汗!注意下这都是16进制的,别理解出错了。
CTF数组越界漏洞内存布局简析_第5张图片
执行这条语句之后,进行赋值。其中[ebp+s]所指向的是数组的起始位置,eax是我们的偏移量,也就是下标值,在栈中就是这样的布局。
这里写图片描述
了解了这些之后我想如何利用这个漏洞应该就是小case了,我们已经实现任意写。
这道t题呢,也不需要我们去leak什么地址,
CTF数组越界漏洞内存布局简析_第6张图片
System函数都已经这么明显的摆在这了,我们要做的就是将栈给布置好,给system的执行有一个舒适的环境。
CTF数组越界漏洞内存布局简析_第7张图片
最后的exp我就不贴了,主要是分析一下思路。大家自己去写写咯!

你可能感兴趣的:(PWN,CTF)