闭关学pwn第一天——了解数据结构中的栈(文末彩蛋)

前言

看pwn的writeup ,发现都看不懂= =
那些大佬的wp看起来跟参考答案是略没什么区别啊(雾)!!
然后决定从最基本的学起来,每天补一点知识,一边闭关一边刷题。
听说栈溢出挺简单的(当我没说----by三小时以后的我),那就先从学栈开始吧。
———————————————————————————————————

了解栈

上百度
注:按顺序食用效果更佳

1.生动形象说明了栈

超生动,超级形象

2.简单的介绍栈

这里面有个地方设栈的最大长度为size,栈满不可入栈(上溢)[top=size-1]
我理解是top是从[0]开始的,所以装满了顶部指针会是top=size-1
而后面的出栈操作也验证了这个理解
只有栈顶元素才可出栈,栈空不可出栈
栈空条件:top=-1;

所以top确实是从0开始的

3.栈的三种含义

在pwn里用到的栈溢出应该是第三种(雾)

4.百度百科栈

这里大致看一下概念就好了
然后百度百科里有一句话没怎么看懂
在i386机器中,栈顶由称为esp的寄存器进行定位。压栈的操作使得栈顶的地址减小,弹出的操作使得栈顶的地址增大
为什么压栈的操作会使栈顶地址减小啊,压栈不是往上放东西吗,那地址不就多了吗…
然后各种百度,这个问题见5

5.操作系统中栈与堆的理解

对刚才提出的问题解释很透彻了,因为它是向下生长的,是倒过来的,所以压栈地址会减小,弹出地址会增大。这篇文章里提到的ESP和EBP寄存器不懂,阻碍了理解,继续百度

6.ESP寄存器与EBP寄存器

看完了以后再回头看5,现在就很好理解了,ebp为基指针,然后要调用函数的时候把esp往下放,用完了再来个(move esp,ebp)也就是把ebp的值赋给esp,这样下方的空间就又都收回来了,好玩。

7.关于栈的理解

最后再看看别人的理解巩固一下。说实话这篇看起来讲的详细,但还是很烧脑……

———————————————————————————————————

栈溢出

开始学栈溢出,资料如下
手把手教你栈溢出从入门到放弃(上)
手把手教你栈溢出从入门到放弃(下)

一.判断栈溢出条件

1.程序要有向栈内写入数据的行为。
2.程序并不限制写入数据的长度。

二.攻击方法

在溢出数据内包含攻击指令的内容或地址。

三.知识补充

对不懂的地方进行百度知识补充
EIP & EBP & ESP
这里有一句话说的非常棒:
其实我们对这个只需要知道三个指针是什么就可以,可能对我们以后学习栈溢出的问题以及看栈这方面的书籍有些帮助。当有人再给你说EIP,ESP,EBP的时候,你不能一头雾水,那你水平就显得洼了许多。其实不知道我们照样可以编程,因为我们是C级别的程序员,而不是ASM级别的程序员
闭关学pwn第一天——了解数据结构中的栈(文末彩蛋)_第1张图片
而这里面也介绍了栈溢出,可以先看这里面的栈溢出再去看“手把手教你栈溢出从入门到放弃(上)

四.开始学习

这里先从栈溢出的上篇开始学习,因为上篇介绍了栈溢出的原理和两种覆盖地址的方法。这两种方法都需要操作系统关闭内存布局随机化(ASLR)并且shellcode 需要程序调用栈有可执行权限。下篇讲的就是克制ASLR的方法,今天是pwn第一天,先学上篇好咯,明天看下篇。

———————————————————————————————————

坐等南邮的nctf出pwn中关于栈溢出的题目来练练手[手动滑稽]

———————————————————————————————————

总结

万事开头难,但总得开个头吧
希望能有闭关学pwn第二天
闭关学pwn第一天——了解数据结构中的栈(文末彩蛋)_第2张图片
说起开头难emmm…(最近很危险,似乎有人想开我头)在这里插入图片描述
丝毫不慌。
闭关学pwn第一天——了解数据结构中的栈(文末彩蛋)_第3张图片
因为……
闭关学pwn第一天——了解数据结构中的栈(文末彩蛋)_第4张图片
漂亮啊,网球干的漂亮!网球兄弟,nice!闭关学pwn第一天——了解数据结构中的栈(文末彩蛋)_第5张图片

你可能感兴趣的:(pwn入门,栈溢出,pwn,ctf,萌新,入门)