해킹 공부/시스템 해킹

DreamHack stage 9_Memory Corruption: Out of Bounds

O'bin 2022. 7. 25. 13:42

배열은

같은 자료형의 요소(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