블로그 이전했습니다. https://jeongzero.oopy.io/
[pwnable.kr] shellshock
본문 바로가기
워게임/pwnable.kr

[pwnable.kr] shellshock

728x90

1. 문제


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

getegid() 함수로 현 process의 effective group id를 얻고, 이를 인자로 하여 setresuid, setresgid 함수를 호출한다. 이를 통해 프로세스의 "real U(G)ID", "effective U(G)ID", "saved set-user(group)-ID"를 변경한다. 

 

그리고 subshell을 띄워 echo shock_me를 출력한다. 

 

 

2. 접근방법


  • CVE-2014-6271 ⇒ shellshock

 

14년도에 나온 취약점으로 bash 쉘에서 환경변수에 다음과 같이 

환경변수에 값을 등록시킬수 있다. 함수 역시 등록할수 있는데 

 

다음과 같이 함수를 작성하고, export -f 명령어로 환경변수에 등록하면 쉘에서 함수명만 쳐도 설정한 내용이 출력된다. 여기서 취약점이 생기는데, 

 

만약 expo'() { echo hello;}; echo fucking' 이렇게 환경변수로 함수를 주게되면,  

 

env 명령어로 확인했을때 작성한 명령어가 세팅되고, ./bash 로 서브 쉘을 띄울때 쉘이 초기화가 되면서 환경변수에 등록된 값을 그대로 가져와서 띄우게 된다. 함수 뒤에 ;으로 구분을 한뒤, 뒤에 삽입한 명령어가 그대로 쉘 커맨드로 입력되어 fucking 단어가 출력되는것을 볼수 있다. 

 

자세한 설명은 아래에서 공부하면 좋을듯 

[Vul] Shellshock (CVE-2014-6271)
우선, 간략하게 CVE-2014-6271 일명 Bash shellshock 취약점에 대하여 설명하고자 한다. 이 취약점은 Akamai Technology의 Stephane Chazelas에 의해 발견되었다. CVE-2014-6271는 대부분의 Linux/Unix System에서 사용되는 shell인 Bash shell에 존재하는 취약점으로, 대략 40년 (혹은 그 이상) 동안 존재해온 취약점이라고 한다. 이러한 측면에서 봤을 때, 특정 Version에만 취약했던 Heartbleed 취약점(CVE-2014-0160)보다 더욱 위험한 공격으로 분류된다.
https://operatingsystems.tistory.com/entry/Shellshock-CVE20146271

 

 

3. 풀이


결론은 환경변수에 함수를 등록하면서 뒤에 커맨드를 넣어주고, shellshock함수를 호출하게 되면, 

서브 쉘이 호출되면서 shell prompt를 출력하기 전에 환경변수들을 한번 싹 초기화 해주는데, 이때 아까 넣어놨던 커맨드가 실행되는 취약점이라고 한다. 

따라서  

 

export ttt='() { echo hello;}; /bin/cat flag' 를 주고 shellshock을 실행시키면 

⇒ system("/home/shellshock/bash -c 'echo shock_me'"); 

요부분에서 서브쉘이 실행되고 환경변수가 초기화되는 중에 /bin/cat flag가 실행될 것이다. 

 

 

4. 몰랐던 개념


  • CVE-2014-6271

 

728x90

'워게임 > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] md5 calculator  (0) 2020.09.23
[pwnable.kr] brainfuck  (0) 2020.09.23
[pwnble.kr] leg  (0) 2020.09.06
[pwnable.kr] mistake  (0) 2020.09.06
[pwnable.kr] input  (0) 2020.09.06