티스토리 뷰

반응형


이번학기 목표를 pwnable.kr 를 hacker's secret 빼고 다 풀어 보는 것으로 잡았다. 

그래서 오늘도 포너블문제 두개를 풀었는데 그것을 한번 풀이 해 보도록 하겠다.

이 문제에서 알아야 할 개념은 리눅스의 환경변수C의 strstr()함수 인데 문제를 풀면서 같이 공부해보자.





풀어볼 문제는 cmd1 리눅스의 환경변수를 이용하는 문제이다.





접속해보면 위와 같이 cmd1 cmd1.c flag 파일이 있다.





코드를 읽어보면 다음과 같은데 사용자에게 입력받은 문자열을 시스템 함수에 넣고 실행시키는 코드이다.

이때 strstr()함수를 통해 몇가지의 문자열이 필터링 된다. flag, sh, tmp


-strstr(string1, string2)


string2가 string1에 나타나는지를 검사하는 함수. 아니면 NULL. string2에서 끝나는 널문자(\0)를 무시함. 



이를 우회하기 위해서 문제의 힌트에서 나와 있듯이 리눅스의 환경변수를 이용한다.



-리눅스의 환경변수


윈도우와 마찬가지로 리눅스에도 환경변수가 존재하는데 리눅스에서 환경변수를 설정하기 위해서는 크게 두가지 방법이 있다. 


1. 환경변수를 설정할 홈 디렉토리의 ~/.bash_profile 에 PATH=를 추가해 주는 것.


2.  export 명령어를 이용해 환경변수를 지정해 주는 것.


이렇게 두가지가 있는데 먼저 시도한 ~/.bash_profile  수정은 파일 수정 권한이 없어서 사용할 수 없는 방법이고,

두번째 export 명령어를 이용해 환경변수를 지정해 주는 것을 자세히 살펴 보자.



-export


리눅스에서 환경변수를 다루기 위해 사용 되는 명령어.


=사용법


 export

 전체 시스템 상의 설정 출력

 export $PATH

 현재의 패스가 걸린 디렉토리가 전부 출력 

 export 변수명=변수값

 변수 등록 

 export 변수명=$변수명:변수값

 변수명에 변수값 추가

 printenv

 등록되어 있는 환경변수 확인



그래서 위의 배경 지식을 바탕으로 문제를 풀면





export hi=~/flag
./cmd1 "/bin/cat \$hi"
flag 값^^


다음과 같이 플래그 값을 얻을 수 있다.

해당 문제를 통해서 리눅스 환경변수를 설정하는 방법과 자주 사용한 적 없었던 strstr() 함수에 대해서 알 수 있었다.

반응형
Comments
댓글쓰기 폼