본문 바로가기

system/material

main_arena와 unsorted bin attack

main_arena

ubuntu 16.04 LTS glibc 2.23 기준

unsortedbin에서의 main_arena 동작을 살펴 본다.

 

테스트 코드는 위 코드를 사용하였다.

( gcc -o test test.c -m64 )

 

free 세 개에 각각 breakpoint를 걸고 main_arena를 살펴보겠다.

 

free(a)

free(a)를 실행하기 전 main_arena+88이다. top chunk의 주소가 들어가 있다.

 

free(a)를 실행한 후 main_arena+88이다.

0x602000fdbk에는 main_arena+88의 주소가 들어가 있으며

main_arena+88 + 0x10 = 0x602000

main_arena+88 + 0x18 = 0x602000

으로 main_arena가 셋팅되었다.

 

free(b)

main_arena+88 + 0x10과 main_arena+88 + 0x18에 동일한 값이 들어 있으며 해당 값의 0x18을 더한게(bk) main+arena+88의 주소라면 unsortedbin chain을 구성한다.

 

glibc 2.26 malloc.c #3930 ~ #3936

위 코드에 의해 무결성 검증이 진행된다. (glibc 2.23과 동작 같음)

(unsorted_chunks (av) 매크로는 unsortedbin의 top chunk의 주소를 가져오는 매크로이다.)

 

무결성이 검증되면 위와 같이 체인이 구성된다.

 

free(c)

위와 같이 처음과 끝, 두 개의 주소로 unsortedbin을 구성한다.

 

추가적으로, unsortedbinmalloc할 시

 

glibc 2.26 malloc.c #3766 ~ #3768

위 코드가 실행되는데, 이 코드를 이용하여 unsortedbin attack을 진행할 수 있다.

bckvictim->bk를 가지고 있다.

여기서 만약 bck의 값을 바꿀 수 있다면 (arbitray value)->fdunsorted_chunks (av)의 값을 쓸 수 있다는 것이 된다.


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

docker 간단한 사용법 정리  (0) 2019.08.25
19회 해킹캠프 발표자료 (tcache 동작 분석 및 exploit)  (0) 2019.02.19
2019 codegate preliminary 풀이 보고서  (0) 2019.02.01
dynamic, static, pie..  (0) 2019.01.24
c++ std::string  (0) 2019.01.22