int main(){
setresuid(getegid(), getegid(), getegid());
setresgid(getegid(), getegid(), getegid());
system("/home/shellshock/bash -c 'echo shock_me'");
return 0;
}
이번 문제는 shellshock 취약점을 이용해야한다. shellshock 취약점은 ./bash를 실행할때 bash 환경변수를 초기화하는데 이때 변수 뒤에 문자열이 명령어로 인식되는 취약점이다.
환경변수를 예로 들자면 아래와 같이 export명령어를 이용해 lemon_soju라는 변수에 echo hello;라는 문자열을 넣어서 마치 함수처럼 사용할 수 있습니다.
문제점은 문자열 뒤에 추가로 명령어를 대입하면 이후 ./bash를 실행하면 명령어가 자동으로 실행되는 현상이 발생합니다. 그 이유는 ./bash를 실행하면 실행과 동시에 bash 환경변수가 초기화되는데 그 과정에서 뒤에 붙은 명령어가 실행되는 취약점이 발생하기 때문입니다.
shellshock.c를 보면 bash를 실행하는 코드가 있으므로 아래와 같이 test01 변수에 문자열을 저장하고 shellshock을 실행하면 플래그가 출력된다. 변수 이름에 lemon이 들어가면 원래 있는 명령어라서 그런지 오류가 발생하므로 test01이나 임의의 환경변수를 만들면 됩니다.
'시스템 해킹 > pwnable.kr' 카테고리의 다른 글
[Pwnable.kr] blackjack (0) | 2021.07.28 |
---|---|
[Pwnable.kr] coin1 (0) | 2021.07.28 |
[Pwnable.kr] input (0) | 2021.07.27 |
[Pwnable.kr] random (0) | 2021.07.27 |
[Pwnable.kr] passcode (0) | 2021.07.27 |
댓글