본문 바로가기
사이버보안/시스템보안

Protostar Stack2

by 개발하는군인 2020. 3. 19.

 

 

 

Stack2 looks at environment variables, and how they can be set.

 

 

 

1.문제요약

 

 

 

환경변수에대한 지식과 그리고 그 값을 설정할수 있는지 확인하는 문제입니다.

 

 

 

2.소스코드 분석 및 분석  

 

 

stack2

 

 

 

이번 문제 처음 시작은 소스코드 분석 부터하겠습니다.

 

 

8~9 번째 volatile  int modified 변수와  char형 배열 64byte를 선언

 

 

10번째줄에서는 캐릭터형 포인터를 선언

 

 

12번째 줄에서는  getenv() 함수를 사용해서  환경변수를 저장

 

 

14번째 줄에서는 getenv() 함수를 통해서 가지고 온값이 없다면 프로그램을 종료

 

 

20번째 줄에서는  strcpy() 함수를 통해서 buffer에  variable 값을 복사

 

 

22~25번째 줄에서는  modified 값이 "0x0d0a0d0a" 인지 확인하고 만약 맞다면  성공 !

 

틀렸다면 실패입니다 .

 

 

 

이 문제를 풀기 위해서는 modified 값을 "0x0d0a0d0a" 값으로 변경해야 합니다 .  

 

 

앞서 stack 문제들에서도 말했듯이  대부분의 취약점은 사용자에게 입력을 받는부분,

변하는 부분에 존재합니다.

 

 

12번째 줄을 보시면 getenv() 함수를통해 환경변수"GREENIE"에 저장된 값을  variable에 값을 저장하고 있습니다 .

 

 

------------------------- 환경변수 지정 , C언어 리눅스 환경변수 관련함수 ---------------- 

 

 

 

그리고 20번줄을 보시면  strcpy() 함수를 사용하여  variable 값을 buffer에 복사하고 있습니다

 

 

하지만 strcpy() 함수는 값을 복사할때 몇 byte를 복사할것 인지에 대한 지정이 없어 

 

버퍼오버플로우를 발생시켜 modified 값을 변조할수있습니다.

 

 

 

      

3.실습 및 정답풀이 

 

3-1. 환경변수 설정 하는법 

 

export  "환경변수명"=지정할값 

 

 

환경변수 설정

 

 

설정된 환경변수 확인 

 

 

3-2. modified 변조

 

 

 

export 명령어를 통해 환경변수를 설정하는것을 배웠으니  이제는 환경변수에 선언된 64byte 해당 되는

 

더미값을 채워주고  그이후 버퍼오버 플로우를 하여 modified 값을 "0x0d0a0d0a" 값으로 변경해보겠습니다.

 

 

 

 

 

 

앞에 64byte 를 더미값 a 값으로 채웠고  그이후 modified 에 해당되는 영역에 값 "\x0a\x0d\x0a\x0d"  을 넣어서    환경변수로 설정 해주었습니다.

 

 

그이후  ./stack2 실행 시켜보니  성공 !!

 

'사이버보안 > 시스템보안' 카테고리의 다른 글

Protostar Stack3  (0) 2020.03.22
Protostar Stack1  (0) 2020.03.15
시스템보안 1일차 - 윈도우보안  (0) 2020.03.15
Protostar Stack0  (0) 2019.11.10