Статья Пентест веб приложений: определение веб-сервера, изучение robots.txt, определение приложений на веб-сервере.

Здравствуй, codeby!

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

Определение веб-сервера.

Сегодня на рынке имеется множество разных производителей и версий веб-серверов, вот список некоторых:
Apache - свободный веб-сервер, наиболее часто используемый в UNIX-подобных операционных системах
nginx - свободный веб-сервер, разрабатываемый Игорем Сысоевым и на сегодняшний день соперничает по популярности с Apache
IIS от компании Microsoft, распространяемый с ОС семейства Windows
LiteSpeed Web Server — проприетарный веб-сервер, разрабатываемый с упором на быстродействие
Google Web Server — проприетарный веб-сервер комании Google, используемый в веб-инфраструктуре Google

Представленные выше серверы являются самыми популярными на 2019 год. Все остальные вместе взятые веб-серверы, названия которых исчисляются десятками, используются менее чем в 1% веб-приложений.
Актуальную статистику можно посмотреть .

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

Эта информация может быть получена путем отправки определенных команд на веб-сервер и анализа ответов от него, поскольку разные версии серверов могут по-разному реагировать на эти команды. Обратите внимание, что для точной идентификации веб-сервера обычно требуется отправить несколько разных команд, поскольку разные версии могут одинаково реагировать на одну и ту же команду. Редко разные версии реагируют одинаково на все команды HTTP. Таким образом, отправляя несколько разных команд, тестер может строить более точные предположения.

Самая простая и основная форма идентификации веб-сервера - это посмотреть на заголовок «Server» в ответе сервера. Для теста будем использовать Netcat.

Рассмотрим следующий HTTP-запрос:
31044


Как видим, в заголовке Server указан Apache.


Запрос-ответ на другой сервер:
31045


На этот раз заголовок Server отдает больше информации. Видим, что версия Apache 2.4.12 и операционная система FreeBSD.


Microsoft IIS 7.5
31046



nginx/1.12.2
31047



LiteSpeed
31048


Обратите внимание, что на сервер LiteSpeed кроме заголовка Server явно указывает заголовок X-Litespeed-Cache-Control.


Google Web Server (gws)
31049



Netscape-Enterprise/6.0
31050



Netscape-Enterprise/3.5-For-NetWare
31051



Однако, данный способ помогает не всегда. У админа сервера есть возможность изменить значение заголовка Server, не показывать его вообще и другими способами скрыть версию веб-сервера. К примеру мы можем получить такой ответ:
31052


Тут поставщика сервера по заголовку определить невозможно.


Более совершенные методы основаны на различных особенностях поведения веб-серверов. Например, каждому веб-серверу свойственно устанавливать свой порядок HTTP-заголовков в ответе.
Еще раз посмотрите на все примеры, приведенные выше. В примере с nginx заголовок Server является первым, и расположен перед заголовком Date. В примере c Apache заголовок Server располагается вторым по порядку, после заголовка Date, точно так, как в примере, где сервер мы не смогли определить. И точно так, как в примере с Netscape-Enterprise/6.0. Пример Netscape-Enterprise/3.5-For-NetWare по порядку заголовков похож на nginx/1.12.2.

Как видим, не все так однозначно, поэтому переходим к следующему способу, основанному на отправке некорректных запросов.
В запросе изменим версию протокола на несуществующую - HTTP/3.0.

Так реагирует Apache:
31054



Посмотрите, как по разному реагирует один и тот же сервер на неправильный и правильный запросы:
31055



Так отреагировал на неверный запрос наш неизвестный зверь Unknown-Webserver. От него приходят два ответа:
31056


Изменим запрос - укажем несуществующий протокол JUNK, и теперь приходит один ответ:
31057



Реакция LiteSpeed на несуществующую версию протокола HTTP/3.0):
31058



На несуществующий протокол JUNK/1.0 LiteSpeed ответит иначе:
31059


Анализируя полученную информацию, сравнивая ее с известными ответами различных серверов, пентестер строит и уточняет свои предположения.

Не обязательно использовать Netcat. Править HTTP-запросы и смотреть ответы сервера можно средствами браузера:
31060


Сервер codeby.net спрятан за cloudflare.


Само собой, что для получения тех же самых результатов существуют автоматизированные инструменты.
Например whatweb, который по умолчанию предустановлен в Kali:
31061


Если вы по какой-то причине не хотите напрямую связываться с целевым сервером, можете использовать онлайн-сервисы, к примеру :
31062



Бывает, что ни один из рассмотренных способов не принес нужного результата. В таком случае вам могут помочь страницы об ошибках в веб-приложении, которые в себе могут раскрывать информацию о сервере.

Они могут быть такими (Tengine/2.0.0):
31063


такими (nginx/1.12.2):
31064


