배열은
같은 자료형의 요소(Element)들로 이루어짐
각 요소의 위치 = 인덱스(Index)
배열의 임의 인덱스에 접근할 수 있는 Out of Bounds (OOB) 가 취약점
OOB
요소를 참조할 때, 인덱스 값이 음수이거나 배열의 길이를 벗어날 때 발생
인덱스 범위 검사 명시적으로 프로그래밍하지 않으면,
프로세스는 계산한 주소가 배열의 범위 안에 있는지 검사하지 않음
만약 사용자가 배열 참조에 사용되는 인덱스를 임의 값으로 설정할 수 있다면,
배열의 주소로부터 특정 오프셋에 있는 메모리의 값을 참조할 수 있음
임의 주소 읽기
OOB로 임의 주소의 값을 읽으려면,
읽으려는 변수와 배열의 오프셋 알아야 함
배열, 변수가 같은 세그먼트에 할당됨 -> 둘 사이의 오프셋은 항상 일정(디버깅 통해 파악)
같은 세그먼트 할당 아님 -> 다른 취약점을 통해 두 변수의 주소를 구하고 차이를 계산
임의 주소 쓰기
OOB를 이용하면 임의 주소에 값을 쓰는 것도 가능
배열을 구성하는 Student 구조체의 크기가 24바이트
=> 10번째 인덱스를 참조 시 isAdmin을 조작 가능
실수로 인덱스를 검사하는 코드를 생략시 추후 발견 어려움
코드 작성 시 인덱스 값이 음수인지, 배열의 길이를 넘어서지는 않는지 검사하는 코드 넣는 습관 필요
'해킹 공부 > 시스템 해킹' 카테고리의 다른 글
DreamHack Stage 13_type Error (0) | 2022.08.01 |
---|---|
DreamHack_System hacking stage 4 (0) | 2022.07.11 |
DreamHack_System hacking stage1 (0) | 2022.07.06 |
[해커스쿨 LOB] level11_skeleton (0) | 2022.05.15 |
[해커스쿨 LOB] level 6_wolfman (0) | 2022.04.07 |