문제를 풀면서 많은 것을 찾아보고 알게 되어 기쁘다. :)

이번 문제는 shellshock 이다.



(shellshock)


문제 화면은 아래와 같다.



(문제 화면)



문제의 키워드는 shellshock이다.
shellshock를 기사공부할 때 공부했었다.
환경변수를 이용해 명령어를 Injection 시키는 공격이라고 공부를 했는데
직접 해보지는 못했었다.

직접 찾아보면서 더 깊이 이해하게 되었다. :)

먼저 문제 접속하여 파일들을 보자.



(문제 접속)


특이점은 bash가 있다는 것이다.

코드를 보자!


(shellshock.c)



쉘쇼크 소스코드이다.
시스템함수로 bash를 실행시킨다.

쉘쇼크를 검색하면 제일 많이 나오는 것이 아래와 같은 진단코드이다.



(쉘쇼크 진단 코드)



vulnerable이 뜨면 취약한 점이라고 하는데 안뜬다..
취약하지 않은건가??

여기서 많이 찾아보게 되었는데
아주아주아주 정리를 잘해주신 블로그를 발견했다. 쉘쇼크의 원리를 빠삭하게 설명해주셨다.

바로 쉘쇼크의 근간은 Bash가 subshell을 실행시키면서 일으키는 버그이다.

예를 들면 export로 환경변수를 설정해보자.



(환경변수 설정)



위의 attack은 변수로 설정 되었다. Bash에서는 함수로 환경변수를 설정할 수 있다.
하지만 저 위의 attack은 쿼터로 둘러싸인 문자열 변수이다.!
(실행은 안된다!)

하지만! export로 선언한 변수는 subshell에서도 적용이 되는데 이 때 버그가 발생한다.

서브쉘로 bash를 열고 attack 함수를 실행해보자.



(함수 실행)



함수가 실행되었다???
문자열인데????

이건 바로 subshell을 실행시킬 때 환경변수 초기화 작업이 있는데 이 때 문자열 안에 있는 것들을 함수로 인식해 설정해버린다는 것에 있다.
더 흥미진진한 것이 있다.

{ ~~ } ; 추가 명령들
{} 안의 내용이 함수로 설정이 되고 그 다음에 추가명령들을 입력하면 이것들이 실행된다.
함수를 실행시키지 않아도 bash 초기화 작업중에 일어난다.
bash 환경변수 초기화 작업에 환경변수에 있는 내용들을 파싱하는 과정에서 입력값을 체크하지 않는 데 서 발생하는 취약점이다. 즉 여기서 echo attack!!! 을 함수로 설정하고 
/bin/cat ./flag 를 명령어 추가로 던져서 설정해보자.


(환경변수 설정)



그 후 shellshock를 실행시키면 된다. 코드 안에 bash를 실행시켜주니 알아서 읽을 것이다.
게다가 setgid가 설정되어있어 읽을 수 있다.



(문제 해결)


'WarGame > 500 Project' 카테고리의 다른 글

(53/500) pwnable.kr - blackjack  (0) 2017.07.12
(52/500) pwnable.kr - coin1  (0) 2017.07.12
(50/500) pwnable.kr - mistake  (0) 2017.07.10
(49/500) pwnable.kr - leg  (0) 2017.07.10
(48/500) pwnable.kr - random  (0) 2017.07.06

+ Recent posts