【TryHackMe】Valleyをやってみた CTF Writeup

谷の風景
※当サイトはプロモーションが含まれています

こんにちは、ぎんたです。

今回はTryHackMeで提供されている「Valley」というルームの攻略の過程を記事にしています

こちらの「ValleyのURL」でアクセスできます。

今回のCTFはいったん取得したアカウントと異なる、別グループユーザへのアクセスを行い、Rootフラグを取得するものとなっています。

  • ffufを使ったWebサイトでアクセスできるディレクトリを探索する方法に興味のある方
  • Wiresharkの解析に興味のある方
  • CTFに興味のある方

が今回の対象です。

無料でアクセス可能なので、試してみたい方はぜひやってみてください。

目次

Userフラグの取得

サービスの列挙

nmapでサービスを列挙します。

nmap -sSV -T4 10.10.130.51

  • -sV :サービスのバージョン列挙
  • -sS :SYNスキャン
  • -T4 : 高速モードで実行
nmapによる列挙

内容を確認したところ、SSHとHTTPのサービスが稼働しています。

認証情報が分からないので、HTTPサーバを確認します。

Webサーバの調査をし、ログインページと認証情報を発見

ホームページの確認

ページには、/galleryと/pricingというパスへのボタンを確認できます。

さらに詳細な調査をおこなうため、ffufというツールを使いWebサーバをスキャンします。

ffuf -w /usr/share/wordlists/dirb/common.txt -u http://10.10.130.51/FUZZ

ffufでstaticフォルダを発見

staticというフォルダが見つかりました。

発見したstaticフォルダを同様にスキャンします。

ffuf -w /usr/share/wordlists/dirb/common.txt -u http://10.10.130.51/static/FUZZ

ffufで00フォルダを発見

数字のファイルが気になるところです。

特に00というファイルは見られることを想定していないものである可能性があります。

00というファイルをブラウザで確認します。

00フォルダをブラウザで確認

開発者(valleyDev)のメモ書きのようです。

/dev1243224123123を削除するように促しているので、残っているか確認のためブラウザでアクセスしてみます。

valleyのログインページ

アクセスできる状態で残っていました。

どうやらログインページのようです。

認証情報が不明ですのでこのままだとログインできません。

試行錯誤の末、BurpSuiteを使ってリクエストの内容をキャプチャしてみましたが、どうやらログインページに入力した認証情報が送られていないようでした。

キャプチャした内容に認証情報がなかったためです。

おそらく、サーバではなく、クライアント側で認証をしているのでしょう。

ページのソースコードを表示します。

ログインページのソースコードを表示

dev.jsというファイルを読み込むようなので、dev.jsファイルにブラウザからアクセスしコードの内容を確認します。

URL:IPアドレス/dev1243224123123/dev.js

dev.jsファイルの内容

usernameとpasswordの箇所に認証情報が記載されていました。

その情報を使って先ほどのログイン画面に入ることができました。

また、メモ書きののような記載があります。

ログインページにログインし、noteを発見
  • 認証情報を再利用しないように
  • 脆弱性をチェックしてください
  • パッチをアップデートしてください
  • FTPのポートをノーマルポートに変更してください

という指示が記載されていました。

FTPは先ほどのnmapによる列挙で発見できなかったため、「-p-」を指定し、全ポートの探索に切り替えて再スキャンをします。

nmap -p- -T4 10.10.130.51

ぎんた

デフォルトだと代表的な1000ポートのみを探索するよ。

探索の結果、ポート37370番でFTPが稼働していました。

FTPサーバを調査し、SIEMのパケットキャプチャファイルを発見

先ほど発見した認証情報でFTPサーバにログインします。

FTPでログインし、pcapngファイルを発見

ログインできました。

フォルダの内容を確認すると3つのpcapngファイルを確認できます。

すべて端末にダウンロードします。

get ファイル名

Wiresharkでパケットを分析し、ユーザのSSHの認証情報を取得

それぞれWiresharkを起動してファイルを読み込むと、siemHTTP2.pcappngファイルで認証情報を確認しました。

フィルタをhttpに設定し、POSTメソッドでデータを送信しているフレームに着目しますと、FrameNo2335でユーザ名とパスワードを確認できます。

pcappngファイルの分析

この認証情報はSSHで使用できるものでした。

SSHでこのユーザ名でログインでき、フラグを取得できました。

ユーザフラグを取得

Rootフラグの取得

Crontabを調査し、定期的に実行されるジョブを確認

crontabではシステムで定期的に実行されるジョブを確認できます。

権限昇格に利用できる設定が無いかを調査します。

cat /etc/crontab

crontabの確認

rootユーザで「/photos/script/photoEncrypt.py」というプログラムを定期的に実行するようです。

もしこのファイルを書き換えることができれば、rootユーザで任意のプログラムを実行できます。

書き込み権限などを調査します。

valleyDev@valley:~$ ls -la /

total 945516

・・・

drwxr-xr-x   2 root root      4096 Mar  3 10:05 opt

