Привет колеги.
Добро пожаловать на курс Web Application Pentesting.
В этой статье мы с вами поговорим о:
-
Ссылка скрыта от гостей
- Попытаемся понять алгоритм хеширования дайджест аутентификации и проделаем все шаги алгоритма вручную
Сегодня же речь пойдет о еще одном виде HTTP Аутентификации - Дайджест Аутентификация.
Wikipedia сказал(а):Дайджест-аутентификация доступа — один из общепринятых методов, используемыхСсылка скрыта от гостейдля обработки учетных данных пользователяСсылка скрыта от гостей. Этот метод используетСсылка скрыта от гостейдля отправкиСсылка скрыта от гостейчерез сеть, что является более защищённым способом, чем обычнаяСсылка скрыта от гостей, при которой данные посылаютсяСсылка скрыта от гостей.
Вы спросите "Зачем же нужна такая аутентификация когда у нас есть уже Базовая Аутентификая?"
Ответ совсем очевиден:
Дело в том , что Базовая Аутентификация отсылает на сервер логин и пароль в открытом виде.(Да они посылаются в base64 кодировке,но кодировка - это не шифрования!!!) А в силу того , что время не стоит на месте и с развитием WiFi технологий , да и в прочем и в Ethernet сетях , довольно часто развиваются все новые векторы
Ссылка скрыта от гостей
и логин и пароль с легкостью можно похитить посредством таких атак.(Речь сейчас идет конкретно про протокол HTTP не про Так же алгоритм Дайджест Аутентификации описан в
Ссылка скрыта от гостей
. Еще не знаешь что такое RFC ? )) Ну друг мой - тебе рано или поздно придется с ним знакомится, если ты выбрал путь пентестера 
Простыми словами RFC (Request For Comments)- все стандарты Глобальной сети существующие в виде опубликованных заявок RFC)
И так давайте глянем на запрос ответ сервера на HTTP Дайджест аутентификацию:
Обращаем на заголовок запроса:
Authorization и его значения:
Digest - Указывает на то что используется Дайджест Аутентификация
Username - имя пользователя запрашиваемое веб сервером
realm - слово-фраза установленная администратором сервера
nonce - рандомный(случайный) набор символов в хекс виде.
uri - путь к приложению
responce - захешированая по алгоритму строка необходимая для проверки на стороне сервера
opaque - то же что и realm , но в нашем случае она пустая(так же задается в настройках веб сервера).
И как результат получаем все тот же 401 (как и при обычной базовой аутентификации) в случае не прохождении проверки на стороне сервера.
Давайте посмотрим на алгоритм хеширования данных при дайджест аутентификации:
Как видим строка responce (которую мы видели в запросе на веб сервере) получается путем хеширования по
Ссылка скрыта от гостей
(Hash1 строки Nonce(так же передаваемая в запросе) и Hash2)А Hash1 получаем путем хеширования (логина : строки realm(которая так же передается в запросе) : пароля) и Hash2 получаем в результате хеширования (передаваемого метода (GET|POST : URI(также передаваемого в запросе)
В ваершарк это выглядит примерно так:
Теперь давайте попробуем шаг за шагом выполнить этот алгоритм хеширования
~~DarkNode~~ сказал(а):(От себя скажу , что это очень немаловажный момент - понимания алгоритма хеширования , так как мы не раз будем сталкиваться с написанием собственных брутилок по определенных алгоритмах)
Для этого нам всего лишь понадобится использовать MD5 шифрования.
Сделать это можно во многих ЯП (Языках Программирования) , но я все же отдаю предпочтения Python:
Запустим для наглядности интерактивный режим Python:
Первым делам импортируем библиотеку hashlib
И создадим переменную hash1 в которую положим необходимое хешированое значение трех составляющих (login:realm

Код:
python
Python 2.7.12+ (default, Sep 1 2016, 20:27:38)
[GCC 6.2.0 20160927] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import hashlib
>>> hash1=hashlib.md5('admin:Pentester Academy:asdss').hexdigest()
>>> hash1
'a524e9245a8bf88560d2bb74a02a8779'
Давайте получим hash2:
Код:
hash2=hashlib.md5('GET:/lab/webapp/digest/1').hexdigest()
>>> hash2
'51b79aa2c26cf4bb3cc8d74c90dc8c22'
Как видим наши responce совпадают) Я Вас поздравляю - теперь вы знаете как работает алгоритм хеширования дайджест аутентификации.
Что касается атаки - атакуется она так же как и Basic HTTP Auth. Единственное отличие - это то что мы не сможем перехватить логин пароль в чистом виде при МИТМ атаках.
Для примера атаки возьмем как и в прошлой статье брут с помощью утилиты Hydra:
Видео к статье:
Python:
#!/usr/bin/env python
import hashlib
realm=raw_input("Enter the realm: ")
login=raw_input("Enter the login: ")
password=raw_input("Enter the password: ")
hash1=hashlib.md5("%s:%s:%s" %(login,realm,password)).hexdigest()
method=raw_input("Enter the method: ")
URI=raw_input("Enter the URI: ")
hash2=hashlib.md5("%s:%s" %(method,URI)).hexdigest()
nonce=raw_input("Enter the Nonce: ")
responce=hashlib.md5("%s:%s:%s" %(hash1,nonce,hash2)).hexdigest()
print responce
Презенташка со слайдами будет в загруженных файлах
В следующей статье мы поговорим о Cookie
Всем спасибо)
Продолжение следует)