このページにはプロモーションが含まれています
はなまるpicoCTFに挑戦したので、
Write Upを書いてみました!
問題情報
- タイトル:byp4ss3d
- カテゴリ:Web
- 難易度:Medium
- 使用ツール:ブラウザ
問題文


問題文の要約
この問題は、大学の登録システムを想定した “画像アップロード機能” がテーマです。
一応「画像以外はアップロードできません」というチェックが入っているのですが、
どうやらその仕組みがあまり厳しくありません。
サーバ側では 拡張子を軽く見ている程度 で、
ファイルの中身まではしっかり確認していません。
そのため、見た目は画像のように偽装していても、
実際には 任意のコードを含んだファイルをアップロードできてしまう 可能性があります。
これは Web セキュリティでよくある
「ファイルアップロードのチェックが甘いと起きるバイパス」 の代表的なパターンで、
うまく利用するとサーバ上でスクリプトを実行できたり、
最終的にはフラグの取得につながったりします。
アプローチ(解法の流れ)
1. まず普通の画像(PNG)をアップロード → 成功
ここでは特に怪しいところなし。
2. PHP をアップロードするとエラー(弾かれる)
.php → ブロック
3. .htaccess を使って PHP 実行を“偽装”する作戦へ
🔍ヒントに着目すると・・・
Apache can be tricked into executing non-PHP files as PHP with a .htaccess file.
Apache では .htaccess に AddType を書くと
特定の拡張子ファイルを PHP として実行できる。
AddType application/x-httpd-php .png.htaccess に上記の設定を書いてアップロード→アップロード成功!
これにより .png が PHPとして解釈される。
4.探索して FLAG をゲット!
最初はいろんなコマンドを試して、ls を実行したり、
ディレクトリの中をちょこちょこ探索していました。
その結果、flag.txt が /var/www/ にあることが分かったので、
そこを一気に読んでしまう PHP スクリプトを作ってアップロード。
<?php echo shell_exec("cat /var/www/flag.txt");
//ファイル名は、test.png実行すると無事に FLAG ゲット!
学び・気づき
- 拡張子チェックだけではファイルアップロードは安全にならない
- Apache の
.htaccessの挙動を知ると攻撃・防御どちらにも役立つ - “bypass” 系の良い練習になった!



お読みいただきありがとうございました!









コメント