Представляю вашему вниманию пятую часть перевода OWASP Testing Guide. В данной статье речь пойдет об определении веб-приложений на сервере.
Предыдущие статьи:
- Тестирование: введение и задачи
- Сбор информации с помощью поисковых систем
- Определение веб-сервера
- Поиск информации в метафайлах веб-сервера
Определение веб-приложений на сервере
Резюме
Определение веб-приложений, размещенных на сервере, является одной из первостепенных задач при проведении тестирования безопасности веб-приложений. Многие веб-приложения содержат известные уязвимости, которые могут быть проэксплуатированы для получения удаленного контроля над сервером либо же для получения определенных данных. Кроме того, многие веб-приложения часто неправильно настроенны или не обновляются, исходя из предположения, что они используются только для нужд компании и потому нет опасности взлома.
С распространением виртуальных серверов традиционное размещение исключительно одного веб-приложением на одном 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 запросы, отличие заключается в том, что запросы отправляются специализированным веб-приложениям, а не нейм серверам. В сети доступен целый ряд подобных сервисов, но стоит отметить то, что подобные сервисы выдают только частичную информацию (зачастую разную), поэтому рекомендуется использовать одновременно сразу несколько:
- Domain tools reverse IP: http://www.domaintools.com/reverse-ip/
- Webhosting info: http://whois.webhosting.info/
- DNSstuff: http://www.dnsstuff.com/
- http://www.net-square.com/mspawn.html (требует установки)
Поисковые системы
Для обнаружения веб-приложений можно воспользоваться различными поисковыми системами, некоторые из них поддерживают поисковый оператор «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
3 ссылка на предыдущие статьи не работает.
Поправили, спасибо!