LoginSignup
1
0

前書き

本記事は、TryHackMeのRoom mKingdomのwriteupです。
投稿時点で最新のRoomで難易度はEasyですが、Linuxの権限に関して改めて学びになりました。
投稿時点で最新の為、「もしかしたらほかにも方法があるのか...」と思っています。
もし他の方法や気づけていない洞察があるなら勉強したいと思っています。

偵察

まずはポートスキャンから行います。
85/tcpが開いていることが分かります。

rustscan -a $TARGET
PORT   STATE SERVICE    REASON
85/tcp open  mit-ml-dev syn-ack

サービスの詳細を知る為にnmapによる詳細なスキャンも行います。

nmap -sV -sC $TARGET -p 85
PORT   STATE SERVICE VERSION
85/tcp open  http    Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: 0H N0! PWN3D 4G4IN
MAC Address: 02:DF:D6:47:3A:B9 (Unknown)

初期侵入まで

ポートスキャンの結果から、稼働しているサービスはwebサーバ的なものだと推測できます。Apache httpd 2.4.7に関して軽く調査しましたが、何か使えそうな脆弱性は存在しなさそうだったのでwebサイト(hxxp[://]mkingdom[.]thm:85/) にアクセスして詳細を見ていきます。

スクリーンショット 2024-06-15 224811.png

サイトにはボタンなどがなく、ソースコードを確認しましたが、特に興味深いものはありませんでした。
そこでgobusterでディレクトリ探索を行います。

gobuster dir -u http://mkingdom.thm:85/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 
/app (Status: 301)

/appが見つかりましたのでアクセスしてみます。

すると、ボタンが一つだけのページに飛びますのでボタンをクリックしました。
ソースコードからも分かりますが、ボタンで/app/castle/に飛ぶようになっていました。

スクリーンショット 2024-06-15 225525.png

ここで時間をかけて再度ディレクトリの列挙を試したり、BlogやContactページにアクセスしました。
CMSとしてconcrete5というものを使用していそうなことが分かり、いくつかの既知の脆弱性はあるものの、私が見た限り、初期侵入につながりそうなものはありませんでした。

少し調査を継続すると、画面下部のボタンかログインページへアクセスできることを発見しました。
一度試しで、admin:passwordといういかにも脆弱な認証情報でログインを試すとなんとアクセスできてしまいました。
(たまたま一発目で当たったのか、またはなんでも通るような設計にしていたのか...)

スクリーンショット 2024-06-16 094631.png

とにかく管理者ページに入れました。
少し調査すると、Filesからファイルがアップロードできそうだったのでphpリバースシェルを試しましたが、拡張子の制限があってうまくいきません。ほかの機能もみていくと、System & Settings>>Allowed File Types から受け入れる拡張子が設定できることが分かります。ここにphpを追加し、再度phpのリバースシェルをアップロードすると見事うまくいきました!

権限昇格①

初期侵入が完了したのでここからはフラグの取得と権限昇格を目指します。
ここからは大きく2通りのルートがあると思います。
(①の方が少しショートカットできる程度ですが...)

① catを使用してダイレクトにmario

現状は、www-dataとしてリバースシェルが取得できています。
SUIDが設定されているファイルを確認すると、toadというユーザが所有者のcatにSUIDが設定されていることが分かります。
調査した限り、SUIDが設定されているcatからすぐさま権限昇格につながるわけではなさそうです(sshの秘密鍵を覗かれてしまう可能性などは考えられますが...) 。ただし、/home/toadディレクトリにはアクセスできませんが、ホームディレクトリ配下に一般的に存在するファイルを指定して閲覧することは可能です。
そこで/home/toad/.bashrcを閲覧すると、export PWD_token='_REDACTED_'という環境変数が見つかります。base64でエンコードされていそうなのでデコードすると、_REDACTED_が得られます。
現状ユーザは、toadmarioが存在しますので、上記の文字列がパスワードかどうか試します。
su toadではうまくいきませんが、su marioだとうまくいきます。

② mysqlで一旦toadを経由する方法

linpeasなどを利用して権限昇格への手がかりを探ると、mysqlにrootとしてパスワードなしで接続可能なことが分かります。mysql内を捜索すると、toadのパスワードハッシュ*67D97D25E90A4914F673B30_REDACTED_ が得られます。johntheripperなどのツールでオフラインクラックするとtoadの認証情報が得られます。toadは大きな権限を与えられていませんが、環境変数や①のように.bashrcファイルを確認することでmarioの認証情報が得られます。

権限昇格②

marioのホームディレクトリ下に最初のフラグがあります。
※最初のフラグは読み取り権限はあるはずですがcatを使用すると「権限がない」と言われます。方法はいろいろありますが、例えばheadを使用すると見れます。なぜそうなるかは最後に深堀します。

thm{030a76_REDACTED_}

marioは、sudo権限でidバイナリが実行できます。ここから何かできるのか暫く調べましたが有益な情報が得られませんでした。(環境変数のPATHを書き換えるなどを考えましたが、絶対パス指定なので恐らく無理かな...)

行き詰ったため、あらためて権限昇格につながりそうなものを調査しました。pspyを使用すると興味深いプロセスを発見しました。

2024/06/15 04:59:01 CMD: UID=0     PID=2652   | curl mkingdom.thm:85/app/castle/application/counter.sh 

2024/06/15 05:00:01 CMD: UID=0     PID=2662   | /bin/sh -c curl mkingdom.thm:85/app/castle/application/counter.sh | bash >> /var/log/up.log  

mkingdom.thm:85/app/castle/application/counter.sh を取得し、実行し、その出力を/var/log/up.logに書き込んでいるようです。UID=0の為、rootとして実行されていることも分かります。

実行されるシェルスクリプトを書き換える、あるいは"誤認"させることで権限昇格することを考えます。counter.shを確認しましたが、書き込み権限がなく書き換えることは難しそうです。しかし、/etc/hostsファイルに書き込み権限がありましたので、mkingdom.thmに対応するIPアドレスを攻撃者のものに書き換える方法を試しました。攻撃者マシン側でポート85番で/app/castle/application/counter.shを用意します。counter.shにはリバースシェルを実行させるためのスクリプトを書き込み、、リバースシェルをリッスン。しばらくすると、リバースシェルが確立され、root権限をとることができます。

thm{e8b2f52d8_REDACTED_}

深堀

ログインがあっさりできた原因

何故あっさりログインできたのか分からなかったため、疑問を解消するためターゲット内のソースコードを漁ってみましたが処理の部分は面倒くさそうだったので断念しました。
(mysqlにハッシュ処理されたadminのパスワードがあり、クラックするとpasswordになっていたのでおそらくここを参照してログイン処理していそうです。Easyということもあるので脆弱な設定になっていて今回は偶然一発目でパスワードを当ててしまったのかな?...)

catでuser.txtが閲覧できない原因

ファイル自体の権限は下記のように読み取り権限が設定されています。本来ならcatで閲覧できるはずです。

ls -l user.txt
-rw-r--r-- 1 root root 38 Nov 27  2023 user.txt

しかし、下記のように読み取りできません...

cat user.txt
cat: user.txt: Permission denied

原因はおそらくcatの権限だと思います。
catの所有者はtoadであり、SUIDが設定されています。

ls -l /bin/cat
-rwsr-xr-x 1 toad root 47904 Mar 10  2016 /bin/cat

そしてmarioのホームディレクトリに対するアクセス権がtoadにはありません。

ls -ld ~
drwx------ 15 mario mario 4096 Jun 15 21:14 /home/mario

したがって、
SUIDによりcatがtoadとして実行される
➡toadは/home/mario/に対する権限がない
➡/home/mario下のuser.txtが見れない
という理屈になると思われます。

それを踏まえて考えられる解決方法は、

・SUIDが設定されていないheadなどで見る
・user.txtを/tmp/にコピーしてcatで見る
・catを複製して、複製したcatでuser.txtを見る

などなど色々な方法があると思います。

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