상세 컨텐츠

본문 제목

[HITCON-Training] lab14 : magicheap

SYSTEM HACKING/CTF, etc

by koharin 2020. 1. 12. 17:37

본문

728x90
반응형

Unsorted Bin Attack 문제이다.

 

# 보호기법 확인

 

 

# pseudo code

 

 

flag를 출력해주는 함수는 l33t() 함수인데, 이 함수를 호출하는 조건은 위와 같다.

메뉴를 입력받는 변수 값이 4869이어야 하는데, magic 이라는 bss 섹션에 존재하는 전역변수 값이 0x1305보다 커야한다.

0x1305는 10진수로 4869이다.

 

 

그렇다면 unsorted bin attack 기법을 사용해서 조건 만족시킨 후 &magic-0x10을 bk에 넣으면, malloc() 호출 시 할당해주는 주소가 magic 위치가 된다. 

따라서 다음 malloc 시 0x1305보다 큰 값을 주면 if문 조건을 만족하고, 메뉴 입력 시 4869를 주면 l33t() 함수를 호출할 수 있다.

 

이제 unsorted bin attack을 위한 조건을 만들어야 한다.

 

# process

 

1. heap 3개 할당

- 2개만 사용하지만 3개를 할당하는 이유는 1번째 청크 해제 시 topChunk와 병합되지 않도록 하기 위해서이다.

2. 중간 청크 해제 (1번 청크 해제)

- 1번 청크를 해제하는 이유는 해제 후 fakechunk를 만들어서 bk에 특정 값, 즉 &magic-0x10을 적기 위해서이다.

freeChunk 시 fd와 bk가 있으므로 해제하는 것.

3. edit 0번 청크

- 0번 청크의 user data 영역은 다 dummy로 채운다.

- freeChunk 에 fakeChunk를 만든다.

prev_size(0) , size(0x91 : 헤더 사이즈+청크사이즈), fd(0), bk(&magic-0x10)

 

다음 청크 주소가 &magic-0x10이다.

따라서 새로운 청크를 생성할 경우 &magic-0x10에서부터 헤더 0x10을 만들고, &magic에 user data영역을 생성해서 청크를 만든다.

따라서 이 새로 만든 청크에 데이터를 입력할 때 magic에 값을 쓸 수 있는 것이다.

4. 새로운 청크 생성

- 0x1305보다 큰 값을 준다. (if문 조건)

5. 메뉴 입력 시 4869를 준다.

 

# exploit code

 

 

# exploit

 

 

디버깅으로 해야 flag가 따졌다.

 

728x90
반응형

'SYSTEM HACKING > CTF, etc' 카테고리의 다른 글

[TUCTF 2018] Ehh  (0) 2020.01.29
[Def Camp 2016] Warm Heap  (0) 2020.01.22
[Insomni'hack 2017] Wheel of Robots  (0) 2020.01.10
[HITCON 2016] SleepyHolder  (0) 2020.01.08
[HITCON-Training] craxme  (0) 2020.01.02

관련글 더보기