선릉역 1번 출구

[adventofcyber2023] - Day_6_Memory corruption Memories of Christmas Past 본문

Project/Program

[adventofcyber2023] - Day_6_Memory corruption Memories of Christmas Past

choideu 2023. 12. 9. 11:47

Story: 코드가 표준에 부합하는지 확인하기 위해 남극의 일부 Frostings는 B팀의 지원을 받아 메모리 손상 취약성에 대해 빠른 교육 세션을 받게 됨

 

목표: 특정 언어가 어떻게 메모리를 안전하게 처리하지 못하는 지 이해하기, 변수가 인접한 메모리로 overflow되는 것 이해하기, buffer overflow를 통해 액세스해서는 안 되는 메모리를 직접 변경해보기

 

1. Memory corruption

- 프로그램을 실행할 때 모든 프로그램은 RAM으로 올라감 

- 메모리에 저장된 각 변수는 개발자가 의도한 대로 특정 방식으로만 조작이 가능하나, 특정 변수의 메모리 부분을 수정한다면 영향을 미칠 수 있음

출처: https://tryhackme-images.s3.amazonaws.com/user-uploads/5ed5961c6276df568891c3ea/room-content/a9803fb53e3311e7068b1fd34c017219.png

 

 

2. Accessing the Debug Panel

-*특정 변수의 메모리 레이아웃을 관찰해보자

- 디버깅 인터페이스

  • ASCII: 메모리 내용이 ASCII 인코딩으로 표시되며 문자열로 저장된 데이터를 읽을 때 유용함
  • HEX: 메모리 내용이 HEX 인코딩으로 표시되며, 모니터링하려는 데이터가 원시 숫자이거나 ASCII 문자열로 표시할 수 없는 기타 데이터인 경우 유용함

3. Strings in More Detail

- 변수를 문자열로 읽을 때 게임은 처음 발견된 Null 문자에서 중지되므로 더 작은 문자열을 더 큰 용량의 변수에 저장이 가능함 > Null 바이트 뒤에 나타나는 모든 문자는 값이 있더라도 무시됨

- 과거 c++의 경우 기본적으로 배열의 경계를 확인하지 않기 때문에 조심해야함

출처: https://tryhackme-images.s3.amazonaws.com/user-uploads/5ed5961c6276df568891c3ea/room-content/995451a245771fbc0e5da68c675d1f25.png & https://tryhackme-images.s3.amazonaws.com/user-uploads/5ed5961c6276df568891c3ea/room-content/ce8c5078c999f37fec5c49c435bbaef4.png

- 해당 사진에서 원래 변수인 player_name을 넘어선 coins의 변수 값까지 player_name으로 읽어들임

 

4. Integers and the Coins Variable

- c++의 경우 정수가 메모리에 "리틀 엔디언"방식으로 저장

출처: https://tryhackme-images.s3.amazonaws.com/user-uploads/5ed5961c6276df568891c3ea/room-content/1b02842fda1e34172c0a7905673fd87a.png

 

 

Comments