heap ( 힙 )

- 컴퓨터의 기억 장소에서 그 일부분이 프로그램들에 할당되었다가 회수되는 작용이 되풀이 되는 영역이다 
- 보통 포인터를 통해 동적으로 할당 받고 돌려준다 
- 프로그램 실행시 크기가 결정된다 
- 낮은 주소에서 높은 주소로 할당된다 
- 리스트, 트리, 그래프 등의 동적인 자료구조에 꼭 필요하다 

Heap Buffer Overflow란
: heap 데이터 영역에서 일어나는 buffer overflow를 heap overflow라 부르며 stack에서와 같이 RET 변조는 불가하고 동적 메모리 할당 연결을 덮어씀으로써 프로그램 함수 포인터를 조작한다

Heap Buffer Overflow 순서

1. root 계정에서 취약한 함수를 사용한 파일 작성

2. 일반 계정에서 변수 사이의 거리를 확인

3. 공격 코드 작성

 

1. root 계정에서 취약한 함수를 사용한 파일 작성

 

- root 계정에서 취약한 함수가 사용되어진 파일을 작성해준다 /tmp/heap.c

 

- 컴파일을 해준 후 setuid 비트를 걸어준다

 

2. 일반 계정에서 변수 사이의 거리를 확인

 

- root가 만들어 놓은 취약한 프로그램을 같은 글자수로 복사

- gdb를 통해 복사한 파일을 열어주고 intel문법으로 변환 시켜준다

 

- 첫 번째 변수의 주소는 ebp-4에 닮기고 두 번째 변수의 주소는 ebp-8에 닮기는걸 확인할  수 있다

 

- ebp-4와 ebp-8의 주소 값을 구하고 큰 수에서 작은 수를 빼면 변수 사이의 거리가 나온다

- 뺏을때 68이란 숫자가 나오는데 이것은 16진수이기 때문에 10진수로 변환하면 104이다

 

3. 공격 코드 작성

 

- 공격코드: . /heap `perl -e 'print "A"x104, "/bin/sh"'`

 

- 공격 코드를 넣으면 변수 사이의 거리만큼 A로 채워진다

- 그 후 두 번째 변수의 시작 부분에 /bin/sh 문자열이 채워져 비교문에 통과하게된다

- system 함수의 의해 쉘이 실행되고 root의 권한인걸 확인할 수 있다

'시스템 해킹' 카테고리의 다른 글

Format String Bug  (1) 2020.11.11
PLT & GOT Overwrite  (0) 2020.11.10
CANARY  (0) 2020.11.10
ASCII Armor  (0) 2020.11.10
ASLR ( Address Space Layout Randomization )  (0) 2020.11.10

+ Recent posts