서브웨이

pwnable.kr shellshock 풀이 본문

Pwnable/pwnable.kr

pwnable.kr shellshock 풀이

샌드위치메이커 2020. 8. 17. 19:07

bash에 대해 뭔가 놀라운 소식이 있답니다. 참고로 bash는 쉘의 종류 중 하나 입니다. 리눅스, mac OS에서 기본으로 사용하는 쉘이기도 합니다. 일단 접속해봅시다.

이런 파일들이 있습니다. 일단 플래그와 shellshock 파일을 소유한 그룹이 shellshock_pwn으로 같다는 것을 유의하시면 됩니다.

 

일단 소스코드를 봅시다.

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

일단 코드는 상당히 짧습니다. 먼저 setresuid는 real, effective and saved user ID를 순서대로 한번에 설정해주는 함수이고, setresgid는 real, effective and saved group ID를 순서대로 한번에 설정해주는 함수입니다.

그런데 해당 권한들을 전부 EGID로 설정하네요. 근데 그룹의 실행권한을 보면 s로 setGID가 설정되어 있습니다. 그럼 eGID가 프로세스를 소유한 그룹의 ID가 아닌 setGID로 설정이 됩니다. 결과적으로 플래그 파일을 읽을 수 있는 권한은 마련된 상태입니다.

그 상태에서 bash를 실행하여 subshell을 만들고 그 곳에서 shock_me를 출력합니다.

 

자 그럼 shellshock가 무엇인지 알아봅시다.

간단한 구글링을 통해 쉽게 정보를 얻을 수 있지만 저는 그냥 영문 위키를 참고했습니다.

간단하게 정리하면 bash에 존재하는 취약점(CVE-2014-6271)입니다.

먼저 bash에는 함수 기능이 있는데 이렇게 동작합니다.

함수명() { 명령 }을 하게되면 해당 함수가 설정이 되고, 함수명을 입력하면 명령이 실행됩니다. 

그리고 환경변수라는 것이 있는데 뭐 다 아실거라 생각합니다. 모르면 구글링을 해보시면 됩니다.

환경변수를 이런식으로 export하면

sandwich라는 함수처럼 보이는 문자열 형태의 환경변수가 만들어지고 export되어 다른 쉘에서 import되기를 기다립니다.

그런데 다른 쉘에서 해당 환경변수를 import하는 과정에서 문자열 내의 { :; } 부분을 함수로 인식하여 함수로 등록시키고, 더 나아가 그 이후에 오는 명령을 그대로 실행해버리는 문제가 발생합니다.

따라서 이 이후에 subshell을 실행하는 shellshock를 실행시켜주면

이렇게 문제가 풀리네요.

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

pwnable.kr blackjack 풀이  (0) 2020.08.19
pwnable.kr coin1 풀이  (0) 2020.08.18
pwnable.kr mistake 풀이  (0) 2020.08.14
pwnable.kr leg 풀이  (0) 2020.08.13
pwnable.kr input 풀이  (0) 2020.08.11
Comments