はじめに
今回取り組んだのはMr Robot CTFです!
仮面?のような顔をした紳士が特徴的ですね~
Task 1
OpenVPNでTryHackMeの環境にアクセスする手順が書かれています。
やはり紳士ですね笑
Task 2 Hack the machine
ここからが本題です!
What is key 1?
SSHとHTTP,HTTPSができるみたいですね
さっそくHTTP接続すると、何やら怪しいWebサイトが。。。
ちなみにHTTPSで接続しても同じWebサイトです
12:43 <ミスター・ロボット> こんにちは、友よ。あなたがここに来たのなら、何か理由があって来たのでしょう。まだ説明できないかもしれませんが、あなたの中には、この世界に疲れ果てている部分があります... あなたが働く場所、会う人、憂鬱な銀行口座の残高をどう空にするか決める世界。これを読むために使っているインターネット接続でさえ、あなたの存在を徐々に削り取り、犠牲にしています。言いたいことがあるでしょう。もうすぐ私はあなたに声を与えます。今日、あなたの教育が始まります。
コマンドがうてるようですが、いろいろ見て回っても、めぼしいものはなかったので、dirbをしてみます
けっこういろいろあるのですが、ヒントにRobots
とあったので、アクセスしてみます
1つ目のKeyがありました!!
What is key 2?
Robotsにfsocity.dic
の記載もあったので、アクセスしてみるとファイルをダウンロードできました
みてみると、858160個のワードリストのようです
ヒントには以下のような文章があります、、
この単語リストには何か怪しいところがあります...なぜこんなに長いのでしょうか?
重複を削除して、新しいテキストファイルとして保存します
それでも1万行ありますね、、、
明らかに総当たり攻撃のワードリストです。。。
dirbをしたときに/login
があったので、適当に入力してみると、ユーザー名が違うとエラーがでました
ということは、ユーザー名があっていれば、別の表示になるんですね~
URLのパラメータには変化がなかったので、Burp Suiteで詳細な情報をみていきます
他の方のWriteupも見つつ(カンニング)、以下のコマンドでブルートフォースしてきます
https://qiita.com/kk0128/items/fb2dd097b4f9d37caea0
hydra -L /home/kali/Documents/THM/Medium/MrRobotCTF/wordlist.txt -p test 10.10.123.213 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.123.213%2Fwp-admin%2F&testcookie=1:Invalid username" -t 30
参考にしたWriteupに記載されていた内容にならってパラメータの補足をします
-
-L /home/kali/Documents/THM/Medium/MrRobotCTF/wordlist.txt
- ユーザー名をwordlist.txtから総当たりで選んでいきます
-
-p test
- パスワードは
test
を利用します
- パスワードは
-
10.10.123.213
- 攻撃対象のIPアドレスです
- http-post-form
- POSTリクエストをしていきます
- 構文は、[リクエストパス]:[POSTパラメータ]:[失敗時のメッセージ]
- リクエストパス:
/wp-login.php
- リクエストパス:
- POSTパラメータ:
log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.123.213%2Fwp-admin%2F&testcookie=1
- 失敗時のメッセージ:
Invalid username
パスワードは適当にtest
を入れているだけなので間違っていますが、ユーザー名があっていれば失敗時のメッセージが異なるため合っていると判定されます!
HydraでみつかったElliot
を入れてみたところ、Invalid Username
という表記はなくなっていますね
同様にして、パスワードを探していきます!
hydra -l elliot -P /home/kali/Documents/THM/Medium/MrRobotCTF/wordlist.txt 10.10.207.128 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.207.128%2Fwp-admin%2F&testcookie=1:ERROR" -t 30
補足
Writeupに/license
にログイン情報があると記載があったので、みてみると、ソースコードにBASE64でエンコードされていると思われる文字列が、、、、
さっそくデコードしてみると、あからさまなログイン情報がwww
AppearanceのEditorでPHPファイルを直接編集できるみたい!
404.phpをまるごと以下のPHPのリバースシェルに置き換え(ipアドレスはOpenVPNで払い出されているものを利用。まじで注意、、、)
/usr/share/webshells/php/php-reverse-shell.php
なぜ404.php?と思うかもしれませんが、リバースシェルは実行しないと意味がないです。404なら存在しないURLをたたけば、実行されるので、使い勝手がいいんです!
その代わりpassword.raw-md5
がみれたので、ハッシュ化されたパスワードをClackStationでクラックします
クラックしたパスワードがこちら(これはこれで入力しづらそう、、、)
abcdefghijklmnopqrstuvwxyz
root権限になろうと思ったのですが、terminalからしかsu
できないみたい。。。
どういうことだ、、、
Writeupを見ていると、疑似端末をリバースシェルに割り当てる必要があるのだとか、、、
疑似端末とは
仮想コンソール、端末装置、シリアルポートハードウェアなどを使用しないテキスト端末のインターフェイスを提供する。これらのハードウェアの代わりに、擬似端末セッションの役割をソフトウェア(プロセス)が代用する。
引用元:https://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E7%AB%AF%E6%9C%AB
個人的な理解としては以下になりました(あっているか分かりません、、、)
terminalからしか実行できない
=端末からしか実行できない
=リバースシェルのリモートからでは実行できない
そこで、ptyで疑似端末をリバースシェル上で構築して、その疑似端末でシェルを起動させます
python -c 'import pty; pty.spawn("/bin/sh")'
What is key 3?
おそらく最後はRoot権限だろうということで、robotアカウントがRoot権限で実行できるコマンドを探しましたが、一つもなかったです
そこで、所有者の権限で実行できるSUIDのビットがたっているファイルを探します
ヒントにnmap
とあったので、nmap
GTFOBinsという権限昇格するためのコマンドを集めたサイトがあることもここで学びました(恐ろしいサイトだ)
https://gtfobins.github.io/
そこのNmapを参考にしたら、Root権限がとれました!
https://gtfobins.github.io/gtfobins/nmap/
key-3-of-3.txtの中身を確認すれば、Flagがあります!
最後に
今回学んだことは以下4つです!!
- HydraでHTTP POSTを利用したブルートフォース攻撃の方法
- 直接PHPを編集できるということはリバースシェルを埋め込むチャンス
- 疑似端末の理解
- GTFOBinsという危ないサイトがある
参考にしたWriteup