본문 바로가기

저세상 해킹/포너블

Chunk - FLAG

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