pwn

pwnable.kr - shellshock

ray3708 2020. 7. 15. 17:28

해설

Mommy, there was a shocking news about bash.
I bet you already know, but lets just make it sure :)

 

shellshock의 관한 문제다. shellshock는 2014년 발견된 bash shell의 취약점이다. 워낙 유명한 취약점이기 떄문에 자세한 설명은 생략한다.

 

접속하여 shellshock.c 파일을 확인하면 다음과 같다.

#include <stdio.h>
int main(){
        setresuid(getegid(), getegid(), getegid());
        setresgid(getegid(), getegid(), getegid());
        system("/home/shellshock/bash -c 'echo shock_me'");
        return 0;
}

shellshock의 핵심은, bash 프로세스가 어디서 실행되냐인데, shellshock 프로그램에서 시스템 함수로 취약점이 있을법한 bash shell을 실행하는거 같다. 실제로 bash 바이너리가 해당 경로에 존재한다. shellshock 취약점이 있는지 확인하는법은 간단하다. 다음과 같은 입력을 통해 shellshock 취약점을 판단할 수 있다.

 

환경변수를 처리하는 과정에서 함수 선언부 뒤의 임의의 커맨드를 실행할 수 있는지를 판단하면 된다. 따라서 echo vulnerable!이 실행된 시점에서 shellshock 프로그램에서 실행하는 bash는 취약하다고 판단할 수 있다. shellshock 프로그램은 setuid가 걸려있기 때문에, 해당 프로그램의 서브 프로세스로 실행되는 bash가 이 권한을 물려받는다. 따라서 다음과 같이 커맨드를 입력하면 flag가 출력 된다.