해킹/호스트 기반 모의해킹

[ 호스트 기반 모의해킹 ] 윈도우 원격 접근 방법

Haemaa 2023. 11. 4. 22:58
윈도우 원격 접근

- 리눅스 원격 접근

> SSH, Telnet, 웹, VNC ...

 

- 윈도우

> RDP (3389)

> WinRM (5985, 5986)

> SMB (445)

> WMI (135)

 

- 공식 권장 - RDP + WinRM

- 비공식 - SMB + WMI

 

 

 

실제 구현

Hack the box 모의해킹이나 박스 형태의 모의 침투를 수행할 때 계정 정보를 획득했다고 가정해보자.

발견한 계정 정보는 다음과 같다.
Administrators : Password123!

 

그럼 이 정보를 가지고 호스트에 어떻게 들어갈 것인지를 알아보자.

 

3389 조사 - rdp

가장 처음으로 3389를 조사할 수 있다.

nmap -p 3389 호스트 ip -Pn -n --open -sV

결과
PORT    STATE  SERVICE        VERSION
3389/tcp open ms-wbt-server  Microsoft Terminal Services
Service Info: OS : Windows; CPE: cpe:/o:microsoft:windows

 

이런 식으로 3389 포트가 열려있다면 xfreerdp 툴을 이용할 수 있다.

/dynamic-resolution 옵션을 줘야 해상도를 자유롭게 조절할 수 있다.
xfreerdp /u:Administrators /p:'Password123!' /v:호스트 ip /dynamic-resolution


그럼 인증서를 믿을 거냐고 물어보는데 Y를 입력해준다.
Do you trust the above certificate? (Y/T/N)

그럼 xfreerdp 창이 뜰 것이다.


만약 xfreerdp가 안 된다. 하면 rdesktop을 사용할 수도 있다.
rdesktop -u Administrator -p 'Password123!' 호스트 ip

역시나 인증서 믿을 거냐고 하면 yes
Do you trust this certificate (yes/no)?

이러면 rdesktop 창이 뜰 것이다.

 

참고로, RDP는 Local Administrator 가 아니어도 된다.

RDP -> Local Administrator Privilege X

 

대신에 rdp로 로그인이 가능한 유저는

Remote Desktop Users

라는 그룹에 속해있어야 한다.

 

확인을 위해서는 net localgroup "Remote Desktop Users" 명령어로 가능하다.

net localgroup "Remote Desktop Users"

결과
Alias name    Remote Desktop Users
Comment       Members in this group are granted the right to logon remotely

Members
----------------------------------------------------------------------------
low
haemaa
The command completed successfully

 

 

5985, 5986 조사 - WinRM

WinRM 은 Windows Remote Management 라는 서비스이다.

 

포트 5985는 http 이고 포트 5986은 https라고 생각하면 된다.

 

웹 기반이다.

SOAP로 http를 요청하는 프로토콜 기반이다.

 

칼리리눅스에 기본적으로 evil-winrm이라는 툴이 존재한다.
evil-winrm -i 호스트 ip -u Administrator -p 'Password123!'

입력하면 쉘을 획득할 수 있다.

리눅스에서 SSH로 로그인하는 것과 비슷하다.

 

evil-winrm은 Powershell 기반이다.

evil-winrm은 기본적으로 로컬 관리자 권한이 필요한데, 항상 필요하지는 않다.

 

로컬 관리자 권한이 아닌데도 evil-winrm이 가능한 경우는, 해당 계정이 Remote Management Users 그룹일 경우이다.

net user haemaa

결과
Local Group Memberships    Remote Management Users

 

저번 핵더박스에서도 그렇고 Windows 기반의 모의 침투일 경우에는

evil-winrm을 진짜로 많이 쓰게 된다....

실제 solution이나 script나 administrator 분들이 많이 씀

그래서 attacker들도 편승해서 사용가능 ㅋ

 

445 포트 조사 - SMB

nmap -p 445 -Pn -n --open 호스트_ip

PORT     STATE   SERVICE
445/tcp  open    microsoft-ds

 

그럼 SMB 에서 어떻게 원격 접속이 가능하냐

 

항상 가능한건 아니지만

psexec 이라는 툴이 사용하는 방법을 이용하면 된다.

AV나 EDR이 탐지하는 로직도 많고 그것을 bypass(우회)하는 방법도 많아서 굉장히 재밌다고 한다..

 

또는 impacket 이라는 python 기반의 window와 관련된 라이브러리 툴을 이용한다.

사용법

처음엔 업데이트를 해준다.
sudo apt update -y

칼리에는 기본적으로 설치되어 있지만 혹시 모르니 설치 해준다.
sudo apt install impacket-scripts

아래 명령어를 통해 쉘을 얻게 된다.
impacket-psexec Administrator:'Password123!'@호스트_ip

 

 

참고) SMB로 어떻게 쉘을 얻는지 원리

SMB -> ADMIN$ 라는 SHARE가 존재하는데 실질적으로 C:\windows\system32 이다.

여기에 SUPHDaDO.exe 등의 서비스 바이너리를 하나 업로드한다.

또 SMB로 RPC(SCM)을 사용할 수가 있는데 SVCManager 라는 RPC 엔드포인트가 있고 업로드한 SUPHDaDO.exe를 이용해서 새로운 서비스를 만들어라 라고 명령한다. 이 서비스의 이름은 랜덤한 4글자로 이루어져 있다. (ex: ohGC)

그리고 업로드한 파일의 리버스 쉘을 트리거하게 된다.

 

psexec 같은 경우는 무조건적으로 Local Administrator 권한이 필요하다.

그리고 SMB는 윈도우 서비스를 이용하여 리버스 쉘을 획득하는 원리이다 보니 거의 무조건적으로 SYSTEM 권한을 획득할 수 있다.

쉘 내에서 exit으로 나갈 경우 알아서 ohGC의 서비스 바이너리와 SUPHDaDO.exe 등의 실행 파일이 삭제된다.

 

 

135 포트 조사 - WMI

 

WMI - Windows Management Instrumentation 135

nmap -p 135,445 -Pn -n --open 호스트 ip

결과
PORT      STATE      SERVICE
135/tcp   open       msrpc
445/tcp   open       microsoft-ds

 

이런식으로 서비스 nmap 스캔 결과 135포트가 열려있다면, WMI로 쉘을 획득할 수 있다.

툴은 impacket-wmiexec을 이용한다.

impacket-wmiexec Administrator:'Password123!'@호스트_ip

 

실행 성공 시 로컬 관리자 권한으로 쉘을 얻을 수가 있다. SMB처럼 윈도우의 서비스를 실행하여 쉘을 얻는 방식은 아님.

 

WMI도 로컬 관리자 권한이 필수적이다.

 

RDP나 WinRM 같은 경우는 로컬 관리자 권한이 필수적이진 않지만

"Remote Desktop Users" 그룹이나 "Remote Management Users" 그룹에 속해야 한다.