и даже такими (Apache/2.4.18):
31065


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



robots.txt

Файл robots.txt используется для того, что бы поисковые роботы и сканеры знали, какие веб-страницы можно индексировать, а какие нет.
Для примера файл robots.txt Google.com:
31066


Такой файл имеется в большинстве веб-приложений и иногда может содержать в себе важную для тестера информацию, например, пути к административным интерфейсам. Кроме того, иногда в robots.txt указаны расширения файлов, которые нельзя (или можно) индексировать, что указывает на возможность наличия таких файлов на сервере.



Определение веб-приложений на сервере.

На следующем шаге нам необходимо выяснить, какие конкретно приложения размещены на веб-сервере. Многие веб-приложения имеют уязвимости, которые давно стали достоянием общественности, и которые можно использовать для получения удаленного доступа к серверу и другим приложениям, размещенным на том же сервере. Кроме того, некоторые приложения, которые предназначены для «внутреннего использования», часто плохо сконфигурированы и редко обновляются.

Например, имеется коммерческий сайт, на первый взгляд вполне «ухожен», да еще и IT-направленности. На домене аж четвертого уровня находим веб-приложение, написанное на языке Perl, расположенное на том же самом сервере, что и целевой сайт. Похоже, что админ чувствовал себя в безопасности, располагая на данном веб-сервере такое приложение, так как оно не планировалось для использования широким кругом лиц.
Хочется предупредить таких админов — это ложное чуство безопасности, по-другому называемое Security through obscurity.

Найденное приложение оказалось уязвимым к Ditectory Traversal и Local File Include. На скриншоте видно подключение файла /etc/passwd и вывод его содержимого в браузер:
31067


В прилжении были найдены и другие уязвимости. Например можно просматривать некоторые директории и файлы этого приложения через браузер:
31068


Обратите внимание на файл "password":
31089


C этим паролем заходим в админку, а в админке есть возможность заливать произвольные файлы на сервер (в том числе исполняемые):
31088



Есть уязвимости в логике - средствами приложения можно просматривать список файлов в произвольных директориях, загрузить и удалить файл в любой директории, например в /etc. Такой эффект достигался путем манипулярования значением параметра DIR в запросе (смотрите в адресную строку):
31071


Оцените важность этапа разведки в тестировании на этом примере.


Как искать веб-приложения на сервере?
Для начала рассмотрим точки, где они могут находиться.

1. Неочевидные URL.
Очевидной точкой входа для веб-приложения является . Но хотя это самая распространенная ситуация, ничто не заставляет приложение запускаться именно со слэша «/».
Например, одно и то же доменное имя может быть связано с тремя веб-приложениями, такими как:
,
,
.

2. Нестандартные порты.
Хотя веб-приложения обычно работают на портах 80 (http) и 443 (https), это вовсе не обязательно. Фактически, веб-приложения могут работать на любых TCP-портах и на них можно ссылаться, указав номер порта следующим образом:

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


Теперь рассмотрим способы поиска приложений.

На самом деле не существует способа точно определить все веб-приложения на сервере. Например url1 в адресе может быть непредсказуемым и вы никогда о нем не узнаете. Однако существует ряд методов, которые можно использовать для получения допольнительной информации.
К примеру, если веб-сервер неправильно сконфигурирован и позволяет листинг директорий прямо в браузере, как в примере ниже:
31072


в этом примере каждая директория является входом в самостоятельное веб-приложение.


Так же могут помочь поисковые системы. Укажите в поисковом запросе поиск по сайту:
31073



Можно выполнить поиск вручную или по словарю с помощью сканеров по вероятным адресам для почты, административной панели, старой версии сайта и т.д. Пример для поиска почтового сервиса:
https://www.example.com/webmail, https://webmail.example.com/ или https://mail.example.com/

Учтите обратную систуацию — веб-приложения с одним доменом, но разными поддоменами, могут располагаться на разных серверах.

Для поиска приложений на нестандартных портах воспользуйтесь сканером nmap:
31074


Тут на портах 8000 и 8080 распологаются http-службы.
При переходе по адресу в браузере на порту 8000 сервер запрашивает http-get-авторизацию, а на порту 8080 какой-то сайт.
31075


Желательно сканировать весь диапозон портов.

Другие примеры. На порту 20000 расположилась веб-почта, а на порту 8080 phpMyAdmin:
31076
31077



Следующий способ поиска приложений основан на DNS zone transfers.
Передача зоны DNS (DNS zone transfers) - является одним из механизмов репликации баз DNS между серверами. Имела очень широкое распространение, но в настоящее время вытесняется другими механизмами репликации, в связи с чем имеет ограниченое применение при тестировании. Однако стоит попробовать.
Прежде всего, тестеры должны определить серверы имен, обслуживающие целевой ip-адрес, пусть это будет адрес «1.1.1.1». Если доменное имя известно для 1.1.1.1 (пусть это будет ), его серверы имен можно определить с помощью таких инструментов, как nslookup, host или dig.


