Статья [Web Application Pentesting] HTTP Digest Аутентитфикация

1.PNG


Привет колеги.
Добро пожаловать на курс Web Application Pentesting.
В этой статье мы с вами поговорим о:
И так напомню вам что в прошлой статье мы познакомились с вами с HTTP Basic Аутентификацией и способами атаки на ее.
Сегодня же речь пойдет о еще одном виде HTTP Аутентификации - Дайджест Аутентификация.
Wikipedia сказал(а):
Дайджест-аутентификация доступа — один из общепринятых методов, используемых веб-сервером для обработки учетных данных пользователя веб-браузера. Этот метод использует шифрование для отправки пароля через сеть, что является более защищённым способом, чем обычная проверка подлинности доступа, при которой данные посылаются открытым текстом.
2.PNG


Вы спросите "Зачем же нужна такая аутентификация когда у нас есть уже Базовая Аутентификая?"
Ответ совсем очевиден:
Дело в том , что Базовая Аутентификация отсылает на сервер логин и пароль в открытом виде.(Да они посылаются в base64 кодировке,но кодировка - это не шифрования!!!) А в силу того , что время не стоит на месте и с развитием WiFi технологий , да и в прочем и в Ethernet сетях , довольно часто развиваются все новые векторы MITM атак и логин и пароль с легкостью можно похитить посредством таких атак.(Речь сейчас идет конкретно про протокол HTTP не про HTTPS)
Так же алгоритм Дайджест Аутентификации описан в RFC 2069 . Еще не знаешь что такое RFC ? )) Ну друг мой - тебе рано или поздно придется с ним знакомится, если ты выбрал путь пентестера ;)
Простыми словами RFC (Request For Comments)- все стандарты Глобальной сети существующие в виде опубликованных заявок RFC)
И так давайте глянем на запрос ответ сервера на HTTP Дайджест аутентификацию:
4.PNG

Обращаем на заголовок запроса:
Authorization и его значения:
Digest - Указывает на то что используется Дайджест Аутентификация
Username - имя пользователя запрашиваемое веб сервером
realm - слово-фраза установленная администратором сервера
nonce - рандомный(случайный) набор символов в хекс виде.
uri - путь к приложению
responce - захешированая по алгоритму строка необходимая для проверки на стороне сервера
opaque - то же что и realm , но в нашем случае она пустая(так же задается в настройках веб сервера).

И как результат получаем все тот же 401 (как и при обычной базовой аутентификации) в случае не прохождении проверки на стороне сервера.
Давайте посмотрим на алгоритм хеширования данных при дайджест аутентификации:
1.PNG

Как видим строка responce (которую мы видели в запросе на веб сервере) получается путем хеширования по MD5 шифрованию (Hash1 строки Nonce(так же передаваемая в запросе) и Hash2)
А Hash1 получаем путем хеширования (логина : строки realm(которая так же передается в запросе) : пароля) и Hash2 получаем в результате хеширования (передаваемого метода (GET|POST : URI(также передаваемого в запросе)

В ваершарк это выглядит примерно так:
6.PNG


Теперь давайте попробуем шаг за шагом выполнить этот алгоритм хеширования
~~DarkNode~~ сказал(а):
(От себя скажу , что это очень немаловажный момент - понимания алгоритма хеширования , так как мы не раз будем сталкиваться с написанием собственных брутилок по определенных алгоритмах)

Для этого нам всего лишь понадобится использовать MD5 шифрования.
Сделать это можно во многих ЯП (Языках Программирования) , но я все же отдаю предпочтения Python:
Запустим для наглядности интерактивный режим Python:
Первым делам импортируем библиотеку hashlib
И создадим переменную hash1 в которую положим необходимое хешированое значение трех составляющих (login:realm:password):
7.PNG


Код:
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'
Получили hash1
Давайте получим hash2:
8.PNG

Код:
hash2=hashlib.md5('GET:/lab/webapp/digest/1').hexdigest()
>>> hash2
'51b79aa2c26cf4bb3cc8d74c90dc8c22'
И теперь давайте получим responce:
9.PNG

Как видим наши responce совпадают) Я Вас поздравляю - теперь вы знаете как работает алгоритм хеширования дайджест аутентификации.

Что касается атаки - атакуется она так же как и Basic HTTP Auth. Единственное отличие - это то что мы не сможем перехватить логин пароль в чистом виде при МИТМ атаках.

Для примера атаки возьмем как и в прошлой статье брут с помощью утилиты Hydra:
10.PNG


Видео к статье:
Вот код скрипта который использовал ввидео для демонстрации алгоритма:[hidepl="3,1"]
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
[/hidepl]

Презенташка со слайдами будет в загруженных файлах
В следующей статье мы поговорим о Cookie
Всем спасибо)
Продолжение следует)
 

Вложения

  • 3.PNG
    3.PNG
    57,8 КБ · Просмотры: 660
  • 5.PNG
    5.PNG
    34,3 КБ · Просмотры: 547
  • WAP_HTTP-Digest-Auth.pdf
    WAP_HTTP-Digest-Auth.pdf
    472,2 КБ · Просмотры: 297
hi!
не получаетсо
Код:
>>> responce=hashlib.md5("%s:%s:%s" %(hash1,nonce,hash2)).hexdigest()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Unicode-objects must be encoded before hashing
с hash1 сделал так:
Код:
>>> hash1=hashlib.md5('admin:Pentester Academy:asdss'.encode('utf-8')).hexdigest()

с hash2 также а вот responce не могу сформировать команду
И скрипт не хочет воркать
Код:
bash-4.2# python http_digest_ayth.py
  File "http_digest_ayth.py", line 13
    print  responce
                  ^
SyntaxError: Missing parentheses in call to 'print'
 
А какая версия python?
Если питон версии 3.x
То попробуйте запустить на версии 2.x
 
  • Нравится
Реакции: sdfsd
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab