n-byte write
[UNDEAD] The House of Mind
[UNDEAD] The House of Mind
2017.08.15The House of Mindhttp://phrack.org/issues/66/10.htmlhttps://gbmaster.wordpress.com/2015/06/15/x86-exploitation-101-house-of-mind-undead-and-loving-it/ unlink와 반대로, chunk가 free되면서 bins와 link하는 과정에서 발생하는 쓰기를 이용하는 방식이다.[free] unsorted bin link```cbck = unsorted_chunks(av); // == &av->bins[0]fwd = bck->fd;if (__glibc_unlikely (fwd->bk != bck)) // DEAD{ errstr = "free(): corrupted unsorted chunks"; g..
unsorted bin attack
unsorted bin attack
2017.08.15https://github.com/shellphish/how2heap/blob/master/unsorted_bin_attack.c unsorted bin에 있는 chunk가 할당될 때, 역시 unsorted bin에서 chunk를 제거하기 위해 unlink가 일어난다.단, 여기서는 unlink macro를 사용하지 않고 처리한다. [malloc] unsorted bin size check [malloc] unsorted bin unlink```cfor (;; ){ int iters = 0; while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av)) { bck = victim->bk; if (__builtin_expect (chunksize_n..
[UNDEAD] unlink
[UNDEAD] unlink
2017.08.15unlink`` unlink``는 consolidate가 발생할 때 연결되어 있던 bins list에서 chunk를 제거하기 위해 호출된다.`` PREV_INUSE``를 체크해 호출하기 때문에 fastbin chunk에 `` PREV_INUSE`` unset한다고 해서 회피할 수 있는 것이 아니다. glibc 2.25's unlink macro```c#define unlink(AV, P, BK, FD) { if (__builtin_expect (chunksize(P) != prev_size (next_chunk(P)), 0)) malloc_printerr (check_action, "corrupted size vs. prev_size", P, AV); FD= P->fd; BK= P->bk; if (__b..