[Pwnable 풀이] 4. shellshock

shellshock이라는 주제는 이전 고급해킹실습 수업에서 해본적이 있어서 반가운 마음에 문제를 선택해 풀어보았다.
먼저 서버에 접속해 파일들을 확인해보면 아래와 같다.

bash 쉘 파일과 flag값, shellshock 실행파일과 코드 총 4가지 파일이 존재한다.
당연하게 flag값은 읽기 권한이 없고, shellshock 공격을 사용해 권한 상승으로 flag 값을 얻어내야 할 것을 보인다.
shellshock.c 파일을 살펴보면 setresu(g)id 명령어가 보이는데 파라미터의 값으로 real id, effective id, saved set id를 설정해주는 함수로 3개 인수의 값 모두 getegid()가 들어가 있는 것으로 보아 프로그램의 소유주 shellshock_pwn의 권한으로 프로세스의 권한을 재설정 해주는 것 같다. (확실치 않음...ㅠ 옛날 수업 들은 기억 더듬 더듬)
원래 접속한 계정으로 shellshock 파일을 실행하면 flag 값을 읽을 수 없으나 shellshock_pwn 계정으로 권한상승이 이루어지면 flag 값을 읽을 수 있는 것이다.
그렇다면 이제 shellshock 공격 방법을 사용해서 권한상승을 유도해보자
먼저 shellshock 공격이란 CVE-2014-6271 이라고도 명명되며 bash 쉘에서 환경변수를 읽어오며 파싱하는 과정에서 의도치 않은 명령어가 실행 되어 발생하는 취약점이다. 그 위험도가 매우 높아 보고 즉시 여러 공격들이 발생하였고 신속한 보안패치가 이루어져야 했다. 간단한 설명은 아래 사진과 함께 진행하지만 자세한 설명은 아래 블로그 참조.
https://operatingsystems.tistory.com/entry/Shellshock-CVE20146271
[Vul] Shellshock (CVE-2014-6271)
우선, 간략하게 CVE-2014-6271 일명 Bash shellshock 취약점에 대하여 설명하고자 한다. 이 취약점은 Akamai Technology의 Stephane Chazelas에 의해 발견되었다. CVE-2014-6271는 대부분의 Linux/Unix System에서 사용되는 s
operatingsystems.tistory.com

먼저 위와 같이 우리는 환경변수에 원하는 값을 저장하고 이를 bash shell에서 사용할 수 있다.

환경변수에는 값 뿐만 아니라 함수 또한 저장 가능한데 위와 같은 코드를 통해 실습이 가능하다.

그런데 환경변수에 함수와 같은 문법의 값을 저장하게 되면 bash 쉘의 파싱 로직의 취약점으로 인해 환경변수를 읽어오는 과정에서 함수 뒤에 저장된 의도하지 않은 명령문의 실행이 가능하다.

이러한 취역점을 사용해서 bash 쉘이 불러올 환경변수에 실행하고자 하는 명령어를 뒤에 덧붙인 함수를 저장하고 shellshock 프로세스를 실행하면 이미 setresu(g)id로 상승된 권한으로 해당 명령어를 실행할 수 있기 때문에 flag의 값을 탈취 할 수 있다.