본문 바로가기

system/writeup

2018 codegate zoo

zoo

2018 codegate zoo

0x40 크기의 owner chunk에서 animal chunk를 관리한다.

 

animal chunk는 이외에도 많지만 info 함수에서 확인할 수 있으므로 위 정보만 기억해두고 가면 된다.

 

animal name에 20바이트만큼 받아 heap addr leak이 가능하다.

 

(dung - dung_removed + 25) % 25 > 4라면 prescribed medicine을 셋팅해준다.

 

그 다음부터는 feed 함수 실행 시 food가 아닌 medicine을 먹게 되는데 여기서 medicine name, medicine desc를 입력받는다. medicine desc에서 16byte heap overflow가 나서 next chunk의 prev size, size를 바꿀 수 있다.

 

animal chunk에서 heap을 할당하여 관리하므로 heap을 대상으로 한 unsafe unlink가 가능하다.

 

size 셋팅은 아래 구문을 통해 가능하다.

medicine 입력을 받는 곳 위인데 owner chunk 기준으로 next animal chunk의 dung_removed를 넣어준다. 즉 fake chunk의 size 조작이 가능!

 

unsafe unlink를 수행하고 나면 해당 위치에 fd의 값이 써져있기 때문에

walk 도중에 위 if문으로 들어갈 수 있다.

여기서 *(fd+24)에 값을 쓰기 때문에 arbitrary read, write가 가능해진다.

 

이걸로 animal species ptr을 덮어서 main arena를 leak한 후 __free_hook을 덮어 쉘을 따면 된다.

 


'system > writeup' 카테고리의 다른 글

2019 insomnihack onewrite  (0) 2019.01.27
2019 codegate god-the-reum  (0) 2019.01.27
2018 codegate super marimo  (0) 2019.01.24
2018 codegate superftp  (0) 2019.01.23
2018 codegate baskinrobins31  (0) 2019.01.22