SH1R0_HACKER
009. Buffer Overflow in C++ (2) 본문
C++에서도 C와 마찬가지로 변수를 사용할 때 초기화하지 않으면
쓰레기값이 출력되기 때문에 취약점으로 이어질 수 있습니다.
비주얼 스튜디오에서 컴파일을 시도하면 오류 메시지가 출력됩니다.
C++에서 초기화되지 않은 변수로 인한 문제가 가장 많이 발생하는 부분은 생성자입니다.
위 예제에서 클래스 S는 함수 f에서 인자로 전달된 i와 c를 더한 후 그 값을 리턴합니다.
생성자가 없기 때문에 디폴트 생성자가 생성되고 멤버 변수를 별도로 초기화 하지 않습니다.
따라서 멤버변수 c에는 스택 메모리에 있는 잔여값이 저장되고, s.f(10)이 호출될 때 참조됩니다.
이 결과로 인해 메모리 유출로 이어집니다.
다음 예제입니다.
S의 생성자는 mem_size가 인자로 전달되면 그 값만큼 메모리를 할당합니다.
하지만 mem_size값에 음수를 전달하면 mem은 초기화가 이루어지지 않으므로
스택 잔여 메모리가 쓰여집니다.
이후 mem 포인터를 참조하는 연산이 있고 공격자가 스택 값을 조작할 수 있다면
이는 임의 주소 쓰기 취약점으로 이어질 수 있습니다.
'System > System Exploitation' 카테고리의 다른 글
009. Buffer Overflow in C++ (4) (0) | 2021.02.13 |
---|---|
009. Buffer Overflow in C++ (3) (0) | 2021.02.13 |
008. Buffer Overflow in C++ (1) (0) | 2021.02.09 |
007. Integer issues (0) | 2021.02.07 |
006. 초기화되지 않은 메모리 (0) | 2021.02.07 |