4.1.2 Определение веб-сервера
Определение веб-сервера - это задача определения типа и версии веб-сервера, на котором выполняется целевой объект. Хоть веб сервер обычно и определяется средствами автоматического тестирования, всё же нам важно понимать, по каким признакам они это делают и почему это может быть нам полезно.
Точное определение типа веб-сервера, на котором выполняется приложение, может позволить пентестеру определить, является ли приложение уязвимым для атаки. В частности, серверы, работающие с более старыми версиями программного обеспечения которые не обновлялись длительное время, могут быть подвержены известным эксплойтам, что в последствии приведёт к нарушению работы сервера
Задачи
На данном этапе нам необходимо определить версию и тип используемого веб-сервера, найти известные уязвимости и экплойты, которые можно использовать во время тестирования.
Как тестировать?
Для определения веб сервера используются различные техники , такие как: Перехват баннера, также определить веб-сервер можно отправляя на него различные команды и анализируя его реакцию, данная реакция может отличатся у разных веб-серверов. Зная как каждый веб-сервер реагирует на команды и, собирая эти реакции в базу данных, пентестер может определить какой веб-сервер используется. Стоит отметить то, что зачастую необходимо использовать несколько команд, так как различные версии могут реагировать одинаково на одну и ту же команду. Довольно редко разные версии абсолютно одинаково реагируют на все HTTP команды. Поэтому отправляя большее количество команд можно сделать более точные предположения о используемом веб-сервере.
Перехват баннера
Перехват баннера выполняется путём отправки HTTP-запроса на веб сервер и проверки заголовка его ответа.
К примеру вот ответ от сервера на Apache
HTTP/1.1 200 OK Date: Thu, 05 Sep 2019 17:42:39 GMT Server: Apache/2.4.41 (Unix) Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT ETag: "75-591d1d21b6167" Accept-Ranges: bytes Content-Length: 117 Connection: close Content-Type: text/html ...
Вот еще один ответ, на этот раз от nginx.
HTTP/1.1 200 OK Server: nginx/1.17.3 Date: Thu, 05 Sep 2019 17:50:24 GMT Content-Type: text/html Content-Length: 117 Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT Connection: close ETag: "5d71489a-75" Accept-Ranges: bytes ...
А вот как выглядит ответ от lighttpd.
HTTP/1.0 200 OK Content-Type: text/html Accept-Ranges: bytes ETag: "4192788355" Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT Content-Length: 117 Connection: close Date: Thu, 05 Sep 2019 17:57:57 GMT Server: lighttpd/1.4.54
В этих примерах тип и версия сервера нам чётко предоставлены. Однако , чаще всего информация о сервере скрывается, или видоизменяется. Например, вот отрывок из ответа на запрос сайта с измененным заголовком:
HTTP/1.1 200 OK Server: Website.com Date: Thu, 05 Sep 2019 17:57:06 GMT Content-Type: text/html; charset=utf-8 Status: 200 OK ...
В тех случаях, когда информация о сервере скрыта, тестировщики могут угадать тип сервера на основе порядка полей заголовка. Обратите внимание, что в приведенном выше примере, Apache поля распологаются в следущем порядке:
- Дата
- Сервер
- Последнее изменение
- ETag
- Access-Range
- Длина содержимого
- Тип подключения
- Тип содержимого
Однако в nginx и obscured server поля распологаются в следующем порядке:
- Сервер
- Дата
- Тип содержимого
Тем самым пентестер может догадаться какой сервер используется в данном веб-приложении , однако следует учитывать что несколько различных веб-серверов могут использовать один и тот же порядок расстановки полей , а также данные поля могут быть скрыты/удалены/видоизменены .
Отправка изкаженных запросов
Идентифицировать веб-сервер также можно , изучив их ответы на ошибки , а в некоторых случаях , когда они не были настроены , - мы получаем стандартную ошибку сервера с указанием его типа/версии
Например, вот ответ на запрос несуществующего метода SANTA CLAUS с сервера Apache.
GET / SANTA CLAUS/1.1 HTTP/1.1 400 Bad Request Date: Fri, 06 Sep 2019 19:21:01 GMT Server: Apache/2.4.41 (Unix) Content-Length: 226 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> </body></html>
Ответ на тот же запрос, но уже от nginx.
GET / SANTA CLAUS/1.1 <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx/1.17.3</center> </body> </html>
На этот раз lighttpd
GET / SANTA CLAUS/1.1
HTTP/1.0 400 Bad Request
Content-Type: text/html
Content-Length: 345
Connection: close
Date: Sun, 08 Sep 2019 21:56:17 GMT
Server: lighttpd/1.4.54
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>400 Bad Request</title>
</head>
<body>
<h1>400 Bad Request</h1>
</body>
</html>
Поскольку страницы ошибок по умолчанию имеют множество различий, их изучение может быть очень эффективным методом , даже если поля заголовка сервера скрыты.
Использование средств автоматического сканирования
Как уже говорилось ранее, определение веб-сервера часто входит функционал сканеров. Эти инструменты способны составлять запросы, подобные тем, что были продемонстрированы выше, а также отправлять другие более специфичные для сервера запросы. Автоматизированные средства могут сравнивать ответы с веб-серверов гораздо быстрее, чем мы бы это сделали вручную, и использовать большие базы данных известных ответов для попытки идентификации сервера. По этим причинам автоматизированные инструменты с большей вероятностью дают точные результаты.
Вот некоторые часто используемые инструменты сканирования , включающие в себя функционал идентификации веб-сервера
- Netcraft, онлайн-инструмент, который сканирует веб-сайты на наличие информации, включая веб-сервер.
- Nikto, cli инструмент, с открытым исходным кодом
- Nmap, cli инструмент , с открытым кодом , который также имеет gui, названный Zenmap-ом.
Предпосылки
Хотя открытая информация о сервере сама по себе является уязвимостью,всё же это информация, которая может помочь злоумышленникам в использовании других уязвимостей, которые могут быть найдены ранее. По этой причине рекомендуется принять некоторые меры предосторожности. Эти меры включают в себя:
- Скрытие информации о веб-сервере в заголовках, например, с помощью модуля mod_headers от Apache.
- Использование реверс-прокси для создания дополнительного уровня безопасности между веб-сервером и интернетом.
- Постоянное обновление веб-сервера до свежих обновлений и поддержании "свежести" программного обеспечения
Перевод подготовлен cпециально для канала t.me/FreedomF0x
Contact: t.me/freedomf0x t.me/Slippery_Fox twitter.com/FlatL1ne xmpp(жаба_ёпт):flatl1ne@freedomfox.im
При поддержке друзей: t.me/in51d3 t.me/NeuroAliceMusic t.me/vulnersBot t.me/darknet_prison
Our private (no logs) xmpp server: FreedomFox.im (for add, write to admin@freedomfox.im)
Хорошо там где нас нет (с) Русские хакеры
Добре там де нас немає (с) Російські хакери