LoginSignup
0
0

More than 1 year has passed since last update.

TryHackMe biteme writeup

Last updated at Posted at 2022-04-28

Room: biteme
Difficulty: Medium
Show: Free

CTF形式でマシン攻略しフラグを取得するタイプのRoomになります。

列挙

nmapを実行したところ、22/tcp(ssh)と80/tcp(http)が稼働していることがわかりました。
nmap -v -Pn -T4 -sV -sC --version-all -A --osscan-guess 10.10.167.12
image.png
22/tcp(ssh)はひとまず置いておいて、80/tcp(http)にアクセスしてみると以下通りApache2 Ubuntu Default Pageが出力されました。
image.png
残念ながら当該ページには有用な情報が無さそうなので、隠しディレクトリがないかgobusterを使用して確認していきます。
gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u http://10.10.167.12/ -t 50
image.png
/consoleという怪しげなディレクトリを見つけたのでアクセスしてみます。
image.png
ログインページが出てきましたが、キャプチャがあるため辞書攻撃やブルートフォース攻撃は難しそうです。

ソースコードを確認していたところ、怪しげなスクリプトを発見しました。
難読化されているようですが、ログイン試行を一度行うと解除されたものを読むことが出来ました。
image.png
JasonからFredへのメッセージであり、PHPのsyntax highlightingが有効になっているとのことです。
Microsoftのドキュメントを確認したところ、syntax highlightingは他のチームメンバがソースコードに素早くアクセスできるようにするための機能とのことです。

ソースコードへのアクセス(/console/index.phpsへのアクセス)を行います。
image.png

どういう認証方法になっているのか確認できそうです。
また、functions.phpを読み込んでいるようなので、こちらのソースコード(/console/functions.phps)へもアクセスしてみます。
image.png
具体的なユーザ名とパスワードのチェック方法が見れました。
どうやら、ユーザ名は入力値をbin2hex化したものが/console/config.php内の「LOGIN_USER」と一致しているかで確認しているようです。
また、パスワードは入力値をmd5でハッシュ化したものの末尾3文字が「001」と一致しているかで確認しているようです。

以下の通り、ユーザ名とパスワードの解読を行いました。
ユーザ名
console/config.phpsへアクセスし、LOGIN_USERの値を取得。
image.png
取得した値「6a61736f6e5f746573745f6163636f756e74」をデコード。
image.png
以上より、ユーザ名は「jason_test_account」であることがわかりました。

パスワード
md5のレインボーテーブルから末尾3文字が「001」であるものを確認
※末尾3文字が「001」であればどれでも大丈夫です。
image.png
以上より、「violet」がパスワードに当てはまりそうです。
※これはかなり脆弱なチェック機構です。

取得したユーザ名とパスワードを使用してログインします。
image.png
すると、今度はMFAの入力を求められました。
image.png
MFAなので、入力制限がかかっていると思い、ヒントになるものはないかと探していたところ、またソースコード内に難読化されている部分を発見しました。
image.png
先ほどと同様に、一度適当に入力してContinueボタンを押すと内容が解読され、ブルートフォースの防御機構が無いことがわかりました。
ブルートフォースができることがわかったのでhydraを使用してMFAコードを取得します。
hydra -l none -P list.txt -s 80 10.10.167.12 http-post-form "/console/mfa.php:code=^PASS^:F=Incorrect code:H=Cookie: PHPSESSID=kc5t1bkroqus5ah97n56k4uo9s; user=jason_test_account; pwd=violet" -t 64
※list.txtは0000~9999のリストです。
※form認証ではありませんが、MFAコードを^PASS^として見立ててます。
image.png
上記より、MFAコードが「1494」であることがわかりました。
image.png
MFA突破後は上記ページが現れました。
「File browser」と「File viewer」とのことなので、なんとなくbrowserがlinuxコマンドの「ls」コマンド、viewerが「cat」コマンドのように想像がつきます。
試しにbrowserで現ディレクトリを参照したところ、予想通りの結果になりました。
image.png
この機能を使えばマシン内部の探索が行えそうです。

しばらく探索を行ったところ、/home/jason/.ssh/にてSSH接続用の秘密鍵を取得することが出来ました。
image.png
ただ、単純に秘密鍵を使用してSSH接続を行うことはできませんでした。
image.png
そこで、秘密鍵からパスフレーズを解読します。
解読にはssh2johnjohn the ripperを使用します。
まずはssh2johnを使用し、秘密鍵からパスフレーズのハッシュ値を取得します。
image.png
続いて取得したハッシュ値をjohn the ripperで解読します。
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
image.png
上記よりパスフレーズが取得できましたのでSSH接続を行います。
image.png
/home/jasonにてuser.txtを取得しました。
image.png

権限昇格

権限昇格①

sudo -lの結果、パスワード無しでfredの権限ですべてのコマンドを実行できることがわかりました。
image.png
sudo -u fred /bin/bashにてfred権限のシェルを取得します。
image.png

権限昇格②

sudo -lの結果、パスワード無しでrootの権限で/bin/systemctl restart fail2banを実行できることがわかりました。
image.png
fail2banは使用したことがありませんが、qiita記事より、振る舞い検知型のIPSソフトウェアであることがわかりました。
また、当該記事より、fail2banにはアクセス違反時の動作にOSコマンドを設定することができ、これを悪用して権限昇格できることがわかりました。

具体的には以下のステップで権限昇格を行います。

  1. IPアドレスがiptablesの拒否リストに追加された時に実行されるコマンドを変更する。(シェル取得用コマンドにする)
  2. root権限でfail2banをリスタートする。(sudo /bin/systemctl restart fail2banの実行)
  3. 自身のIPアドレスがiptablesの拒否リストに入るよう、SSHにブルートフォース攻撃を行う。

上記を実施するために、まずはアクセス違反時の動作を定義する「iptables-multiport.conf」を捜索します。
image.png
find / -maxdepth 4 -name iptables-multiport.conf 2>/dev/nullにて捜索した結果、/etc/fail2ban/action.d/に存在することがわかりました。
また、当該ファイルの所有者はfredであり、書き込み権限があることもわかりました。

では、実際にアクセス違反時の動作を権限昇格用のコマンドに変更します。
image.png
アクセス違反時の動作は「actionban」と「actionunban」によって定義されているので、ここへシェル取得用のコマンドを記載します。
次に、sudo /bin/systemctl restart fail2banにてfail2banをリスタートします。
image.png
最後に、自身のマシンで接続を待ち受け、hydraを使用してSSHに対してブルートフォース攻撃を行います。
image.png
無事、root権限のシェルを取得することが出来ました。
/root/root.txtにてfragを取得し、マシン攻略完了です。
image.png

0
0
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
0
0