[pwnable.kr] shellshock - 1 pt
이번에 풀어볼 녀석은 이녀석이다. 이름은 shellshock
bash에 대한 shocking 뉴스가 있다고 한다. 검색해보면 쉘쇼크(ShellShock)라는 취약점에 대해서 알 수 있다.
쉘쇼크(Shell-Shock) (CVE-2014-6271) 2014년 9월 24일, GNU Bash 환경변수를 통한 코드 인젝션 취약점이 보고되었다. 이른바 ‘쉘쇼크(ShellShock)’로 불리는 해당 취약점환경변수를 이용하여 인젝션을 시도할 수 있어 공격자는 악의적인 명령이 포함된, 특별하게 조작된 환경변수를 사용하여 해당 취약점을 이용해 악의적인 행위를 수행할 수 있다. |
저 쉘쇼크에 대해 이해하기 위해선 먼저 Shell에 대해 잘알아야한다. 여기 블로그에서 잘 설명되어 있어서 한번 가서 보고오는것도 좋다.
일단 bash 취약점에 대해 간단히 설명가능한 명령어가 있는데 아래와 같다.
$ env x='() { :;}; echo vulnerable' bash -c "echo test"
간단히 설명하면 bash에는 환경변수라는 것이 있는데, bash에서는 이 환경변수에 값이 아닌 함수를 등록하고
bash -c [변수명] 과 같은 방법으로 변수에 등록된 함수를 실행시킬수 있다.
한줄에 써져있어 잘 모를수있어 풀어쓰면 밑과 같다.
1 '( ){
2 :;
3 };
4 echo vulnerable'
5 bash -c "echo test"
우리가 흔히쓰는 함수의 선언과 다를게 없다.
그럼 여기서 무엇이 문제점(취약점)이냐? 하면 다시 위의 명령을 보자
먼저 정상적인 동작이라면 함수정의가 끝나면서인 (){ }; 여기까지이다.
그러므로 그 뒤에 echo 명령이 있는 부분은 원래라면 무시되거나 에러가 나면서 실행이 안되어야한다.
그러나 실제로는 bash가 함수를 실행하기 위해 파싱하는 과정에서 중괄호의 끝인 }와 ' 사이에 있는 명령(echo)을 실행시켜 버려
그 뒤에 부분이 전부 실행된다는 것이다.
여기에 있는 bash는 취약점있는 shellshock공격이 가능한 bash쉘이라는것이 확인되었다.
그러면 이제 shellshock.c의 내용을 통해 shellshock파일이 어떤 동작을 하는 지 보자.
setresuid와 setresgid 둘다주고 setuid가 걸려있으므로 root권한으로 실행될것이란것을 알 수 있다.
사용하는 bash는 취약점이 있는 bash이다. 프로그램은 system함수로 /home/shellshock/bash -c 'echo shock_me'를 실행하는데
저 bash가 실행될때 실행되는 함수뒤에 echo함수의 정의를 새로해두면 system함수에 의해 실행되는 subshell은 echo를 실행하면 cat flag를 실행하게 된다.
env x='() { :; }; echo(){ cat flag; }' /home/shellshock/shellshock
이렇게 플래그를 획득할 수 있다.
참고한 블로그 :
http://operatingsystems.tistory.com/entry/Shellshock-CVE20146271
+다른 사람 writeup을 보고 알았는데
그냥 env x='() { :;}; /bin/cat flag' ./shellshock 로 해도 된다. 생각해보니 그렇다 ㅇㅇ;
그런데 이상하게 segmentation fault가 뜬다
'Wargame > Pwnable.kr' 카테고리의 다른 글
[pwnable.kr] blackjack - 1 pt (0) | 2018.05.01 |
---|---|
[pwnable.kr] cmd1 - 1 pt (0) | 2018.05.01 |
[pwnable.kr] mistake - 1 pt (0) | 2018.04.27 |
[pwnable.kr] random - 1 pt [Toddler's Bottle] (0) | 2018.04.25 |
[pwnable.kr] fd - 1 pt [Toddler's Bottle] (0) | 2018.04.24 |