unsorted bin attack와 rop로 문제를 풀 수 있다. Unsorted bin attack unsorted bin 에 들어가있는 chunk의 bk를 변조해서 원하는 위치에 할당받는 기법이다. bk 영역에 victim의 주소를 넣고 할당해주면 원하는 위치에 값을 쓸 수 있다. 단 victim - 0x10의 주소를 넣어줘야된다. ( header size 0x10 / 32bit 환경이라면 8byte가 된다. ) exploit 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 5..
hitcon training 의 lab 12번이다. house of force기법을 이용해서 magic함수를 실행시켜 플래그를 얻는문제이다. House of foce topchunk의 size영역을 덮어쓰고 원하는 영역에다가 할당을 받을 수 있는 기법이다. condition - topchunk의 size 가 변조가능해야한다. - 할당된 chunk의 값을 바꿀 수 있어야한다. - 할당되는 heap의 크기를 제어할 수 있어야한다. exploit scenario 1. topchunk를 32bit, 64bit의 각각 최댓값(0xffff~)으로 덮는다. 2. top chunk의 주소와 할당받고 싶은 위치의 주소의 차를 구한다. 3. 그 차만큼 할당해준다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14..
Hitcon lab 5번을 풀다가 궁금증이 생겨서 찾아봤더니 syscall chain을 원활하게 해주는 dl_sysinfo_int80함수가 있다. 간단하게 syscall 해주고 ret을 해주는 가젯이다. + hitcon lab 5 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 35 36 37 38 39 40 41 42 43 44 45 46 from pwn import * context.log_level = 'debug' p = process('./simplerop') e = ELF('./simplerop') bss = e.bss() + 0x100 syscall =..
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..