LoginSignup
0
0

More than 1 year has passed since last update.

TryHackMe Wonderland writeup

Last updated at Posted at 2022-04-25

Room: Wonderland
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.227.248
image.png

22/tcp(ssh)はひとまず置いておいて、80/tcp(http)にアクセスしてみると以下のページが出力されました。
image.png
残念ながら、当該ページ上ではexploitにつながりそうな情報は得られなかったので、続いてdirbusterを用いて隠しファイルやディレクトリがないか確認しました。
image.png
再帰探索できるように設定して実行すると、rabbitのアルファベット毎にディレクトリが存在することがわかりました。
image.png
image.png
image.png
image.png
image.png
image.png
どうやら、各ディレクトリで会話形式になっているようです。
最後のhttp://10.10.227.248/r/a/b/b/i/t/までたどり着きましたが、ページ上だけだと有用な情報が得られず、ディレクトリ名も相まってrabbit hole(罠)にハマってしまったのかと考えました。
ただ、その後なんとなくソースコードを見ていたところ、ページ上には表示されない怪しい箇所を見つけました。
image.png
コロンで区切られており、なんとなくユーザ名とパスワードに見えたのでssh接続を行うとユーザ権限のシェルを取得することができました。
image.png
また、その後user.txtを探し回ったところ、なぜか/home/aliceにはroot.txtがあり、/rootにuser.txtがありました。
image.png

権限昇格

/homeを覗いてみるとroot以外に4ユーザ分いることがわかったので、いくつかのユーザを乗り継ぎつつrootへ行く必要があるのだろうと想像しました。
image.png

権限昇格①

/home/aliceを探索するとroot.txt以外に現権限でも実行できる怪しげなpythonファイル「walrus_and_the_carpenter.py」を見つけました。
image.png
また、sudo -lを実行し、aliceに与えられている権限を確認したところ、rabbitの権限で先ほど見つけた「walrus_and_the_carpenter.py」を実行できることがわかりました。
ただ、単純に実行してみたところ、いくつかの文章が表示されるだけだったので、もう少々手を加える必要がありそうです。
image.png
ソースコードを確認してみました。
どうやらプログラム自体は「walrus_and_the_carpenter」の詩からいくつかのランダム行を抜き出すもののようで、1行目でrandomというモジュールをインポートしていることがわかりました。
image.png
randomモジュールは、定義されたpythonパスの1つにありますが、pythonが優先度の高いディレクトリで同じ名前のモジュールを見つけると、「正当な」モジュールではなく、そのモジュールをインポートします。
したがって、「walrus_and_the_carpenter.py」の同じディレクトリ内で/ bin/bashを実行する「random.py」スクリプトを作成しようとすると、おそらく、「walrus_and_the_carpenter.py」が定義されたpythonモジュールの代わりにこのモジュールを呼び出します。
そして、その「random.py」を細工することによって実行権限である「rabbit」のシェルを手に入れることが出来るはずです。
image.png
予想通り、rabbit権限のシェルを取得できました。

権限昇格②

続いて、取得したrabbitシェルで探索を行ったところ、rabbitのホームディレクトリにて怪しげなSUID付きバイナリファイル「teaParty」を見つけました。
image.png
ただ、実行するだけでは内部でどういった仕組みになっているかわからなかったため、stringsコマンドを用いて分析を行うことにしました。
残念ながら、対象マシンではstringsコマンドを使用することが出来なかったため、対象ファイルを自身のkaliへ移動させて手元のマシンで分析を行います。
image.png
上図は一部を切り取ったものですが、内部ではechoコマンドとdateコマンドを使用しているようです。
ここでdateコマンドに注目してみると、echoコマンドは絶対パスで指定されているのにもかかわらず、こちらは絶対パスで指定されていません。
そのため、「正当な」パスに存在するdateバイナリファイルを使用せず、こちらで用意したバイナリファイルを使用することが出来そうです。また、仮にこのバイナリファイルが/bin/bashを取得するものであった場合、権限昇格に使用できそうな気がします。
image.png
上図の通り、まずは/bin/bashを取得するためのdateファイルを作成します。
その後、chmod +x dateにより、実行権限を付与します。

そして最後に「teaParty」を実行して、偽のdateを使用させるために、システムが使用するパス($PATH)に偽のdateファイルが存在する/home/rabbitを追記します。
※ここでは本来のdateバイナリがある/binよりも先にシステムに参照されるように追記する必要があります。
【修正前のPATH】
image.png
【修正後のPATH】
image.png
準備ができたので「teaParty」を実行します。
image.png
無事、権限昇格に成功し、「hatter」権限のシェルを手に入れることができました。

権限昇格③

ひとまず/home/hatterを確認してみると、「password.txt」というファイルがあったのでsu hatterを行います。
image.png
image.png

色々と探索しましたが、残念ながら有用な情報が得られなかったため、linpeasを使用して列挙することにしました。
image.pngimage.png
自身のマシンから送り、実行権限を付与して実行します。
image.png
実行した結果を確認したところ、capabilitiesの設定不備があるようで、/usr/bin/perlにcap_setuidのcapabilityが付与されていることがわかりました。
これを悪用したら権限昇格ができそうです。

CAP_SETUID
プロセスの UID に対する任意の操作 (setuid(2), setreuid(2), setresuid(2),
setfsuid(2)) を行う。 UNIX ドメインソケット経由でソケットの資格情報 (credential)
を渡す際に 偽の UID を渡すことができる。 ユーザー名前空間にユーザー ID マッピングを
書き込むことができる (user_namespaces(7) 参照)。
http://manpages.ubuntu.com/manpages/bionic/ja/man7/capabilities.7.html

こちらのサイトを参考にし、権限昇格を試みたところ、無事、rootを取得することが出来ました。
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