본문 바로가기
HACKING/SYSTEM

Buffer Overflow 취약점 (BOF) _ memory leak

by pharmerci 2021. 9. 24.
728x90

버퍼 오버플로우 취약점은 버퍼 값을 넘어서 다른 메모리까지 덮어버리는 취약점이다.

gets, scanf, strcpy같은 길이를 확인하지 않고 메모리에 값을 쓰는 함수로 인해서 memory corruption이 발생한다.

 

사진과 같은 상황이 오버플로우가 발생한 상황이다.

 

BOF 취약점으로 인해서 메모리 누수가 생길 수 있다.

C언어에서 문자열은 널바이트로 끝을 내기 때문에 표준 문자열을 출력하는 함수들은 널바이트를 문자열의 끝으로 인식한다.

그런데 버퍼오버플로우로 인해서 버퍼에 널바이트가 없어지게 되면 뒷쪽의 정보가 공개된다.


memory leak 문제점 실습

 

 

먼저 이런 코드를 짠다.

플래그는 secret이라는 배열에 들어있고 이름 배열에 20개를 할당했다.

하지만 이름을 쓸 때에는 13자만 받아들이고

읽어들일때에는 40개의 문자를 읽는다. 그리고 이 이름을 포함한 문자열을 출력한다.

40개를 읽게 되니까 이름을 20자 입력하고 그러면 오버플로우가 발생해서 뒤에있는 플래그까지 같이 출력되는데,,

 

일단 한번 보자!

 

 

 

 

 

메인함수를 뜯어보았는데 main+129에서 읽어들이는 것을 발견할 수 있다.

 

 

 

 

 

브레이크를 그 부분에 걸고 실행을 해보니 guessed arguments에서 arg[1]에 주소값이 지정되어있다.

저것은 아마두 읽어들인 문자를 저장하는 곳일 것 같다.

 

 

 

 

 

이쪽의 내용물을 확인해보니 싹 비어있다. 아직 문자를 따로 넣지 않았기 때문이다. 하지만 여기에 문자를 입력하게 되면 우리가 넣은 문자열은 물론 플래그에 있는 값도 들어갈 것이다.

 

 

 

 

 

 

A를 무작정 많이 쓰면 플래그가 보이다가 만다. 왜냐하면 40개만 쓰기로 했기 때문에!! 그래서 쓸 때에는 최대 19개까지 이름을 입력해주면 정확한 flag를 얻을 수 있다.

마지막에 실행한 곳에서는 A를 20개 입력했더니 flag에서 F가 빠져있다.ㅎㅎ

728x90