HackTheBox TartarSauce Writeup
TartarSauceというマシンの新しい解法(ほかのWriteupでは解説されていない)を見つけたのでブログに書きたいと思います。(といってもそんな大したことないですが)。
他のWriteupではRabbit Holeとされている、「Monstra」CMSを悪用して初期シェルを得る方法を解説します。rootまでの完全なWriteupではないので悪しからず。
Monstra CMS
Information Gathering
/webservices/monstra-3.0.4/admin/
にアクセスすると、以下のようなログインページが見つかる。
Versionが3.0.4だということがわかり、これでGoogleでExploitを探すといろいろ脆弱性が見つかる。
これらをまとめてみると、以下のようになる。結論から言うと、以下の二つのExploitを組み合わせることで初期シェルがゲットできた。
Login
上記で調べたExploitを見る限り、全てAuthenticatedを必要としている。つまり、ログイン後に初めて悪用できる。よって、MonstraCMSにログインを試す。
Webのログインページに対して、login bruteforce
,default login
,SQL Injection
の3つの可能性が考えられるが、10回以上のログイン試行によって一定時間BANされたので、login bruteforce
の線は薄い。また、このMonstraCMSは実際に存在するサービスであり、Sql Injectionはググっても出てこなかったため、Sql Injectionの可能性も薄い(それでも一応基本的なものは試すが)。
したがって、default login
で悪用する可能性が高く、実際、admin / admin
という弱いクレデンシャルでログインができた。
Arbitrary File Upload
ログインができたので、AuthenticatedのArbitrary File Uploadができそうに見える。バージョンもドンピシャであり、このExploitの解説方法もググれば大量に出てくるため、かなり信頼性が高い。
www.exploit-db.com
Exploit-dbの通り、webshell.php7
というファイル名でアップロードを試みる。
root@kali:~/Documents/HTB/TartarSause# cat webshell.php7 <?php system($_GET['cmd']); ?> root@kali:~/Documents/HTB/TartarSause#
すると、以下のようにFile was not uploaded
というエラーが発生する。
ここで、.php7
という拡張子がダメなのかもしれないので、webshell.txt
としてUploadを試みる。そして、この場合も同様のエラーが発生した。
「???」って感じである。よくわからないので、Burp Suiteで実際のやり取りを確認してみる。
どうやら302エラーが発生していることが原因??(結果的には多分関係ない)。存在するはずのページなのに302ってドユコト?。ただ、おそらくURLに問題がある?っぽいのかなと推測できる。
あと、もう一つ目についたのが、&path=uploads
の部分。ここから、おそらく「uploads」という名前のディレクトリにファイルを書き込む、と推測できる。
以上のことから、このMonstraCMSではファイルのアップロードそのものは可能で、そのファイルはuploads
ディレクトリに書き込まれるが、このディレクトリに対して書き込み権限がないため、エラーが発生している、と推測できる。
Directory Traversal
ここで、先ほどGoogleで検索したExploitの中に、directory traversalがあったことを思い出す。よって、uploads
ディレクトリをdirectory traversalを使って別の書き込めるディレクトリに指定すれば成功するのでは??と考えられる。
では、まずdirectory traversalが成功するのかを確認する。
www.cvedetails.com
index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./
でアクセスしてみると、以下のように成功していることがわかる。
どうやら、/.......//./
一つで親ディレクトリ一つ分移動できるっぽいので、それを確認する。
成功!どうやら仮説通り、uploads
ディレクトリが存在していたらしい。
Webshell Upload
次に、書き込み権限があると思われる/tmp
にファイルを書き込むことを試す。
/index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./.......//./tmp/
でアクセスしてみる。
そして、/tmpを確認してみると、成功していることがわかる!!!
次は、書き込み権限があるようなWebrootに書き込んで、ブラウザからそのPHPファイルにアクセスして、PHPコードを実行することを試す。
/index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./.......//./var/www/html/
をURLに設定して、ファイルをアップロードすると、以下のように書き込めており、ブラウザ経由で確認することができた!!
よって、次は.php7
ファイルをアップロードすることを試してみる。
そして、Webshellゲットだぜ!!。
CVE-2018-16820
https://www.cvedetails.com/cve/CVE-2018-16820/
Cvedetailsを見る限り、任意の書き込み権限のあるディレクトリにファイルをアップして、RCEできうるみたいなことは書いてないんですけど、これってどうなんだろう?
今回みたいな悪用の仕方は初めてなのでこれがCVE-2018-16820の範囲内なのかよくわからないです。
一度登録されたCVEは再評価はされないのかな?知ってる方いれば教えてほしいです!
まとめ
Monstra CMS 3.0.4の(Authenticated) Arbitrary File UploadとDirectory Traversal(CVE-2018-16820)を組み合わせて、書き込み権限のないuploadsディレクトリ以外のディレクトリに書き込んで、Webshellを設置することができた。