SH1R0_HACKER
006. 초기화되지 않은 메모리 본문
변수를 선언하거나 인스턴스를 생성할 때,
프로그래머가 의도한 경우를 제외하고는 반드시 초기화해야 합니다.
메모리를 초기화하지 않는다면 쓰레기 값이 들어가고 이것이 문제를 발생시킬 수 있습니다.
위 예제는 이름의 길이를 입력받고 그 길이가 100 미만이면 메모리를 동적할당합니다.
read 함수는 name_len 데이터 길이만큼 p.name에 저장할 수 있습니다.
여기서 초기화되지 않은 값의 사용으로 인해 문제가 발생합니다.
1. read함수는 입력받을 때 널 바이트와 같은 별도의 구분자를 붙이지 않습니다.
따라서 name에 할당된 메모리를 초기화하지 않으면 다른 메모리가 출력될 수 있습니다.
2. name_len 변수의 값이 100 이상이거나 같을 경우에 p.name 값은 쓰레기값이 됩니다.
만약 이 값을 조작한다면 read함수를 통해 데이터를 입력받을 때
메모리 주소에 원하는 값을 쓸 수 있습니다.
'System > System Exploitation' 카테고리의 다른 글
008. Buffer Overflow in C++ (1) (0) | 2021.02.09 |
---|---|
007. Integer issues (0) | 2021.02.07 |
005. Double Free & Use After Free (0) | 2021.02.07 |
004. Format String Bug (0) | 2021.02.07 |
003. Off-by-one (0) | 2021.02.03 |