본문 바로가기

system/writeup

2019 utctf jendy's

jendy's

2019 utctf jendy's

대회 당시에는 포맷스트링이라.. 그냥 패스했는데 다시 풀어보니 분석의 중요함을 알려주는 문제였다.

 

이 바이너리에서 쓰이는 chunk들은 다음과 같다.

 

취약점은 remove_item 함수에서 발생한다.

맨 마지막 itemremove할 때의 구문인데, free하고 난 후 next_itme_ptr을 지정해주지 않는다.

 

이 때문에 free를 해도 next_item_ptritem_chunk에 남아있게 되고, 이를 통해 arbitrary free를 일으킬 수 있다.

 

왜냐하면 이 바이너리는 위와 같이 idx를 통해 chunk의 존재 여부를 따지는 것이 아니라 next_item_ptr을 참조하여 chunk의 존재 여부를 따지기 때문이다.

즉, add_name 함수로 chunk에 임의의 data를 쓸 수 있다.

 

또, view_order 함수에서 fsb가 발생한다.

 

마지막으로 option 중에서 Peppercorn Mushroom Melt의 길이는 0x18이다. 즉 이 옵션을 추가하면 view_order 함수로 next_item_ptrleak할 수 있다.

 

즉, next_item_ptrmain_chunk의 주소로 바꿔 name_ptrsetbuf_got로 바꾸면 libcleak할 수 있다.

그리고 이를 이용하여 chunkoption_name이 아닌 format string을 집어 넣으면 fsb를 이용할 수 있다.

stack에 온전한 주소를 넣기 힘드므로, 존재하는 stack 주소를 이용하여 double stage fsb를 해주면 된다.

 


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

root-me mips stack buffer overflow  (0) 2019.08.12
2019 securinet baby_two  (0) 2019.03.25
2019 besidesSF slowfire  (0) 2019.03.16
2019 besidesSF genius  (0) 2019.03.16
2019 besidesSF straw-clutcher  (0) 2019.03.15