В следующем примере показано, как идентифицировать серверы имен для yandex.ru с помощью команды host:
31078



Теперь мы попробуем запросить записи для yandex.ru на одном из его серверов DNS, и если нам повезет, сервер нам вернет этот список записей:
31079


нам не повезло )


Можно попробовать выполнить обратный DNS-запрос. Отправляем IP, получаем имя:
31080



Тоже самое в nslookup:
31081



Тоже самое в dig:
31082



Вы можете воспользоваться онлайн сервисами, такими, как или . Часто подобные службы возвращают частично разные или неполные данные, поэтому лучше использовать несколько таких сервисов.
31083


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

Что касается веб-сервера - определив его версию, установите сервер той же версии на свой компьютер и изучите его структуру и особенности. Выполните поиск по базам уязвимостей (Metasploit Exploitation Framework и searchsploit — как искать и как использовать эксплойты или ). Изучите конфиги и значения по умолчанию, а затем проверьте их на тестируемом сервере, вдруг админ забыл что-то поменять. Некоторые демонстрационные и тестовые веб-приложения, поставляемые с веб-серверами, тоже имеют известные уязвимости, поэтому стоит их изучить и попытаться найти на тестируемом сервере.

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

А на сегодня всё, спасибо за внимание!
 

Вложения

  • 8.png
    8.png
    6,8 КБ · Просмотры: 591
  • 31.png
    31.png
    5,6 КБ · Просмотры: 385
  • 34.png
    34.png
    215,2 КБ · Просмотры: 451
Последнее редактирование:

Ondrik8

prodigy
Green Team
08.11.2016
1 129
3 189
BIT
0
Wappalyzer не проще установить? не? )) да, скажите, руками определять это кульно) 21 век, с помощью простых плагинов и дополнений, уже можно пентест делать, от сайта конечноже зависит, но все же)

ПС запятые ставил 5 минут , наверное правильно..?)
 

larchik

Gold Team
07.06.2019
415
481
BIT
67
Wappalyzer не проще установить? не? )) да, скажите, руками определять это кульно) 21 век, с помощью простых плагинов и дополнений, уже можно пентест делать, от сайта конечноже зависит, но все же)

ПС запятые ставил 5 минут , наверное правильно..?)
Я согласен полностью, что проще и быстрее все делать автоматически ) Но знать, как работают эти плагины и дополнения внутри хотя бы на уровне концепции - тоже может быть полезно. Вдруг мы окажемся на роутере, на котором кроме telnet и ping ничего нет, условно говоря, а углубить атаку хочется. Тогда, наверное, часть работы придется делать руками или автоматизировать самому с помощью скриптов. В общем, знания не бывают лишними ))
 

Ondrik8

prodigy
Green Team
08.11.2016
1 129
3 189
BIT
0
я ждал такого ответа)) твой вариант мне в копилку залетел!
 

SearcherSlava

Red Team
10.06.2017
943
1 262
BIT
225
Здравы будьте, инфоопасные братья и сестры! Немного о robots.txt. Общеизвестны расширения htm, html, php, и т.д, а есть wbp, которое связано с CMS, и подсвечивает нам mediacache, разработанный фирмой Adobe и используемый в документообороте во всем мире. Иногда, используя выражение вида site: name mediacache, можно просматривать внутренние документы, аналогично обычным запросам в гугле с добавлением pdf, ppt xls, doc, docs, etc. Спасибо за внимание и понимание.
 

Ondrik8

prodigy
Green Team
08.11.2016
1 129
3 189
BIT
0
Здравы будьте, инфоопасные братья и сестры! Немного о robots.txt. Общеизвестны расширения htm, html, php, и т.д, а есть wbp, которое связано с CMS, и подсвечивает нам mediacache, разработанный фирмой Adobe и используемый в документообороте во всем мире. Иногда, используя выражение вида site: name mediacache, можно просматривать внутренние документы, аналогично обычным запросам в гугле с добавлением pdf, ppt xls, doc, docs, etc. Спасибо за внимание и понимание.
дэк, это классика) есть еще файлы по интереснее например форматы баз-данных, файлы конфигурации и etc ) там гдде светятся креды админа, баз данных, ЛОГИ! )))) вот там все самое вкусное попадается)

здесь примеры последних "дорков" но никто не мешает их переделать под нужный нам сайт)

Screenshot_3.jpg
 
Последнее редактирование:

centr

Green Team
31.01.2017
408
477
BIT
0

Вот это дополнение не помешает прикрепить в основную тему.
 
  • Нравится
Реакции: Сергей Попов
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!