제큐리티
버퍼 오버플로우 본문
버퍼 오버플로우
- 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리 범위를 넘어선 위치에 자료를 읽거나 쓸 때 발생
(오작동 또는 악의적 코드 실행 가능)
종류 | 설명 |
스택 버퍼 오버플로우 | - 스택(함수 처리를 위해 지역 및 매개변수 위치하는 메모리 영역)에 할당된 버퍼 한계치를 넘는 경우 복귀 주소를 변경하여 공격자가 임의의 코드 수행 - 주로 SetID(루트 권한으로 실행되는) 프로그램들이 타겟 - 입력값에 수용 가능한 버퍼보다 큰 값을 입력하여 임의의 공격 코드를 루트 권한으로 실행 |
힙 버퍼 오버플로우 | - 힙(malloc()등 메모리 할당 함수로 사용자가 동적으로 할당하는 메모리 영역)에 사이즈를 초과하는 문자열들이 힙의 버퍼에 할당될 시 공격자가 데이터 변경 및 함수 주소 변경으로 임의 코드 수행 |
스택 버퍼 오버플로우
char형 배열 선언 일반적인 할당 12크기를 넘어서는 인자 할당 시 모습
- 12 문자보다 작다면 정상 동작하지만 그보다 큰 인자들은 세번째그림과 같이 스택을 오염시킴
(안전한 문자의 수는 버퍼의 크기보다 하나 작아야함)
- 반환 주소가 오염되었기 때문에 함수가 반환될 때 실행시킨 함수의 반환 주소로 돌아가지 않고
변환된 주소로 점프한다(즉, 반환된 주소에서부터 명령어를 실행)
용어 | 설명 |
Stack Frame | 모든 함수가 호출될 때 해당되는 자신만의 스택 공간 |
SFP (Stack Frame Pointer) |
이전 함수의 스택 프레임 포인터 저장하는 영역 스택 포인터의 기준점 |
SP (Stack Pointer) |
SFP를 기준점으로 상대주소(offset)을 저장하여 메모리 접근 |
RET (Return Address) |
이전 함수의 다음 실행 명령어 주소 저장하는 영역 |
EBP Register | 현재 실행중인 함수의 SFP 저장 |
ESP Register | SP 저장 |
EIP Register | RET 저장 |
-즉, 공격자는 SFP영역까지 값을 넘치게 덮어 쓴 후, RET 영역까지 도달, RET 영역의 주소를 악성 코드의
주소로 변경하여 실행되도록 유도
해석
OWASP 호텔에 환영한다! VIP가 어디에서 머무는지 알 수 있니?
인터넷에 접근하려면, 다음 정보를 우리에게 제공해라.
이름과 성이 호텔 등록 시스템에 표시된 대로 정확히 입력했는지 확인해라.
얼만큼 큰 값을 주어야 버퍼 오버플로우가 발생되는지 감이 안 오기 때문에 소스코드를 참고했다.
if(param3.length() > 4096)이라는 조건이 붙은걸 보니 방 번호가 4096보다 크면 될 것 같다.
사용시간에 따른 요금을 선택 후 넘어가면 레슨을 재시작 후 VIP의 이름으로 접근하라고 한다.
VIP의 이름이 보이지 않기 때문에 hidden으로 어딘가에 숨겨져 있을 것이다.
Burp suite를 통해 레슨을 재시작 후 모든 요청에 대해 intercept on을 하였다.
이 중 아무 것이나 선택해서 첫번째 페이지의 필드를 채워주면 문제가 해결된다.
'모해 > 웹고트' 카테고리의 다른 글
HTML에서 단서 찾기 (0) | 2022.12.13 |
---|---|
접근제어 (0) | 2022.11.27 |
웹고트 설치 (0) | 2022.11.27 |