본문 바로가기

system/writeup

2019 besidesSF straw-clutcher

straw_clutcher

2019 besidesSF straw_clutcher

이건 미친문제다.

바이너리 길이가 약 1000줄에 달하는 문제이다..

분석이 가장 힘들었고, 익스는 쉬웠다.

바이너리 길이가 너무 길다보니 취약점을 찾기가 매우 힘들었던 것 같다.

 

이 바이너리는 다음과 같은 기능을 한다.

 

취약점은 rename 해주는 곳에서 발생한다.

RENAME 명령어로 들어온 두 인자, old_namenew_name의 길이를 검사하는데 new_name의 길이 검사를 strlen(old_name)의 길이로 검사 한다.

이는 *FILE CHUNK에 복사되며 heap overflow를 일으킨다.

 

여기서 FILE CHUNK를 살펴보자.

이런 식으로 구성되어있다.

 

heap overflow를 일으킨다면 data_len을 덮을 수 있을 것이고, 이를 통해 bunch of data를 출력시킬 수 있다.

즉, unsortedbin을 통해 libcdata의 주소를 통해 heapleak할 수 있다.

 

이를 통해 dfb도 트리거할 수 있다.

DATA CHUNKfree시킨 후, FILE CHUNKfree시킨다.

즉, DATA CHUNK의 주소를 바꾸면 DFB가 가능하다.

하지만 이를 통해 바로 __malloc_hook을 덮을 수는 없다.

RENAME에서 특수 문자 입력이 불가능하기 때문이다.

때문에 마지막 1바이트를 alphanumeric 주소인 것으로 바꿔주고 dfb를 트리거하면 된다.

 


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

2019 besidesSF slowfire  (0) 2019.03.16
2019 besidesSF genius  (0) 2019.03.16
2019 aeroctf remote_storage  (0) 2019.03.14
2016 seccon jmper  (0) 2019.03.13
pwnable.tw de-aslr  (0) 2019.03.11