Представляю вашему вниманию пятую часть перевода OWASP Testing Guide. В данной статье речь пойдет об определении веб-приложений на сервере.

Предыдущие статьи:

  1. Тестирование: введение и задачи
  2. Сбор информации с помощью поисковых систем
  3. Определение веб-сервера
  4. Поиск информации в метафайлах веб-сервера

Определение веб-приложений на сервере
Резюме

Определение веб-приложений, размещенных на сервере, является одной из первостепенных задач при проведении тестирования безопасности веб-приложений. Многие веб-приложения содержат известные уязвимости, которые могут быть проэксплуатированы для получения удаленного контроля над сервером либо же для получения определенных данных. Кроме того, многие веб-приложения часто неправильно настроенны или не обновляются, исходя из предположения, что они используются только для нужд компании и потому нет опасности взлома.

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

Иногда при проведении тестирования пентестеры получают только перечень IP-адресов в качестве цели. Довольно спорно, что подобный подход является наиболее оптимальным при проведении пентеста, но в любом случае при таком подходе должны быть протестированы все веб-приложения, которые доступны на полученных целях. Нужно также отметить то, что даже если мы обнаружим у какой-либо нашей цели HTTP сервис на порту 80, то мы не всегда можем приступить к тестированию, так как попросту не знаем доменные имена приложений, расположенных на данном IP-адресе.

Иногда описание цели более расширенно. Пентестер получает перечень IP-адресов и соответствующих им доменных имен, однако, данный список может быть неполным, например, может отсутствовать какое-то доменное имя из-за того, что заказчики просто забыли о существовании определенного ресурса, подобное может случаться в крупных компаниях.

