System&Write up/Pwnable.kr

[pwnable.kr] Toddler's Bottle - shellshock

Jubil 2017. 12. 17. 20:32
반응형

[pwnable.kr] Toddler’s Bottle – shellshock

 


 


 

 

 


 

디렉터리에 bash 쉘도 있습니다. bash 쉘에 대한 충격적인 뉴스라고 하네요. 그래서 bash shellshock에 대해서 검색해봤습니다.

 


 

version을 보니 shellshock 취약점이 있었던 때의 bash인 것 같습니다.

 

일단 기본적인 것부터 얘기하도록 하겠습니다.

 

쉘에서 변수를 만들고 싶으면 x=1 이렇게 대입하고 echo $x 이렇게 출력해보면 됩니다. 하지만, 완벽하게 환경 변수에 올리고 싶으면 export x=1 해줘야 합니다.


 

 

그리고 환경 변수에 함수도 등록할 수 있습니다. 마찬가지로 hello() { echo hello; }  이렇게 만들고, export –f hello  로 등록해줄 수 있습니다.


 

 

하지만 export hello=’() { echo hello; }’ 이렇게 변수로 선언을 하고 subshell을 실행하면 ()로 시작한 변수의 { … } 부분이 함수로 인식되고, 그 뒤에 나오는 command까지 실행한다는 것입니다.


 

 

이렇게 변수였던 hellosubshell을 실행하면,


변수는 사라지고 { … } 안에 있던 게 함수가 되어 나옵니다.

 

 


다시, 저 뒤에 다른 명령어를 붙이면?

저렇게 뒤에 있는 명령어가 실행이 됩니다.

 

 

문제에서도 활용할 수 있겠네요. flag를 읽으려면 shellshock_pwn gid가 필요합니다.

 


여기서 저 부분을 실행할 때, bash 자체의 취약점을 이용해서 업그레이드된 gidcat flag를 해준다면 flag를 읽을 수 있을 것입니다.

 

 


 

원리는 bash 쉘이 실행되고 환경 변수를 초기화할 때,   () {   이런 모양으로 시작되는 변수가 있으면 그 부분을 parse_and_execute 합니다. 저 변수를 보고 catFlag() { echo a; }; /bin/cat flagparse해서 execute하는 것이죠. 그래서 flag가 출력되는 것입니다.

 

함수 만드는 것 자체가 쉘 스크립트 기반으로 하는 거라서, parse해서 실행하게 되면 child (sub )을 띄웠을 뿐인데, 저 코드가 실행되는 것입니다. (놀랍습니다…)

반응형