pwnable.kr (shellshock)
#include <stdio.h>
int main(){
setresuid(getegid(), getegid(), getegid());
setresgid(getegid(), getegid(), getegid());
system("/home/shellshock/bash -c 'echo shock_me'");
return 0;
}
음..? 이번엔 뭘 이용해야할지 전혀 모르겠다.
Shellshock (CVE-2014-6271)
Linux/Unix System에서 사용되는 Bash shell에 존재하는 취약점이다.
Bash 환경변수를 세팅할 때 변수와 함수로 세팅할 수 있으며, 변수로 선언할 경우 아래와 같이 선언할 경우 함수로 실행되는 것을 볼 수 있다.
export c0wb3ll='() { echo c0wb3ll; }'
그리고 여기서 중요한 내용은 이 함수 뒤에 붙어 나오는 명령어들이 실행이 된다는 점이다.
export c0wb3ll='() { echo c0wb3ll; }; whoami'
위와 같은 환경변수를 선언하고 bash를 실행할 경우 subshell이 실행되면서 whoami라는 명령어도 같이 실행시켜버리게된다.
flag
결론은 shellshock 소스코드에 보면 권한 세팅을 다시하고 bash를 이용하여 echo shock_me를 실행한다.
따라서 취약점을 이용하여 flag를 읽어주는 환경변수를 세팅해준 후 shellshock를 실행시키면 bash를 실행시키며 subshell이 실행되며 상승된 권한으로 flag를 읽어올 수 있다.