Также тестирование иногда осложняется тем, что веб-приложения могут использовать какие-то странные URL-адреса (например, http://www.example.com/some-strange-URL), к которым не ведут никакие ссылки. Подобное может происходить из-за ошибки или же специально (например, при попытке сокрыть админ панель).

В подобных ситуациях необходимо провести обнаружение скрытых ресурсов.

Поставленные задачи

Определить все веб-приложения, размещенные на сервере.

Как тестировать
Тестирование по методу черного ящика

В случае если пентестеру предоставлен перечень IP-адресов и явно не указано, что должно быть протестировано только определенное веб-приложение (например, «протестировать безопасность веб-приложения, расположенного по URL — http://example.com») — пентестер должен протестировать все веб-приложения, расположенные на заданных в качестве цели IP-адресах. Далее мы рассмотрим несколько техник с помощью которых можно выполнить данную задачу.

Существует три варианта совместного размещения веб-приложений на одном IP-адресе:

1) Различные базовые URL

Наиболее часто базовым URL веб-приложения является / (например, http://example.com), но ничто не запрещает сделать базовым URL отличный от общепринятого.

Например, три различных веб-приложения могут использовать одно доменное имя: http://example.com/app1, http://example.com/app2, http://example.com/app3.

Иногда http://example.com может использоваться только в качестве площадки для размещения веб-приложений и не содержать какой-либо страницы, в таком случае все веб-приложения окажутся «скрыты» и пентестер сможет их достичь только в случае, если ему известны базовые URL. Но, к сожалению, подобное «сокрытие» веб-приложений не делает их более защищенными.

Довольно тяжело найти ресурсы, если они используют различные базовые URL, так как нет определенных критериев, которые обязаны придерживаться разработчики при именовании страниц. К счастью, существует несколько техник, которые могут упросить нашу задачу.

Во-первых, если сервер неправильно настроен и позволяет просматривать директории, то все веб-приложения могут оказаться на виду, также в подобной ситуации нам могут пригодится сканеры уязвимостей.

Во-вторых, нам снова могут сослужить службу поисковые системы, если они проиндексировали веб-приложения, в таком случае мы можем их найти, воспользовавшись поисковым оператором «site:».

Если же предыдущи техники нам не помогли, то придется воспользоваться старым-добрым брутфорсом.

2) Нестандартные порты

Зачастую веб-приложения используют 80 порт для HTTP и 443 порт для HTTPS, но разработчики могут использовать любой другой TCP порт.

Довольно легко обнаружить веб-приложения, использующие нестандартные порты, для этого нужно использовать сканер портов, например, nmap. Благодаря опции -sV nmap определит все http(s) сервисы на различных портах, однако нужно сканировать все порты, а не только тысячу как по-умолчанию это делает nmap.

Сейчас для примера мы рассмотрим как просканировать все порты на IP-адресе 192.168.1.100 и определим какие сервисы используют, открытые порты (в данном примере рассматриваются только базовые опции nmap):

nmap -Pn -sV -p- 192.168.1.100

Результат подобного сканирования может быть следующим:


Interesting ports on 192.168.1.100:
(The 65527 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 3.5p1 (protocol 1.99)
80/tcp open http Apache httpd 2.0.40 ((Red Hat Linux))
443/tcp open ssl OpenSSL
901/tcp open http Samba SWAT administration server
1241/tcp open ssl Nessus security scanner
3690/tcp open unknown
8000/tcp open http-alt?
8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1

3) Виртуальные хосты

DNS позволяет одному IP-адресу соответствовать одному или более доменному имени. Например, IP-адрес 192.168.1.100 может соответствовать доменным именам www.example.com, helpdesk.example.com, webmail.example.com. Также важно отметить то, что доменные имена не обязательно должны относится к одному домену. Подобные взаимоотношения одного сервера и множества веб-приложений становится возможным благодаря виртуальным хостам. Для поддержки виртуального хостинга должен использоваться HTTP заголовок Host.

Существуют различные техники, с помощью которых можно определить доменные имена, соответствующие определенному IP-адресу.

AXFR

AXFR — вид транзакции DNS. Является одним из механизмов репликации баз DNS между серверами. Когда DNS-сервер получает AXFR-запрос он отдает все данные, которые ему известны для запрошенного домена. Подразумевается, что такой запрос придет от DNS-сервера, который пытается выполнить трансфер зоны (перенести домен к себе, реплицировать). Но если DNS-сервер сконфигурирован неверно, любой пользователь может получить доступ к этим данным.

Узнать, выдает ли Ваш DNS подробные данные о содержимом зоны (AXFR)  можно так:

dig -t AXFR domain.ru @ns.domain.ru

Или воспользоваться онлайн сервисами:

https://sergeybelove.ru/one-button-scan/
https://tools.digitalpoint.com/zone-transfer?domain=
Инверсные DNS запросы

Данная техника подобна предыдущей, но полагается на инверсные (PTR) DNS записи. Вместо того, чтобы запрашивать передачу зоны, попробуйте установить тип записи PTR и отправить запрос на заданный IP-адрес, если вам повезет, то в ответ вы получите доменное имя.
Онлайн DNS поиск

Этот поиск сродни передачи зоны DNS (AXFR), но полагается на веб-сервисы, которые позволяют поиск на основе имен по DNS. Одним из подобных сервисов является Netcraft Search DNS service, доступный по ссылке — http://searchdns.netcraft.com/?host.

Сервисы реверс IP

Сервисы реверс IP похожи на инверсивные DNS запросы, отличие заключается в том, что запросы отправляются специализированным веб-приложениям, а не нейм серверам. В сети доступен целый ряд подобных сервисов, но стоит отметить то, что подобные сервисы выдают только частичную информацию (зачастую разную), поэтому рекомендуется использовать одновременно сразу несколько:

Поисковые системы

Для обнаружения веб-приложений можно воспользоваться различными поисковыми системами, некоторые из них поддерживают поисковый оператор «ip:», например, подобный функционал реализован у bing.com.

Тестирование по методу серого ящика

Не применимо. Методология используется точно такая как описано в Тестировании по методу черного ящика, независимо от того сколько информации изначально получает пентестер.

Инструменты

  • DNS интсрументы: nslookup, dig и им подобные
  • поисковые системы (Google, Bing и прочие)
  • Специализированные поисковые веб-сервисы (ссылки можно найти по тексту)
  • Nmap — http://www.insecure.org
  • Nessus Vulnerability Scanner — http://www.nessus.org
  • Nikto — http://www.cirt.net/nikto2

Справочные материалы

  • RFC 2616 – Hypertext Transfer Protocol – HTTP 1.1