tmxklab
[pwnable.kr] shellshock 본문
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; }'
하지만 함수 선언문 끝에 세미콜론을 붙여 임의의 명령어를 추가로 삽입할 경우 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 |