Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

제큐리티

버퍼 오버플로우 본문

모해/웹고트

버퍼 오버플로우

제큐리티 2022. 12. 11. 22:51

버퍼 오버플로우

- 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리 범위를 넘어선 위치에 자료를 읽거나 쓸 때 발생

(오작동 또는 악의적 코드 실행 가능)

종류 설명
스택 버퍼 오버플로우 - 스택(함수 처리를 위해 지역 및 매개변수 위치하는 메모리 영역)에 할당된 버퍼 한계치를 넘는 경우
복귀 주소를 변경하여 공격자가 임의의 코드 수행
- 주로 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가 어디에서 머무는지 알 수 있니?

인터넷에 접근하려면, 다음 정보를 우리에게 제공해라.

이름과 성이 호텔 등록 시스템에 표시된 대로 정확히 입력했는지 확인해라.

임의로 적은 후 제출
사용시간에 따른 요금이 나타남
Burp Suite를 통해 값이 평문으로 넘어가는 것을 확인

얼만큼 큰 값을 주어야 버퍼 오버플로우가 발생되는지 감이 안 오기 때문에 소스코드를 참고했다.

if(param3.length() > 4096)이라는 조건이 붙은걸 보니 방 번호가 4096보다 크면 될 것 같다.

파이썬을 활용해 1을 4097개 저장한 텍스트 파일 생성
Forward 전 방번호에 삽입

사용시간에 따른 요금을 선택 후 넘어가면 레슨을 재시작 후 VIP의 이름으로 접근하라고 한다.

VIP의 이름이 보이지 않기 때문에 hidden으로 어딘가에 숨겨져 있을 것이다.

Burp suite를 통해 레슨을 재시작 후 모든 요청에 대해 intercept on을 하였다.

사용시간에 따른 요금 request 후 받은 Response

이 중 아무 것이나 선택해서 첫번째 페이지의 필드를 채워주면 문제가 해결된다.

'모해 > 웹고트' 카테고리의 다른 글

HTML에서 단서 찾기  (0) 2022.12.13
접근제어  (0) 2022.11.27
웹고트 설치  (0) 2022.11.27
Comments