tmxklab

[pwnable.kr] shellshock 본문

War Game/pwnable.kr

[pwnable.kr] shellshock

tmxk4221 2020. 11. 20. 17:38

1. 문제 확인

 

[ 파일 확인 ] 

shellshock@pwnable:~$ ls -l
total 960
-r-xr-xr-x 1 root shellshock     959120 Oct 12  2014 bash
-r--r----- 1 root shellshock_pwn     47 Oct 12  2014 flag
-r-xr-sr-x 1 root shellshock_pwn   8547 Oct 12  2014 shellshock
-r--r--r-- 1 root root              188 Oct 12  2014 shellshock.c

실행 가능한 파일로 bash와 shellshock이 있다.

 

[ 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;
}

setresuid, setresgid함수를 통해 ruid, euid, suid를 세팅함

  • int setresuid(uid_t ruid, uid_t euid, uid_t suid);
  • int setresgid(uid_t rgid, uid_t egid, uid_t sgid);

그리고 "/home/shellshock/bash"를 통해 "echo shock_me"를 실행시킨다.

 


2. 접근 방법

shellshock관련 취약점을 이용하여 문제를 푸는 것 같다.

 

Shellshock(CVE-2014-6271)

Bash 쉘에 존재하는 취약점이며 환경 변수에 코드를 삽입해 예상치 못한 행위를 할 수 있는 취약점이다. 해당 취약점은 대략 40년 동안 존재해왔으며 실제 위험도 수치(CVSS)에서 10점으로 분류되었다.

 

취약점 설명)

export명령어를 통해 환경변수를 설정할 수 있으며 이 때 함수는 "() {"문자열을 사용해서 환경변수에서 선언이 가능하다.

예를 들면 다음과 같이 함수를 선언할 수 있다.

ex) export VAR='() { echo hi; }'

 

출처 : KISA GNU Bash 원격명령 실행 취약점 대응방안 권고 

 

하지만 함수 선언문 끝에 세미콜론을 붙여 임의의 명령어를 추가로 삽입할 경우 Bash가 함수문에서 처리를 멈추지 않고 추가로 삽입한 명령어를 계속 실행시킬 수 있게 된다.

ex) export VAR='() { echo hi; }; /bin/cat flag '

 

이는 bash-4.3/builtins/evalstring.c 파일 내에 정의되어 있는 parse_and_excute()를 통해 명령어를 처리하여 실행하기 때문이다. parse_and_excute()는 전달된 명령어 문자열의 끝까지 처리하기 위해 반복문(while)을 사용한다. 하지만 반복문 내에서 처리하는 명령어 문자열이 함수 선언문인지 확인하고 처리를 종료하는 코드가 없기 때문에 함수 선언문을 처리하고 난 뒤에도 반복문을 계속 실행하며 뒤에 삽입된 명령어를 실행한다.

 

 


3. 문제 풀이

 

위 취약점을 통해 cat flag라는 명령어를 환경변수 함수 끝에 삽입하고 shellshock파일을 실행하자

 


4. 몰랐던 개념

 

bash쉘 처리 프로세스 및 shellshock

 

참고 자료)

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

[pwnable.kr] blackjack  (0) 2020.12.02
[pwnable.kr] coin1  (0) 2020.12.02
[pwnable.kr] mistake  (0) 2020.11.20
[pwnable.kr] leg  (0) 2020.11.20
[pwnable.kr] input  (0) 2020.11.20
Comments