Memory Corruption : Out of Bounds

곽무경·2022년 7월 9일
0

System Hacking

목록 보기
20/27

배열의 요소를 참조할 때, 인덱스 값이 음수이거나 배열의 길이를 벗어날 때 발생
프로세스는 계산한 주소가 배열의 범위 안에 있는지 검사하지 않는다.

배열은 연속된 메모리 공간을 점유하며, 공간의 크기는 개수*자료형 크기
array[n] : n개의 요소를 가지는 배열
sizeof(array) = sizeof(element)*n
&array[k] = array + sizeof(element)*k

임의 주소 읽기

docssecret_code 모두 스택에 할당되어 있으므로, docs에 대한 OOB를 이용하면
secret code의 값을 쉽게 읽을 수 있다.

read_secret 함수가 실행된 후, 전역 배열 secret에 secret.txt의 내용이 들어갔다.
포인터 변수 secret_code가 지역변수로 선언되어 있으므로, 스택에 포함되어 있다.
docs 바로 위에 적재되어 있음 → -1번째 인덱스를 출력하면 secret의 내용이 출력된다.

임의 주소 쓰기

24바이트짜리 구조체 Student 10개를 포함하는 배열 stu → 크기는 240bytes

전역변수 isAdmin과의 주소 차이가 240바이트이므로,
10번째 인덱스를 참조하면 isAdmin을 조작할 수 있다.

0개의 댓글