iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 6
0
Security

CTF30系列 第 6

CTF 5: pwn2 (Part 2) (Pwn, TamuCTF2018)

  • 分享至 

  • xImage
  •  

行動階段

在上一篇中,我們提到有數種方法可以改變這個程式的執行路徑:

  • gdb 改掉 eip
  • 用溢位的方法把 eip 蓋掉
  • 用某種方法解出 print_flag (如果 flag 有寫在程式內的話)

由於 1 很明顯不能做,故我們可以試著用 2 的方法來做。
前一篇當中有提到可以用 info functions 來找到我們要的函式的位置,其位置為 0x0804854b
其實也有另一種方法,可以拿到此數值:

readelf -a ./pwn2

在上一篇當中,我們也有看到 echo 函式的內容:

8toIzPP.png

程式的執行路徑大概是這樣:

  1. ebp - 0xef 推到 eax
  2. eax 推到 stack 上
  3. gets 會把內容寫入到 eax 指的位置

一個函式在 ret 時 (x86),會把 stack 上的數值 pop 出來,並寫到 eip 暫存器上。此時下一步將會跑去 eip 所指的位置來執行程式。我們若在第三步時,讓 gets 蓋掉在 stack 上的 eip,就可以影響 echo 函式返回時會呼叫的函式。

由於我們可以知道 gets 的目標是 ebp - 0xef,而我們的 eip 會在 ebp 附近,故可以推算出要送多少長度的字出去。

--------stack 頂端------- (esp)
          本地變數
            ...
        (ebp - 0xef)
            ...
            ...
    存在 stack 上的 ebp (0xef, EBP 位置指向此處) 
    存在 stack 上的 eip 
---main 的 stack frame -- 
            ...

我們來試著計算長度。

int(0xef) = 239
int(0x4)  = 4
239 + 4 = 243

因為要計入 ebp 的長度,故要加上 4 byte。

ZiRuyQp.png


上一篇
CTF 5: pwn2 (Part 1) (Pwn, TamuCTF2018)
下一篇
CTF 6: Baby Cake (Web, HITCON CTF 2018)
系列文
CTF3030
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言