こんにちは、ぎんたです。
今回はTryHackMeで提供されている「Valley」というルームの攻略の過程を記事にしています。
こちらの「ValleyのURL」でアクセスできます。
今回のCTFはいったん取得したアカウントと異なる、別グループユーザへのアクセスを行い、Rootフラグを取得するものとなっています。
- ffufを使ったWebサイトでアクセスできるディレクトリを探索する方法に興味のある方
- Wiresharkの解析に興味のある方
- CTFに興味のある方
が今回の対象です。
無料でアクセス可能なので、試してみたい方はぜひやってみてください。
スポンサーリンク
Userフラグの取得
サービスの列挙
nmapでサービスを列挙します。
nmap -sSV -T4 10.10.130.51
- -sV :サービスのバージョン列挙
- -sS :SYNスキャン
- -T4 : 高速モードで実行
内容を確認したところ、SSHとHTTPのサービスが稼働しています。
認証情報が分からないので、HTTPサーバを確認します。
Webサーバの調査をし、ログインページと認証情報を発見
ページには、/galleryと/pricingというパスへのボタンを確認できます。
さらに詳細な調査をおこなうため、ffufというツールを使いWebサーバをスキャンします。
ffuf -w /usr/share/wordlists/dirb/common.txt -u http://10.10.130.51/FUZZ
staticというフォルダが見つかりました。
発見したstaticフォルダを同様にスキャンします。
ffuf -w /usr/share/wordlists/dirb/common.txt -u http://10.10.130.51/static/FUZZ
数字のファイルが気になるところです。
特に00というファイルは見られることを想定していないものである可能性があります。
00というファイルをブラウザで確認します。
開発者(valleyDev)のメモ書きのようです。
/dev1243224123123を削除するように促しているので、残っているか確認のためブラウザでアクセスしてみます。
アクセスできる状態で残っていました。
どうやらログインページのようです。
認証情報が不明ですのでこのままだとログインできません。
試行錯誤の末、BurpSuiteを使ってリクエストの内容をキャプチャしてみましたが、どうやらログインページに入力した認証情報が送られていないようでした。
キャプチャした内容に認証情報がなかったためです。
おそらく、サーバではなく、クライアント側で認証をしているのでしょう。
ページのソースコードを表示します。
dev.jsというファイルを読み込むようなので、dev.jsファイルにブラウザからアクセスしコードの内容を確認します。
URL:IPアドレス/dev1243224123123/dev.js
usernameとpasswordの箇所に認証情報が記載されていました。
その情報を使って先ほどのログイン画面に入ることができました。
また、メモ書きののような記載があります。
- 認証情報を再利用しないように
- 脆弱性をチェックしてください
- パッチをアップデートしてください
- FTPのポートをノーマルポートに変更してください
という指示が記載されていました。
FTPは先ほどのnmapによる列挙で発見できなかったため、「-p-」を指定し、全ポートの探索に切り替えて再スキャンをします。
nmap -p- -T4 10.10.130.51
デフォルトだと代表的な1000ポートのみを探索するよ。
探索の結果、ポート37370番でFTPが稼働していました。
FTPサーバを調査し、SIEMのパケットキャプチャファイルを発見
先ほど発見した認証情報でFTPサーバにログインします。
ログインできました。
フォルダの内容を確認すると3つのpcapngファイルを確認できます。
すべて端末にダウンロードします。
get ファイル名
Wiresharkでパケットを分析し、ユーザのSSHの認証情報を取得
それぞれWiresharkを起動してファイルを読み込むと、siemHTTP2.pcappngファイルで認証情報を確認しました。
フィルタをhttpに設定し、POSTメソッドでデータを送信しているフレームに着目しますと、FrameNo2335でユーザ名とパスワードを確認できます。
この認証情報はSSHで使用できるものでした。
SSHでこのユーザ名でログインでき、フラグを取得できました。
Rootフラグの取得
Crontabを調査し、定期的に実行されるジョブを確認
crontabではシステムで定期的に実行されるジョブを確認できます。
権限昇格に利用できる設定が無いかを調査します。
cat /etc/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
base64を使ってイメージファイルをエンコードしているようです。
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の書き換えができません。
別グループユーザにアクセスし、base64.pyを書き換えRootフラグ取得
ホームディレクトリを確認し、他にアクセスできそうなユーザを見てみます。
siemDev、valleyユーザのフォルダがありました。
また、valleyAuthenticatorというELFファイルがあります。
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で確認します。
文字列はmd5形式のハッシュ値で、きちんと解読できたようです。
以下のコマンドを実行し、解読したパスワードを入力することでvalleyユーザに切り替えることができます。
su valley
valleyユーザのグループを確認します。
valleyAdminグループに属しているのでbase64.pyの書き換えが可能です。
以下の画像のようにbase64.pyを書き換えます。
自分の端末に向けたリバースシェルを起動させるプログラムです。
次に自分の端末上で以下のコマンドを実行し、接続を待ち受けます。
nc -lvnp 4444
数分くらい待つとroot権限のシェルを獲得でき、rootフラグを獲得できました。
まとめ
今回のCTFでは別グループユーザへのアクセスを行い、Rootフラグを取得することを行いました。
今回の記事が参考になれば幸いです。
以上、ぎんたでした。
サイバーセキュリティを学ぶ上で必要な攻撃と解析に関する他の記事は、以下のリンクで確認できます。
学習に関しましては、以下のセキュリティの勉強法、おすすめの学習本・動画の記事が多くの方に読まれています。
資格の記事については以下の記事がおすすめです。
ITエンジニアへの転職については以下の記事がおすすめです。
その他学習・転職関連に関しましては、以下の記事もあわせて読まれています。
ぜひご覧ください!