chunk에 flag라는게 N, M, P라는 명목으로 들어가 있길래 이녀석이 뭔가 하고 봤다.
한개당 1bit를 차지해 하위 3bit를 이녀석이 먹고 있는데, 자세한 내용은 다음과 같다.
NON_MAIN_ARENA - 현재 청크가 다른 arena에서 위치하는 경우 true가 된다.
-> 여기서 다른 아레나라는게 아레나가 쓰레드에 맞게 각각 생성되는걸로 알고 있는데, 즉 main스레드에서 생성된 청크가 아니면 1로 세트되는거 같다. (이친구가 set되면 4다)
IS_MMAPPED - 맞는지 틀린지 모르겠는데, 청크의 크기가 과하게 커지면 mmap을 통해 청크를 할당시킨다고 한다. 이때 1로 세트된다.(이 친구가 set되면 2다)
PREV_INUSE - 이전 청크가 malloc같은걸로 할당되면 1로 set된다. (이게 set되면 1이다.)
즉 뭔가 size가 8의 배수로 끝나지 않고 애매하게 끝난다면 flag가 세팅된 것으로 볼 수 있다.
일례로 0x10의 size의 chunk에서 size를 보니 0x17이라고 적혀 있으면, 위의 플래그가 모두 세팅된 것이라고 볼 수 있을 것이다.
'저세상 해킹 > 포너블' 카테고리의 다른 글
ROP gadget으로 쉘 따기 feat. calc (0) | 2019.10.25 |
---|---|
malloc chunk 구조체 (0) | 2019.09.16 |