SH1R0_HACKER

009. Buffer Overflow in C++ (2) 본문

System/System Exploitation

009. Buffer Overflow in C++ (2)

SH1R0_HACKER 2021. 2. 9. 14:35

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