쉘쇼크는 시스템 환경변수에 다음과 같이 특정 패턴의 문자열과 함께 임의의 명령어가 저장되어 있으면 쉘이 실행될 때 해당 명령어가 실행되는 취약점이다.
() { :;}; <command>
쉘쇼크 취약점이 공개될 때 쉘쇼크 취약 여부를 테스트하기 위해 알려진 명령문은 다음과 같다.
env x='() { :;}; echo vulnerable' bash -c 'echo this is test'
x 환경 변수에 쉘쇼크 공격 패턴과 명령어(echo vulnerable)을 지정한 뒤 지정한 명령어가 실행되는지 확인하는 것이다. 쉘쇼크 취약점에 취약하다면 vulnerable 문자열이 출력된다.
A9 그룹의 Shellshock Vulnerability 메뉴를 선택한다.
CGI가 보이고 레퍼러 헤더를 공격하라는 힌트가 있다.
CGI로 구현된 웹 애플리케이션의 경우 요청 헤더가 환경 변수로 저장됨으로써, 웹을 통해 쉘쇼크 공격이 가능하다.
페이지의 소스코드를 보면 <iframe>태그를 통해 요청한 shellshock.sh 쉘 스크립트가 실행되고 있다. shellshock.sh가 요청되면 bash에 의해 쉘 스크립트가 실행된다. 이때 쉘쇼크 취약점이 존재하므로, SHELLSHOCK.SH를 요청하는 요청 헤더에쉘쇼크 공격 코드를 삽입하여 전송하면 원하는 명령을 실행할 수 있다.
쉘쇼크 공격은 명령어 실행이 가능한 공격이다. 이처럼 원격 명령어나 원격 코드 실행이 가능한 경우 명령어를 실행하여 쉘을 획득 후 호스트 침투 및 추가 공격을 진행한다. 쉘을 획득하는 기법은 주로 리버스 쉘을 이용한다. 기업 네트워크 환경에서 내부에서 외부로의 접속은 허용되어도 외부에서 내부로의 접속은 방화벽에 차단되기 때문이다.
먼저 칼리 리눅스 터미널에서 nc 명령어를 이용해 서버모드로 실행한다.
shellshock.sh 요청을 리피터 기능을 이용해 레퍼러 헤더의 값을 다음과 같이 변경한다.
() { :;}; 쉘쇼크 공격 패턴 뒤에 nc를 이용하여 칼리 리눅스에서 리스닝하고 있는 4000번 포트로 접속한다.
192.168.56.102는 칼리 리눅스의 IP다.
요청 전송 후 리버스 쉘이 연결되고 명령어를 실행할 수 있다.
아래의 명령어를 실행하면 프롬프트가 나타난다.
python -c 'import pty; pty.spawn("/bin/bash");'
쉘을 획득했지만 id 명령어의 결과에서 보이듯이 www-data라는 사용자 권한을 획득한 것이다. root 권한이 아니기에 추가 공격을 진행하는데 제한이 있다. 이런 경우 실제로는 루트 권한 획득을 위한 권한 상승 공격으로 이어진다.
'bWAPP(Bee Box)' 카테고리의 다른 글
PHP-CGI 취약점 (0) | 2023.11.16 |
---|---|
하트블리드 취약점 (0) | 2023.11.15 |
XXE(XML 외부 엔티티) 공격 (0) | 2023.11.14 |
접근 통제 취약점 공격 (0) | 2023.11.13 |
민감한 데이터 노출 3 (0) | 2023.11.13 |