[pwnable.kr] shellshock(1 pts) :: Write-Up

두비니

·

2020. 7. 9. 06:26

 

 

 

 

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

 

ssh shellshock@pwnable.kr -p2222 (pw:guest)

 

 

bash에 대한 문제인가봅니다. 

 

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

단순히 bash를 실행시킨 후, 명령어를 실행합니다.

shellshock를 실행시켜 얻은 bash권한으로 flag를 여는건가...?하는 생각이 가장 먼저 드네요.

 

 

좀 찾아보니 아니나다를까 shellshock취약점에 대한 이야기네요.

 

 

다음은 shellshock에 대한 취약점 분석 내용이니 참고하시면 좋을 듯!

https://m.blog.naver.com/renucs/220144713558

 

Bash 취약점(CVE-2014-6271) 원리 및 공격기법의 이해

올 해 Heart Bleed 이후 가장 파급력이 크다는 bash 쉘쇼크(Shell shock) 취약점으로 인해 며칠 간 보안...

blog.naver.com

 

shellshock를 설명하기 전에 기본적으로 환경변수를 조금 알아봅시다.

환경변수는 여기저기서 많이 이용하고 들어봤겠지만, 기본적으로 '프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임'이라는 뜻인데, 쉽게 말하자면 접속하기 쉽도록 즐겨찾기를 설정해놓은 것이라고 생각하면 편합니다. 아무튼 이 환경변수는 그냥 변수처럼 값을 저장할 수도 있지만, bash에서는 함수를 환경변수로 설정하는 것도 가능합니다.

 

이렇게!

이 환경변수를 가지고 bash의 취약점을 찾아 낼 겁니다:>

 

 

그럼 이 hi라는 변수를 환경변수로 불러와서 bash로 실행시켜봅시다. 앞서 설명했듯이 export로 불러올 경우, 현재 실행하고 있는 bash에서 뿐만아니라 bash를 실행시켰을때 추가로 실행이 되는 subshell, 즉 subprocess bash에서도 해당 환경변수를 사용할 수 있게 됩니다. 그러면 bash안에서 hi를 실행시키면 hi는 () { echo hello; } 로 이루어진 단순 문자열에 불과하기 때문에 아무것도 실행이 되어선 안되지만, 위 사진을 보면 알 수 있듯이 함수로서 실행이 되어버립니다.

 

이게 어떻게 된 일이냐,

 

shell에서 subshell로 넘어갈 때, 환경변수를 초기화 시키게 되는데, 초기화 하는 과정에서 환경변수 안의 문자열들을 명령어로 인식해버려서 함수로 설정해버린다는 것입니다. 이게 shellshock의 기본이고, 이에 추가로 더 명령을 시킬 수 있다는 것이 shellshock의 핵심입니다.

 

예를 들어 export hi='() { echo hello; }; echo hiiiii;' 라고 환경변수를 불러오게 된다면, bash 실행시 

 

응 아니야

권한 거부가 되었는데, flag의 권한조건을 봅시다.

 

 

flag를 열기 위해서는 shellshock_pwn 권한이 필요한데, 보니 shellshock가 그 권한을 가지고 있네요. setresuid와 setresgid는 권한을 얻어오는 과정이고, 그 후 bash를 실행하니 bash가 아닌 shellshock를 실행시켰어야 했네요.

 

 

참고로 seg fault가 뜨는 이유는 당연히 잘못된것 자체를 인식하긴 하지만, 명령어는 실행되버린 그런 상황이여서 그렇다고 하네요.

 

사실 이런류는 그냥 아~ 그렇구나~! 와~ 신기하당~! 이런 느낌의 문제여서... 아무튼 끝

 

 

 

 

 

+) 혹시나 bash, 즉 쉘(shell)에 대한 개념이 부족하다면 아래 글도 잘 써져있는 것 같습니다. 참고할 수 있도록!

https://blogger.pe.kr/300

 

[unix / linux] shell (쉘)을 이해하자.

 유닉스나 리눅스를 공부하는 많은 초심자들이 처음으로 부닥치는 어려움이 바로 Shell(쉘) 이다. 이 쉘을 정확하게 이해하지 않으면 유닉스나 리눅스 서버에서 주로 업무를 하는 엔지니어가 되

blogger.pe.kr