【TryHackMe】「Kenobi」のWriteUp

CTF
この記事は約6分で読めます。

TryHackMeのKenobiという部屋のWriteUp。

Kenobi
Walkthrough on exploiting a Linux machine. Enumerate Samba for shares, manipulate a vulnerable version of proftpd and es...

「Kenobi」について

TryHackMe上ではネットワーク系問題として取り扱われている。

基本的にStarWarsリスペクトを感じるが、問題の中身には関係ない…

攻略の手順

ポートスキャン

$nmap -sV -A -Pn -T4 10.10.67.246 -oN nmap_report_kenobi -vv

でポートスキャンを実行。

RPCを含め、いろいろなサービスが動いていることが分かった。

SMBのスキャン

ポート139とポート445では、Sambaが動いていた。

このSMBの445ポートをスキャンする。
スキャンにはnmapを使うことに。

$nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.67.246

IPアドレスの後ろについているのがShare。

Shareのひとつに「anonymous」があることがわかった。

SMBへの接続

smbclientコマンドを使って、このShareに接続してみる。

どうやらlog.txtというファイルがあるよう。

smbclientで接続した後は、helpコマンドでコマンド一覧を表示できる。

catは搭載されていないが、代わりにmoreがあるのでlog.txtを閲覧してみる。

$smb:\>more "log.txt"

※ ” で囲わないといけないところに注意。

なになに…

/home/kenobi/.ssh/id_rsaに鍵がある。
/home/kenobi/.ssh/id_rsaにパブリック鍵がある。
等と書いてある。

どうもsshキーを生成したときの文章のよう。

そして、もう少し下に行くと

kenobiなるユーザー名、グループ名を発見。
いわゆるクレデンシャルをゲットしたということ。

いるかどうかわからないけれど、ウォークスルー上はlog.txtをダウンロードすることになっているので、smbclientからgetコマンドを使ってクライアント側のhomeディレクトリに保存しておく。

NFSへのスキャン

先ほどのnmapでのスキャン結果を確認すると、NFSが稼働している。
ただ、NFS自体は2049ポートで稼働しているものの、RPCが2049ポートへの入り口となっているようなので、その111ポートをスキャンする。

このスキャン結果から、/varというNFSがあることがわかった。

ちなみにnmapのスクリプトの探し方を解説すると、
1.nmapの公式にアクセス
2.CTRL+Fでサービス名など検索
3.スクリプトの内容を見る
でOK。

nmapの公式のスクリプトページはこちら。

NSEDoc Reference Portal: NSE Scripts — Nmap Scripting Engine documentation
A list of 604 Nmap scripts and their descriptions. Links to more detailed documentation.
こんな感じのサイトになっている

次に、この/varディレクトリの中身を見てみる。
いったんマウントする。

mnt/kenobiというディレクトリをhome配下に作り、そこに/varをマウントした。
しかし、中にめぼしいデータはない。

FTPサーバへの接続

最初のnmapでのスキャン結果から、21ポートにFTPサービスがあるとわかっているので、まずはとりあえずつないでみる。

LISTはファイル一覧表示のコマンド

むむむ…認証するように怒られた。

FTPサーバからのデータ抜き取り

FTPの名前はproftpdで、バージョンも1.3.5とわかっているので、脆弱性情報を検索する。

4つの脆弱性情報があった。
このうち、一番下のものを調べてみる。

Sucuri WebSite Firewall - Access Denied

このサイトの記載内容を読んでみると、

「認証されていないユーザーが、mod_copyのモジュールのSITE CPFR/SITE CPTOを使えてしまう脆弱性」ということだった。

先ほど、NFSのドライブにsmbclientで接続したとき、log.txtには
/home/kenobi/.sshの下に鍵がある
と書いてあった。

このデータを取得してみる。

今回の脆弱性で許可されているコマンドは
SITE CPFR :コピー元のファイルを指定
SITE CPTO :コピー先を指定
という意味。

コピー元はSSHキーでいいとして、コピー先はどうするか?

おそらく答えは一つだけで、それはNFSの/var。

やってみる。

まじかよー

/var直下に奥には権限が足りないよう。

先ほどマウントした/varの権限関係を確認してみる。

これを見ると、tmpディレクトリは、その他ユーザーにも書き込み権限があることがわかる。

それを踏まえてFTPコマンドを再実行。

ついでにid_rsa.pubも取っておく

そして、マウントした/varを見に行く。

あるね

ローカル権限の取得

ということで、このキーを使ってSSH接続。ユーザー名はもちろんkenobi。

SSH用のRSA鍵は権限を600にしておく必要がある

これでkenobiのローカル権限をゲットした。

ROOT権限の取得

まずはいつものSUID特権狙い。

/usr/bin/menuというよくわからないコマンドにパスが通っている模様。
実行してみる。

どこかから手に入れたHTTPレスポンスをそのまま表示しているよう。
次に、ウォークスルーに従ってStringsをしてみる。

curl -I localhostという文字列が見えるが、これがmenuで1をタイプしたときの動きぽい。ターミナルで同じコマンドを打った時と同じレスポンスだったから。

次に、このcurlに中間者攻撃?をしかける。

何をやっているのか一言でいうと、menuというプログラムが使っているcurlコマンドを別のcurlファイルに置き換えて特権を取ったということ。

順番に説明すると、
1.curlというファイルを作り、中身を”/bin/sh”にする
2.curlというファイルの権限を777にして、無敵状態にする
3.curlを保存しているディレクトリ(今回は/home/kenobi)を環境変数PATHに追加する(これで、curlのパスをわざわざ指定しなくても、curlと打つだけで実行できるようになった)
4.menuを起動し、curlコマンドを使わせる
5.本来はHTTPリクエストを飛ばすcurlコマンドだが、先ほどつくったcurlファイルが呼び出される
(menuはSUIDがついており、root権限で稼働するので、自然とcurlもroot権限で動かされる)
6.curlファイルの中身はシェルを起動するというもの
7.root権限でシェルが起動

ということ。

これで攻略終わり。

まとめ

ひとつだけ文句が言えるのなら、StarWarsへのワクワク感を返してほしい。

コメント

タイトルとURLをコピーしました