엄마! bash에 대한 충격적인 소식이 있어!! 이미 알고있을거라고 장담하지만 그냥 확실히 하자ㅎㅎ:) 오..뭔지는 모르겠지만 나도 알고있는 거면 좋겠다... 하지만 난 bash에 대해서 아는게 없으니까... 아마 모르고있겠지... 일단 저 서버에 접속해보자..!



shellshock파일 이외에 bash라는 파일도 있는게 눈에 띄인다.


일단 shellshock.c파일을 확인해보자.


1
2
3
4
5
6
7
8
#include <stdio.h>
int main(){
    setresuid(getegid(), getegid(), getegid());
    setresgid(getegid(), getegid(), getegid());
    system("/home/shellshock/bash -c 'echo shock_me'");
    return 0;
}
 
cs


음 일단 코드길이는 매우 짧다. 그래도 한줄씩 분석해보자.


첫줄의 setresuid함수는 인자로 들어간 3개의 값으로 프로세스의 real UID, effective UID, saved set-user-ID를 각각 바꾸어주는 함수이다.

인자로 들어간 함수중에서 getegid()함수는 호출프로세스의 유효 그룹 ID를 반환하는 함수이다.


두번째 줄의 setresgid는 인자로 들어간 3개의 값으로 프로세스의 real GID, effective GID, saved set-group-ID를 각각 바꾸어주는 함수이다.


여기까지 해도 잘 모르겠으니까 구글에 shellshock를 검색해보니까 바로 연관검색어로 shellshock취약점 shellshock bash등 많이 나와서 bash취약점에 대해 공부해봤다.


요약해서 말하자면 shellshock취약점은 bash shell에서 임의의 환경변수에 특정 코드를 삽입하여서 실행할 수 있는 취약점이다. 이 취약점은 bash버전 4.3이하에서 발생하는 취약점이라고 한다.


리눅스상에서는

func() {echo hello;}

이런식으로 함수를 정의할 수 있다.

그 후에 -f 옵션을 통해서 합수를 등록해준다. 그 후에 그 환경변수를 호출하면 아래와 같이 함수가 실행된다.



이를 이용해서 shellshock취약점이 일어나게 되는데

bash 환경 변수에 함수처럼 보이는 변수를 정의한다. 

export x = '() { echo hello~; }'

이런식으로 함수 문법으로 시작되는 문자열을 적어 넣는다.



이런식으로 환경변수 값을 보면 문자열 형태로 들어가 있는 것을 알 수 있다.


그런데 bash subshell을 열면 bash가 시작되면서 등록된 환경변수를 다시 읽어오게 된다. 그렇게 되면 함수인척 하고 문자열로 저장된 환경변수가 진짜 함수로 정의되게 된다. 


여기까지만 보면 아무 문제가 없는 것 같지만 변수를 정의할때 뒤에 명령어도 실행시킬 수가 있기 때문에 취약점이 발생한다.

export x = '() { echo hello~; };pwd;id'

와 같이 변수를 정의하면 bash가 실행되면서 환경변수가 함수로 정의되고 뒤에 있는 명령어까지 실행되게 된다.


이제 플래그를 읽어와보자.

bash의 버전부터 확인해보면 



당연하게도 4.2.25버전으로 패치되기 전 버전인 것을 확인할 수 있었다.


아까 봤던 코드를 생각해보면 setresuid와 setreguid함수를 통해 권한을 상승시키고 그 상태에서 bash shell을 실행시켜주는 코드라는 것을 알 수 있다. 

그러면


export pay='() { echo hello!; }; /bin/cat flag'


로 변수를 정의시켜주고 shellshock를 실행시키면 바로 flag를 읽어올 것이다!! 해보자~!~!



성공이다!!~!


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

[pwnable.kr] blackjack  (0) 2019.06.26
[pwnable.kr] coin1  (0) 2019.06.25
[pwnable.kr] mistake  (0) 2019.02.24
[pwnable.kr] leg  (0) 2019.02.20
[pwnable.kr] input  (0) 2019.02.18

+ Recent posts