dreamhack: Memory Corruption – C (Ⅰ)

133210·2021년 7월 21일
0

2020 시스템

목록 보기
4/25
post-thumbnail

1. 버퍼 오버플로우

버퍼가 허용할 수 있는 양의 데이터보다 더 많은 값이 저장되어 버퍼가 넘치는 취약점

1) 버퍼: 지정된 크기의 메모리 공간
2) 스택 버퍼 오버플로우, 힙 오버플로우와 같이 나뉨
3) 스택 버퍼 오버플로우: 가장 초기에 연구되었던 형태의 버퍼 오버플로우. 지역 변수가 할당되는 스택 메모리에서 오버플로우가 발생하는 경우
4) Undefined Behavior: 정의되어 있지 않은 동작, 런타임 중에 어떤 현상이 발생할 지 예측할 수 없다는 뜻
5) Segmentation Fault: 접근 권한이 없는 메모리 영억을 읽거나 쓰려고 할 때 발생하는 예외

get 함수로 buf를 받아오는 프로그램에서 ret 영역을 0x41414141로 만들기
-> 0x41414141은 AAAA이므로 A 계속 입력해주기

프로그램 동작을 결정하는 auth값을 0이 아닌 값으로 만들면 되므로
temp 뒤에 있는 auth까지 값이 전달되도록 A를 입력해 줌

win값까지 영향을 미치도록 size를 32로 설정해주고 win값을 ABCD로 받도록 해서 출력이 되도록 만듦

A를 31바이트만큼 입력하더라도 “Your Input is: "라는 문자열이 추가되기 때문에
총 길이가 32바이트를 넘겨 버퍼 오버플로우

2. Out-of-boundary

버퍼의 길이 범위를 벗어나는 인덱스에 접근할 때 발생하는 취약점

11 입력시 buf[11]이 되어 buf 영역 밖에 있는 win 값에 접근 가능.
value를 31337로 입력하면 올바르게 출력되는 모습 확인 가능
음수 값을 사용할 수 있으므로 -1을 입력하면 win값의 위치로 이동.
value값을 31337로 입력하면 올바르게 출력되는 것을 확인 가능
음수 값을 양수 값으로 변경하는 조건을 추가함.
그러나 int의 범위는 –2,147,483,648~2,147,483,647이므로 -2,147,483,648은 양수로 변경하지 못함.

3. Off-by-one

경계 검사에서 하나의 오차가 있을 때 발생하는 취약점

copy_buf 함수에서 i<=sz라는 조건을 사용. 반복문이 sz+1번 반복됨.
sz+1번 데이터가 복사되기 때문에 취약점이 발생함.

0개의 댓글