Partial RELRO → GOT Overwrite 가능
1. keep secret : calloc
# small secret → fastChunk
buf = calloc(1, 0x28);
read(0, buf, 0x28);
# big secret → largeChunk
qword_6020c0 = calloc(1, 0xfa0);
read(0, qword_6020c0, 0xfa0);
# hug secret → largeChunk
qword_6020c8 = calloc(1, 0x61a80);
read(0, qword_6020c8, 0x61a80);
전역변수인 buf, qword_6020c0, qword_6020c8 에 할당된 heap 주소 저장
→ 할당한 메모리를 전역변수에서 관리하므로 UAF 사용 X
small secret 1
small secret 2
free small secret 1
big secret 1
free small secret 1
2. wipe secret : free
# wipe small secret
free(buf)
# wipe big secret
free(qword_6020c0)
* 취약점 발생 *
메모리 해제 시 전역변수 초기화 X
(다시 할당 시 이전에 사용하던 값 사용 가능)
free 했는지 여부 체크 X → DFB 가능
3. renew secret → edit
# small secret
read(0, buf, 0x28);
# big secret
read(0, qword_6020c0, 0xfa0);
할당받은 size 만큼만 수정 가능 → heap overflow 불가능
#process
fastChunk 2개를 malloc해서 3번째 할당하는 largeChunk와 인접하지 않도록 만든다.
free된 1번째 fastChunk가 largeChunk와 인접하지 않은 경우 smallbin으로 fastChunk가 들어간다.
한번 더 free하는 경우 fastbin에 들어가서 fastbin과 smallbin에 첫 번째 해제한 청크 주소가 적힌다.
그리고 fastChunk 2개를 할당하면 처음엔 fastbin에서, 두 번째에는 smallbin에서 할당해준다.
1. small secret malloc(fastChunk)
2. big secret malloc(largeChunk)
3. small secret free → fastChunk가 fastbin으로 들어간다.
- fastbin 할당과 해제 시 prev_inuse 비트 변화 X (prev_inuse = 1)
4. hug secret malloc(largeChunk)
5. small secret free → hug secret 할당하고 small secret 해제 시 small secret은 smallbin에 들어간다.
- smallbin 상태에서는 prev_inuse 비트 값 변한다.
6. small secret free → DFB 발생
- smallbin 상태에서 free 시 prev_inuse 비트 값이 0으로 변한다.
=> prev_inuse 비트 값이 0이므로 unsafe unlink 공격 사용 가능
7. 첫 번째 chunk에 fakeChunk 저장
prev_size(0)
size(0)
&전역변수 - 0x18
&전역변수 - 0x10
그 후 big secret free 시
공격 대상 주소가 small_secret인 0x6020d0일 경우, unsafe unlink 후 메모리는 small_secret – 0x18 주소(0x6020b8)에 할당된다. 전역변수로 흐름을 컨트롤 가능
8. Leak libc addr
small secret 할당 시 free_got를 씀 →renew 로 puts plt 줘서 free의 got에 puts 함수 주소 적음
buf에 atoi plt 줌
small secret free → puts(atoi plt) 가 되서 atoi addr를 leak 할 수 있다.
free를 system 함수 주소로 덮고 (read해서..)
big secret으로 “/bin/sh”를 전달하고 wipesecret(2)를 하면 system(“/bin/sh”)가 실행되서 쉘이 실행된다.
#exploit code
[HITCON-Training] lab14 : magicheap (0) | 2020.01.12 |
---|---|
[Insomni'hack 2017] Wheel of Robots (0) | 2020.01.10 |
[HITCON-Training] craxme (0) | 2020.01.02 |
[HITCON-Training] crack (0) | 2020.01.02 |
[Codegate2018] BaskinRobins31 (0) | 2020.01.01 |