<Wargame & CTF>/Pwnable.kr

[Pwnable.kr]shellshock

gosoeungduk 2019. 5. 11. 02:43
반응형

 

https://namu.wiki/w/%EC%85%B8%EC%87%BC%ED%81%AC

 

셸쇼크 - 나무위키

본격적으로 설명하기에 앞서 Bash의 환경변수에 대해 간략하게 알아보자. $ hi="안녕!" $ echo $hi 안녕!hi라는 변수를 생성, echo 함수를 통해 출력하는 구문이다. $hi를 입력했을 때 Bash shell은 c의 매크로처럼 "안녕!"이라고 변환해준다. $ hi="안녕!" $ export hi $ printenv | grep hi hi="안녕!"이번엔 변수를 선언하고 export를 통해 환경변수에 등록해보자. printenv로 환경변수 목

namu.wiki

꺼무위키에 설명이 잘 나와있었다.

취약점의 종류는  CVE-2014-6271 이다.

 

bash에 대한 놀라운 소식이 있단다 ;; (shellshock 취약점이 진짜 있을줄은 몰랐다)

 

접속해보면 bash 와 바이너리 그리고 C소스와 flag가 있다.

 

소스코드는 이와 같다. system 함수는 bash로 shock_me를 출력시키고 있다.

 

위에 있는 나무위키 문서를 보면 알겠지만, 지금 내 bash가 취약한지 아닌지 확인하려면

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

이 구문을 쳐서 "this is a test" 만 나오면 양호, "vulnerable\n this is a test" 가 나오면 취약하다고 볼 수 있다.

(env 명령은 해당 환경변수로 명령을 이행하라는 뜻임)

 

문제에서 준 bash가 맨 위의 취약점을 가진 bash임을 확인할 수 있다.

 

본격적으로 CVE-2014-6271 에 대해 알아보자.

 

우리는 여태껏 환경변수를 이용해왔는데 

tmp="pppp"

export tmp

이처럼 변수 값을 넣어주는 경우가 많았다.

 

하지만 환경변수에는 export -f 라는 옵션을 주어서 함수를 등록시킬 수도 있다고 한다.

그러나 -f를 주지않고 함수를 export 하는경우 현재의 메인 shell에서는 함수로써 동작하지않지만 ( 문자열이기 때문)

bash shell을 child shell로 실행시키면 이 bash는 그 문자열형태의 함수를 진짜 함수로 간주하여

함수를 실행한다.

 

예제를 보자.

export 중에 오타가 나서 함수 실행이 원활하지않지만 방금 말한 차이점은 확연히 볼 수 있다.

export 후, 메인 shell에서 hi를 실행시켰을 때는 "command not found" 라고 반려시키지만,

bash shell을 child shell로써 실행시키면 hi는 함수로 간주 후에, 실행하려고 난리가 난다.

그냥 함수를 실행하지 않아도 bash의 변수 초기화 과정에서 실행을 시켜버린다.

 

여기에 추가하여 

() { (명령문) }; (다른 실행 가능한 코드);

이런 모습으로 함수 정의 뒤에 다른 실행 가능한 코드, 예를 들면 exploit 코드라던지?

이런걸 세미콜론 뒤로 이어 붙이면 그 코드가 bash 실행 시에 실행된다.

 

이것처럼 말이다.

 

그러면 이제 문제 풀 방법은 정해졌다. 함수 아무거나 정의 후에 뒤에 flag를 읽을 수 있는 명령을 준다.

그리고 온전한 권한으로 bash를 실행시킬 수 있는 shellshock를 실행시킨다.

 

 

완성!

 

 

 

<공부가 필요한 것>

1. 리눅스 권한

2. 쉘 쇼크 다시 공부해보기 자세히.

반응형

'<Wargame & CTF> > Pwnable.kr' 카테고리의 다른 글

[Pwnable.kr] blukat  (0) 2021.05.30
[Pwnable.kr] asm  (0) 2021.05.29
[Pwnable.kr] memcpy  (0) 2021.05.29
[Pwnable.kr] Unlink  (0) 2020.09.22
[Pwnable.kr]input  (0) 2019.05.11