본문 바로가기

system/writeup

2016 belluminar remuheap

remuheap

2016 belluminar remuheap

512 ~ 4096 사이즈로 malloc이 가능하다.

 

ubuntu 16.04 LTS의 fgets, scanf 등은 입력 시 heap에 allocate를 한다. ( free하지 않고 계속해서 재사용함. )

때문에 이를 이용하여 위 chunk에서 UAF를 발생시킬 수 있다.

 

unsorted bin에서 UAF가 일어나고 free할 수 있으면 unsorted bin attack이 가능하다.

 

unsorted binbk를 덮고자 하는 주소 - 0x10으로 설정해 주면 unsorted binunlinking 과정을 통해 덮고자 하는 주소에 &main_arena.top의 주소가 들어가게 된다.

 

그 후, 덮은 변수를 통하여 main_arena.top~를 변경할 수 있다.

 

unsorted binhead chunktail chunk를 적절한 값으로 바꿔 보호 기법을 우회하고 bin 내에 임의의 chain을 구성할 수 있다. (head chunk만 바꿔도 보호 기법은 우회 된다.)

 

그렇게 unsorted binfake chunk가 존재하게 만든 후 code 전역 변수를 변경하여 임의의 사이즈를 맞춘 후 할당하면 person_info 전역 변수를 통하여 got overwrite가 가능하다.

 

atoi의 got를 printf로 바꿔 format string leakatoi의 got를 system으로 바꿔 쉘을 따면 된다.

( 입력 버퍼가 초기화 되지 않아 중간중간에 버퍼를 빼줫다. )

 

fgets의 heap 할당을 이용한 exploit과 unsorted bin attack을 처음 해봐서 배운게 정말 많았던 문제이다.


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

pwnable.tw seethefile  (0) 2019.02.06
2015 rctf welpwn  (0) 2019.02.06
2014 31c3 mynx  (0) 2019.02.04
nullcon hackim 2019 easy-shell  (0) 2019.02.03
nullcon hackim 2019 tudutudututu  (0) 2019.02.03