22.08.2015 @ 14:27 Перевод OWASP Testing Guide. Часть 1.5. owasp, web security Представляю вашему вниманию пятую часть перевода 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 abychutkin 16980 Web security Читать дальше >>