閉關學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級別的程序員
在這裏插入圖片描述
而這裏面也介紹了棧溢出,可以先看這裏面的棧溢出再去看“手把手教你棧溢出從入門到放棄(上)

四.開始學習

這裏先從棧溢出的上篇開始學習,因爲上篇介紹了棧溢出的原理和兩種覆蓋地址的方法。這兩種方法都需要操作系統關閉內存佈局隨機化(ASLR)並且shellcode 需要程序調用棧有可執行權限。下篇講的就是剋制ASLR的方法,今天是pwn第一天,先學上篇好咯,明天看下篇。

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

坐等南郵的nctf出pwn中關於棧溢出的題目來練練手[手動滑稽]

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

總結

萬事開頭難,但總得開個頭吧
希望能有閉關學pwn第二天
在這裏插入圖片描述
說起開頭難emmm…(最近很危險,似乎有人想開我頭)在這裏插入圖片描述
絲毫不慌。
在這裏插入圖片描述
因爲……
在這裏插入圖片描述
漂亮啊,網球乾的漂亮!網球兄弟,nice!在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章