Security_lab

gdb를 통한 heap buffer overflow

부산대보금자리 2021. 7. 27. 18:38

힙은 프로그램을 실행할 때 동적으로 할당한 메모리 공간이다. 

malloc계열의 HeapAlloc, HeapFree, Malloc, free, new, delete 등 함수로 제어하며, BSS라고도 한다.

힙은 스택과 반대로 메모리의 하위 주소에서 상위 주소로 영역이 커진다.

사용할 예제는 buf두개를 heap에 할당하고 buf1과 buf2의 차이를 구해서 넘게 버퍼를 사용 했을때 오버 플로우가 일어나는 상황을 보는 것이다.

heap01.c이다

이는 조금 더 gdb로 분석하기 쉽게 define을 값으로 바꾸고 printf 같은 부분을 삭제하였다.

다음과 같이 컴파일한다.

실행 시의 결과는 다음과 같다. 

memset(buf1, 'B', (u_int)(address_diff+OVERSIZE))부분에서 buf2의 A부분이 B로 바뀌어진다. 

이 처럼 힙에서 메모리 값 하나가 다른 메모리 값으로 바뀌는 오류를 이용해서 관리자 권한을 획득하는 것이 힙 버퍼 오버플로우 공격이다.

이제 gdb로 heap02를 보자. 

main을 disassemble 한 결과이다.

main에 break를 설정하고 실행하니 u_long address_diff다음에서 멈추었다.

buf1을 찍어보니 0000으로 초기화가 되어 있다. 

buf2 또한 같다. 

address_diff는 32 buf1, buf2의 주소 값 차이로써 2가 나는 것을 볼 수 있다. 

따라서 이러한 구조를 가지게 된다. 

따라서 이후의 buf2 공간을 보면 B로 덮어 씌어져 있는 것을 확인할 수 있다.

'Security_lab' 카테고리의 다른 글

포맷 스트링 공격  (0) 2021.07.29
버퍼 오버플로 공격 대응책  (0) 2021.07.28
gdb를 통한 Stack buffer overflow  (0) 2021.07.27
레이스 컨디션 실습  (0) 2021.07.25
John the ripper,johnny 와 Hash  (0) 2021.07.23