PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]

Sta1ry發表於2024-11-07

題目來源:Jarvis OJ https://www.jarvisoj.com/challenges

題目名稱:Level0

題目介紹:

屬於棧溢位中的ret2text 意思是Return to text 當程式中有可利用的危險函式 控制程式的返回地址到原本的函式 實現溢位利用

基礎過程(看個人習慣):

執行程式 檢視程式流程

file 檢視檔案記憶體型別

checksec 檢視檔案保護機制

ida 反編譯程式

分析可疑漏洞點 確定攻擊思路 編寫poc

檢視程式執行流程

PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]編輯

file 檢視檔案記憶體型別

不同的系統,記憶體的構造不同,堆疊相關的暫存器操作主要是EBP和ESP暫存器,比作指標來說,ESP暫存器總是指向堆疊的棧頂,當執行PUSH命令向堆疊壓入資料的時候,ESP減4,然後把資料複製到ESP指向的位置,執行POP命令的時候,首先把ESP指向的資料複製到記憶體/暫存器中,然後ESP+4,而堆疊在記憶體中的地址從高向低擴充套件,因此引數或者區域性的變數總是透過EBP加減一定的偏移地址來訪問的。

32位 4偏移量

64位 8偏移量

棧溢位漏洞,通常需要確定填充長度,計算要操作的地址和覆蓋地址的距離,棧基和棧頂的位置,透過上述的偏移量計算獲得,根據現實情況去覆蓋特定的變數或者地址內容。

得知是64位檔案

PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]

檢視檔案保護機制

PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]

NX堆疊禁止執行

PIE位置無關可執行檔案

Canary堆疊溢位哨兵

Symbol符號

RELRO(got防寫)全域性偏移表動態解析函式 地址隨機化

只開啟了一個NX,沒有開啟Stack Canary,這個功能在函式執行前先在函式呼叫位置插入cookie標記,當函式返回撥用的時候驗證cookie資訊是否合法,不合法就停止程式執行,但是如果溢位中,也覆蓋了cookie,就會繞過。PIE意為地址無關的可執行檔案,每次載入程式的時候都變換text、 data、bss 等段的載入基地址,使得攻擊者難以定位相應的基地址執行溢位。

扔到ida看一下 直接進入min函式反彙編 發現會列印helloword後返回了一個函式

PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]編輯

檢視這個函式 rbp-80h //該字串距離ebp的長度為 0x80h

ebp

基址指標暫存器 指向系統棧最上面一個棧幀的底部(堆疊定址)

主要作用是儲存恢復堆疊 以便於傳遞引數給函式

read函式沒有做過濾,會讀取其中的內容直到回車。

PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]

該檔案是64位的 距離ebp的長度為0x80 距離esp那就有0x8b

64位的情況下為8byte

pop ebp;出棧 棧擴大4byte

push ebp;出棧,棧減少4byte

那麼相應的棧結構為(圖是網上偷的)

PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]

發現這裡有一個callsystem 內建系統函式system('/bin/sh')執行系統命令

PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]

地址0x400684 加上這個地址覆蓋為我們想要返回讀取的地址

PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]

payload = 'a'*0x80 + 'b'*8 + p64(0x400596)

此時的棧結構是

PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]

在把這一串字串傳送到程式內 計算機的記憶體中每個值都是按照位元組儲存的 一般情況下都是小端儲存

什麼是小端儲存:

在小端儲存模式下 資料的最低有效位元組會被儲存在資料的最低地址處,最高有效位元組反之。

既0x0804843B 在記憶體中的形式是 \x3b\x84\x04\x08

使用pwntools把位元組作為字元傳遞進去,也就是把字串轉換為二進位制。

from pwn import *
import pwn

r = pwn.remote('pwn2.jarvisoj.com', 9881)

#         buf        rbp     callsystem
payload = 'a'*0x80 + 'b'*8 + p64(0x400596)

r.sendline(payload)
r.interactive()

PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]

以上內容純小白學習過程 如有錯誤請不吝賜教
PWN(棧溢位漏洞)-原創小白超詳細[Jarvis-level0]

相關文章