-
[BlackHat Heap] malloc_state structureHack/Pwnable 2016. 11. 29. 22:18
12345678910111213141516171819struct malloc_state { mutex_t mutex; /* Serialize access. */int flags; /* Flags (formerly in max_fast). */#if THREAD_STATS/* Statistics for locking. Only used if THREAD_STATS is defined. */ long stat_lock_direct, stat_lock_loop, stat_lock_wait;#endif mfastbinptr fastbins[NFASTBINS]; /* Fastbins */mchunkptr top;mchunkptr last_remainder;mchunkptr bins[NBIS*2];unsigned ..
-
[BlackHat Heap] heap_info structureHack/Pwnable 2016. 11. 29. 21:40
glibc에서 다루는 힙은 다음과 같은 구조체로 구현되어있다. 1234567typedef struct _heap_info { mstate ar_ptr; /* Arena for this heap. */struct _heap_info *prev; /* Previous heap. */size_t size; /* Current size in bytes. */char pad[-5 * SIZE_SZ & MALLOC_ALIGN_MASK];} heap_info;Colored by Color Scriptercs ar_ptr : heap arena의 포인터, 힙과 아레나 사이를 얘기함 struct _heap_info *prev : 이전 heap_info 구조체에 대한 포인터, heap_info 구조체는 싱글 링크드 리스트..
-
-
-
[BCTF 2016] MemoCTF 2016. 11. 28. 22:00
이 문제는 진심 개쩌는 문제다. 내가 이런 류의 문제를 안풀어서 그런건지 모르겠지만 진짜 개쩔었다 개신기하다 unsafe_unlink를 다루는 문제지만 free 함수가 존재하지않아서 다른방법으로 free를 해야했음.. 진짜 너무궁금해서 롸업을 봐버림.. 근데 롸업을봐도 이건 개 신박하고 공부가 오질라게 잘되는 문제였다. 1. fastbin으로 할당됫던것들은 large chunk가 한번 할당되게되면 더이상 쓸모가없다고 지멋대로 판단해 smallbin으로 합쳐버린다. realloc 으로 먼저 힙에 할당을 해주는데, 각각 name과 titile을 나타낸다. 그냥 별건없고, 보여주고, 페이지수정하고, 새로 페이지만들고, 네임입력해주고, 타이틀입력해주는 메뉴들이다. 아 점점 롸업쓰기가 귀찮아진다 하 ㅂㄷㅂㄷ 처음..
-
Plaid CTF 2014 ezhpCTF 2016. 11. 28. 02:25
이건 그나마 쉽게 풀 수 있었다. 한 1~2시간 삽질하니 풀리니까 기분이 좋다 ㅎㅎㅎ 원래 몇일씩 삽질했는데 이건 몇시간만에 풀리니 뜻깊었음 ㅠ 근데 나만 이렇게푼듯. ㅋ;;; fd와 bk로, 쉽게 exit@got를 덮을수있었고, NX가 꺼져있었기때문에 힙주소를 덮어주되 힙에는 쉘코드와 놉을 두었다. 1번메뉴는 buf 전역변수에 malloc으로 할당을 해준다. 청크갯수가 1022만아니면된다. 2번메뉴는 할당할 chunk를 free한다. size와 data를 입력받고 해당청크에 데이터를 작성한다. 청크의 데이터들을 출력해준다. 여기서 릭을 했음. exit@got를 힙주소로 덮고, 힙주소를 구경해보자 청크는 이런식으로 쉘코드와 nop을 작성해주면된다. 이것은 아직 쉘이 따이지 않는데, 0x9427000으로 ..