본문 바로가기

system/writeup

2017 rctf aircraft

aircraft

2017 rctf aircraft

취약점은 쉽지만 익스플로잇이 너무 길다..

중간중간에 짜다가 까먹어서 머리가 터질뻔했다. 이런 힙문제는 노트에 적어가면서 해야하나..

 

이 바이너리에서 내가 찾은 취약점은 총 세개이다.

 

  1. uaf
  2. fastbin dup
  3. out of bound

 

처음에 oob로 풀려고 했는데 free후 next chunk에 생기는 prev size에 접근할 때 세폴이 떠서 이 방법으로는 익스를 못했다..

 

UAF

위 구문에 의해서 UAF를 다룰 수 있다.

어떤 airport로 옮겨갔는지 출력해준다. plain chunk size는 0x48이므로 이를 free한 후 airport를 0x48만큼 할당하여 free_func(pie)를 leak할 수 있다.

 

동일한 방법으로 heap도 leak이 가능하다.

 

FASTBIN DUP

다른 airport로 옮겨갈시 airport_list + 8*i + 8에 plain의 주소를 넣는다.

 

plain chunk를 free할 시 plain_chunk_list를 앞당겨주고 자신의 주소를 삭제한다. (unlink 비슷)

 

그리고 나서 함수포인터를 이용하여 free를 진행한다.

 

여기서 plain_chunk의 주소는 plain_chunk_list에서 사라졌다. 하지만 다른 airport에 속해있는 상태라면 airport_listplain_chunk의 주소가 남아있을 것이다.

 

속해있는 모든 plain_chunkairport_list를 free시킨다. 즉 double free가 발생한다.

 

libc의 주소는 fastbin dup을 이용하여 airport를 heap쪽으로 할당받은 후 company 부분을 bss에 존재하는 stdout, stdin, stderr 의 주소로 바꿔주면 leak할 수 있다.

 

최종적으로 함수 포인터 부분에 oneshot가젯을 넣고 쉘을 트리거했다.


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

2014 hitcon sktof  (0) 2019.02.01
pwnable.kr crypto1  (0) 2019.02.01
2019 codegate aeiou  (0) 2019.01.29
2017 rctf rnote  (0) 2019.01.28
2019 insomnihack onewrite  (0) 2019.01.27