Ubuntu 17.04 ( glibc 2.26 ) 부터 heap영역 할당/해제 처리속도를 늘리기위해 tcache(per_tread cache)를 사용한다. 그에 따라 변경된 점은 0x10 ~ 0x400이 할당/해제될땐 fastbin, unsorted bin이 아닌 tcache bin에 들어간다. tcache bin은 libc에서 관리하는것이 아닌 'tcache_perthread_struct'에서 관리된다. 또한 double free bug를 포함한 여러 오류검증 코드가 빠져있기에 exploit이 쉬워진다. ex) glibc 2.25이하에서는 dfb를 우회하기 위해 a - b - a순으로 free를 해주었다면 tcache환경에서는 a - a순으로 free를 하면 double free가 완성된다. tcach..
ida에서 shift + f12로 string들을 볼 수 있다. 이 문자열들을 이용하면 익스짜는데 시간단축이 될 수도 있다. 그 예로 hackctf Unexploitable 1번을 풀 수 있다. [HackCTF] Unexploitable #1 hackctf에 있는 unexp 1번이다. string에 함수 fflush가 들어가있고 fflu 'sh'를 이용해서 system('sh')을 실행시킬 수 있다. len('fflu')는 4개이니 4 byte만 더해주면 문자열은 'sh\x00'을 가르킬 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 from pwn import * #context.log_level = 'debug' #p = proce..
2014 코드게이트에 나왔던 angry_doraemom이다. 소켓 C문제도 처음인데다가 리버스커넥션은 검색을 했던 꽤 힘들었던 문제... 더 분발해야겠다는 생각이 너무 많이든 문제였다. arch : 32bit got overwrite canary_leak ( + 프로그램이 정상작동하려면 doraemon.txt, mouse.txt, bread.txt가 필요하다. port 8888열고 접속하면 된다. nc localhost 8888 다른건 필요없고 1~4번중 옵션고르는건데 4번에 bof터지는 곳이 있었다. canary leak을 어떻게 구상할까에 막혔는데 fork()하고 nc로 접속해서 문제를 푸는 형식이기에 원본파일을 재시작 하지않는이상 접속을 몇번을 해도 카나리 값은 변하지 않는다는 점을 생각하면 카나리..
hacking camp에 나왔던 문제이다. stack pivoting을 공부 할 수 있었던 좋은 문제. 스택 피보팅(stack pivoting)이란? gadget을 이용해서 stack의 흐름을 변경하는 기법이다. 해당 문제에서는 bss와 stack을 이용할 것이다. 가젯은 - prdi - prsi - leave_ret - read_ret leave_ret gadget은 말그대로 leave ret 즉, mov rsp rbp pop rbp pop eip jmp eip 명령어다. read_ret은 다음과 같다. rbp가 있는 영역에다가 read해주는 역할이다. sfp에다가 bss의 영역을 넣고 leave ret해주면 pop rbp로서 rbp는 bss를 가르키게 되고 ret에 read_ret을 넣어주면 bss에..