drwxr-xr-x   4 root root      4096 Mar  6 15:41 photos

dr-xr-xr-x 171 root root         0 Jun  7 03:05 proc

・・・

root以外にphotosフォルダに対する書き込み権限がないようです。

photosEncrypt.py自体を書き換えることは難しそうです。

次に、「/photos/script/photoEncrypt.py」の内容を確認します。

cat /photos/script/photoEncrypt.py

photoEncrypt.pyの内容

base64を使ってイメージファイルをエンコードしているようです。

base64.pyのパーミッションを確認します。

base64.pyのパーミッションの確認

所有者はrootですが、所有グループはvalleyAdminです。

上記画像のパーミッションよりvalleyAdminグループにはbase64.pyへの書き込み権限があるので、悪意のあるコードに書き換えれば権限昇格ができそうです。

権限昇格の流れ
  • Cronで定期的にroot権限で「/photos/script/photoEncrypt.py」を実行
  • photoEncrypt.pyはbase64.pyをコード内で使用する。
  • base64.pyはvalleyAdminグループユーザに書き込み権限がある。
  • base64.pyに悪意のあるコードに書き換え、root権限で任意のコードを実行させ権限昇格を狙う

上記を達成するためには、valleyAdminグループユーザのアカウントへアクセスする必要があります。

現在使用しているユーザ(valleyDev)はvalleyDevグループに属しているので、base64.pyの書き換えができません。

vallleyDevユーザの所属グループの確認

別グループユーザにアクセスし、base64.pyを書き換えRootフラグ取得

ホームディレクトリを確認し、他にアクセスできそうなユーザを見てみます。

homeフォルダの内容を確認

siemDev、valleyユーザのフォルダがありました。

また、valleyAuthenticatorというELFファイルがあります。

ELFファイルはバイナリファイルで、Windowsでいうところのexeファイルのようなものです。

valleyAuthenticatorを実行するとユーザの認証に使用する実行ファイルと思われる挙動を示しました。

うまくいけば、文字列を探索することでvalleyユーザのパスワードを見つけることができるかもしれません。

権限昇格に利用できるものかどうかを確かめるために、いったん自分の端末にダウンロードします。

被害者サーバ上でhttp.serverを起動し、ファイルをダウンロードできるようにHTTPサーバを立ち上げます。

valleyDev@valley:/home$ python3 -m http.server 8000

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) …

次に自分の端末上で被害者サーバ上に起動しているHTTPサーバへアクセスし、ファイルをダウンロードします。

wget http://10.10.135.95:8000/valleyAuthenticator

–2023-06-07 11:50:37–  http://10.10.135.95:8000/valleyAuthenticator

Connecting to 10.10.135.95:8000… connected.

HTTP request sent, awaiting response… 200 OK

Length: 749128 (732K) [application/octet-stream]

Saving to: \u2018valleyAuthenticator\u2019

valleyAuthenticator 100%[===================>] 731.57K  –.-KB/s    in 0.002s 

2023-06-07 11:50:37 (299 MB/s) – \u2018valleyAuthenticator\u2019 saved [749128/749128]

ダウンロードしたvalleyAuthenticatorを調べて、パスワードを探索します。

いったん文字列をauthen.txtに書き出します。

strings valleyAuthenticator > authen.txt

文字列を探します。

subl authen.txt

文字列検索でハッシュ値を発見

「Welcome to Valley Inc. Authentica」という文字列の前にハッシュ値のような文字列がありました。

いくつかハッシュ値と思われる文字列をcrackstationで確認します。

crackstationのサイトはGoogleで検索したら出てきます。

crackstationでの分析

文字列はmd5形式のハッシュ値で、きちんと解読できたようです。

以下のコマンドを実行し、解読したパスワードを入力することでvalleyユーザに切り替えることができます。

su valley

valleyユーザのグループを確認します。

valleyユーザはvalleyAdminグループに所属

valleyAdminグループに属しているのでbase64.pyの書き換えが可能です。

以下の画像のようにbase64.pyを書き換えます。

reverseshellを起動させるプログラム

自分の端末に向けたリバースシェルを起動させるプログラムです。

次に自分の端末上で以下のコマンドを実行し、接続を待ち受けます。

nc -lvnp 4444

数分くらい待つとroot権限のシェルを獲得でき、rootフラグを獲得できました。

rootフラグを取得

まとめ

今回のCTFでは別グループユーザへのアクセスを行い、Rootフラグを取得することを行いました。

今回の記事が参考になれば幸いです。

以上、ぎんたでした。

サイバーセキュリティを学ぶ上で必要な攻撃と解析に関する他の記事は、以下のリンクで確認できます。

学習に関しましては、以下のセキュリティの勉強法、おすすめの学習本・動画の記事が多くの方に読まれています。

資格の記事については以下の記事がおすすめです。

ITエンジニアへの転職については以下の記事がおすすめです。

その他学習・転職関連に関しましては、以下の記事もあわせて読まれています。

ぜひご覧ください!

よかったらシェアしてね!
目次