본문으로 바로가기

[pwnable.kr] shellshock 풀이, write-up

category Wargame/pwnable.kr 2018. 11. 6. 18:12

pwnable.kr --- shellshock



ssh shellshock@pwnable.kr 2222 (pw:guest)로 접속하면 shellshock 문제를 만날 수 있다.


windows 환경의 cmd로 접속한것이 아니라 xshell5로 접속했다.


windows 환경의 cmd로 접속하려면 ssh shellshock@pwnable.kr -p2222과 같이 접속 해야한다.



우선 현재 디렉터리에 어떤 파일이 있는지 확인해보자.





우선 flag를 알아야 하는데 현재 id가 shellshock이기 때문에 flag를 볼 수 있는 권한이 없다.


bash와 shellshock이라는 elf 파일이 존재하고, 두 파일 모두 실행 가능하다.


shellshock 파일은 setuid가 shellshock_pwn의 권한으로 걸려있다.


shellshock elf 파일을 통해 shellshock_pwn의 권한으로 flag를 볼 수 있을것 같다.


shellshock.c를 가지고 shellshock elf 파일을 만들었을 확률이 높으므로 shellshock.c를 분석해보자.





setresuid, setresgid를 shellshock_pwn의 권한으로 부여받는다.


setresuid, setresgidset real, effective and saved user or group ID의 뜻을 가진다.


"/home/shellshock/bash를 실행하고 'echo shock_me"를 한다.



1
2
3
4
5
6
7
#include <stdio.h>
int main(){
    setresuid(getegid(), getegid(), getegid());
    setresgid(getegid(), getegid(), getegid());    
    system("/home/shellshock/bash -c 'echo shock_me'");                                
    return 0;
}
cs




아무리 생각해도 공격방법을 알수 없어 bash -c를 찾아보던 중 shellshock이 공격기법이라는 것을 알고 찾아 봤다. 



shellshock 취약점은 (CVE-2014-6271)으로 등록된 취약점이다.



CVE-2014-6271 취약점은 환경 변수에 코드를 삽입해 예상치 못한 행위를 하는 취약점이다.


아래의 예로 CVE-2014-6271를 알아보자.


우선 환경변수로 변수와 함수가 등록될 수 있다는것을 알자.





export라는 명령어를 통해 환경 변수를 등록했다.


x를 입력했을때 "marco"가 출력되지 않는 이유는 x는 변수이지, 함수가 아니기 때문에 실행할 수 없다.





함수명() { 함수 body; } 와 같이 환경변수의 함수를 선언할 수 있다.


export -f(function) 옵션을 통해서 환경변수에 등록 가능하고 등록된 환경변수가 함수이기 때문에 실행가능하다.



그러면 이제 shellshock의 취약점을 이용해보자.





x 라는 환경 변수에 함수 문법과 비슷한 "() { echo M4RC0; }" 문자열을 등록했다.


환경변수 x의 내용을 보면 string이 출력된다.





취약점이 있는 bash를 실행하고 다시 x를 보니 함수와 같이 함수로 등록되어 있다.


취약점이 있는 bash를 실행하면, 등록된 환경변수를 읽어오는데 함수 문법으로 되어 있으면 함수라고 판단하고 변수를 함수로 등록해버린다.


shellshock은 현재 setuid가 걸려있는 ./shellshock을 실행하면 shellshock_pwn의 권한으로 취약점이 있는 bash를 실행하고 flag를 보면 될것이다.





export가 아닌 env를 통해서도 공격이 가능하다.








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

[pwnable.kr] cmd1 풀이, write-up  (2) 2018.11.16
[pwnable.kr] mistake 풀이, write-up  (0) 2018.11.15
[pwnable.kr] random 풀이, write-up  (0) 2018.11.06
[pwnable.kr] flag 풀이, write-up  (1) 2018.11.02
[pwnable.kr] bof 풀이, write-up  (0) 2018.11.01