Post

overlapping chunk

overlap technique으로 fastbin attack을 이용해도 되겠지만, 이게 더 간단하다. Poison null byte와 동일하게 off-by-one error만 발생하는 환경에서도 사용할 수 있다. 다만 overflow 되는 것이 null byte 뿐 이라면 사용할 수 없으므로 이 경우 poison null byte를 사용해야 한다.

Case 1

https://github.com/shellphish/how2heap/blob/master/overlapping_chunks.c 먼저 free(chunk)하고 chunk.size를 변경

1. free(p2) and then change p2.size
   
p1prev_size 
0x111  
   
   
   
p2  
prev_size0x111→ 0x1a1 
   
   
p3prev_size0x90
   

Note ) size를 변경하면 bins가 달라지는데 이 chunk가 할당이 될까 싶지만 unsorted bin에 들어있기 때문에 된다.

next size check (fast) /next size check ( normal)free()에서 수행하는 check이므로 신경쓰지 않아도 된다. 따라서, 굳이 0x1a1이 아니라 다른 size로 변경해도 된다.

2. p4 = malloc(0x198)

p4p3를 포함하는 chunk가 되기 때문에, p4에 접근하여 p3를 수정할 수 있다.

Case 2

https://github.com/shellphish/how2heap/blob/master/overlapping_chunks_2.c * p4, p5는 주석처리해도 동작함. chunk.size를 변경하고 나서 free(chunk)

1. change p2.size and then free(p2)
   
p1prev_size 
0x111  
   
   
   
p2prev_size0x111→ 0x1a1
   
   
p3prev_size0x91
   
  top size

Note ) 먼저 p2.size를 변경하고 free(p2)하게 되므로 next size check에 걸리게 된다. 따라서 p2.size에 아무 값이나 입력할 수는 없고, p2.size 번지의 값이 반드시 next size check를 통과할 수 있는 값이어야만 한다. size를 따로 만들어주어도 되지만 보통 top sizepn.size( n > 3 )를 사용하는게 편하다.

Note )top size를 사용하는 경우, top chunk가 p2까지 내려오기 때문에 어떤 size를 malloc(size)하든 chunk가 p2부터 시작한다.

2. p4 = malloc(0x198)

위에 적어놓았듯 top size를 사용하는 경우 size가 어떻든 상관 없이 p2에 할당된다.

This post is licensed under CC BY 4.0 by the author.