관리 메뉴

Information Security

Ghostcat : Tomcat-AJP (CVE-2020-1938) 본문

CVE 취약점

Ghostcat : Tomcat-AJP (CVE-2020-1938)

HackingPractice 2020. 3. 22. 11:39

SSL 통신을 위해 apt-transport-https와 ca-certificates를 설치한다. apt-transport-https는 apt 명령어를 실행할 때 https로 변환해주는 패키지이고, ca-certificates는 인증 기관(CA) 인증서이다.

그림 1-1 인증서 설치

다음으로 dirmngr을 설치한다. dirmngr은 'X.509 인증서의 폐기 목록(CRLs)'이나 인증서를 다운로드하기 위한 서버이다.

그림 1-2 dirmmgr

apt에서 인증키를 관리하는 도구인 apt-key 명령어로 key 서버에서 key를 받는다.

그림 1-3 key

Docker를 다운로드받기 위해 Docker 저장소를 칼리 리눅스에 추가한다.

그림 1-4 docker 저장소

칼리 리눅스 apt-get update 업데이트를 했다.

그림 1-5 update

저장소를 업데이트하고, docker-engine을 설치한다.

그림 1-6 docker engine

docker를 이용해 취약한 Tomcat 버전 9.0.29를 설치했다.

그림 1-7 docker 설치

Tomcat 설치를 확인하기위해 http://127.0.0.1:8080 페이지를 접속해 Tocmat default 페이지를 확인했다.

그림 1-8 Tomcat 페이지

server.xml 파이를 에서 AJP 프로토컬 관련된 부분을 확인했다.

그림 1-9 server.xml

 

8009 포트가 열려있는 것을 확인했다.

그림 1-10 포트

http://127.0.0.1/WEB-INF/web.xml 페이지를 접속했는데 아래와 같이 404 에러를 확인할 수 있다.

그림 1-11 web.xml

https://github.com/00theway/Ghostcat-CNVD-2020-10487 POC코드를 다운받았다.

그림 1-12 POC 코드

공격코드를 이용해 공격 시 web.xml 파일을 읽을 수 있는 것을 확인할 수 있다.

그림 1-13 AJP Shooter

webshell을 서버에 강제로 업로하는 코드를 만들었다.

그림 1-14 webshell.txt

webapps/ROOT 폴더에 webshell.txt 파일을 복사했다.

그림 1-15 복사

업로드된 webshell.txt 파일을 읽어지는 것을 확인했다.

그림 1-16 read 함수

eval 함수를 이용해 webshell.txt 파일을 실행시켰다.

그림 1-17 eval 함수

http://127.0.0.1:8080/cmd.jsp webshell 업로드가 성공한 것을 알 수 있다.

그림 1-18 cmd.jsp

리눅스 명령어 id를 입력하면 root라는 것을 확인할 수 있다.

그림 1-19 id 명령어

cat 명령어를 통해 /etc/passwd를 확인할 수 있다.

그림 1-20 /etc/passwd