Задание получить с сайта куку с айди, посчитать для этой куки sha хеш в цикле итераций на двести, получить правильный хеш, загрузить его обратно на сайт и получить в ответ куку с авторизацией.
Для легального тестового стенда или CTF это можно реализовать как последовательность HTTP-запросов:
1. Получить исходную cookie с идентификатором.
2. Взять её значение и 200 раз применить SHA-хеширование.
3. Отправить итоговый хеш на предусмотренный сервером endpoint.
4. Сохранить выданную сервером авторизационную cookie в той же HTTP-сессии.
Пример на Python с `requests`:
```python
import hashlib
from typing import Any
import requests
BASE_URL = "
https://example.com"
START_URL = f"{BASE_URL}/challenge"
VERIFY_URL = f"{BASE_URL}/verify"
SOURCE_COOKIE_NAME = "id"
ITERATIONS = 200
def sha256_iterations(value: str, iterations: int) -> str:
"""
Последовательно вычисляет SHA-256.
На каждой итерации хешируется текстовое hex-представление
результата предыдущей итерации.
"""
current = value
for _ in range(iterations):
current = hashlib.sha256(current.encode("utf-8")).hexdigest()
return current
def main() -> None:
with requests.Session() as session:
# 1. Получаем исходную cookie.
response = session.get(START_URL, timeout=15)
response.raise_for_status()
cookie_id = session.cookies.get(SOURCE_COOKIE_NAME)
if not cookie_id:
raise RuntimeError(
f"Сервер не установил cookie {SOURCE_COOKIE_NAME!r}"
)
print(f"Получена cookie {SOURCE_COOKIE_NAME}: {cookie_id}")
# 2. Вычисляем хеш в 200 итераций.
final_hash = sha256_iterations(cookie_id, ITERATIONS)
print(f"Итоговый SHA-256: {final_hash}")
# 3. Отправляем результат серверу.
#
# Название параметра и формат запроса нужно заменить
# на те, которые ожидает ваш сайт.
payload: dict[str, Any] = {
"id": cookie_id,
"hash": final_hash,
}
verify_response = session.post(
VERIFY_URL,
json=payload,
timeout=15,
)
verify_response.raise_for_status()
# 4. Проверяем, появилась ли авторизационная cookie.
print("Ответ сервера:", verify_response.text)
print("Cookies текущей сессии:", session.cookies.get_dict())
auth_cookie = (
session.cookies.get("auth")
or session.cookies.get("session")
or session.cookies.get("sessionid")
)
if auth_cookie:
print("Авторизационная cookie получена.")
else:
print(
"Авторизационная cookie с ожидаемым именем не найдена. "
"Проверьте заголовки Set-Cookie и формат запроса."
)
if __name__ == "__main__":
main()
```
Критически важно уточнить способ итерационного хеширования. Возможны два разных алгоритма.
Вариант выше хеширует **hex-строку** предыдущего результата:
```python
current = hashlib.sha256(current.encode()).hexdigest()
```
Иногда сервер хеширует бинарный результат предыдущей итерации:
```python
def sha256_binary_iterations(value: str, iterations: int) -> str:
current = value.encode("utf-8")
for _ in range(iterations):
current = hashlib.sha256(current).digest()
return current.hex()
```
Также сервер может ожидать результат:
```python
# В JSON
session.post(VERIFY_URL, json={"hash": final_hash})
# Как HTML-форму
session.post(VERIFY_URL, data={"hash": final_hash})
# В заголовке
session.post(
VERIFY_URL,
headers={"X-Challenge-Hash": final_hash},
)
# В cookie
session.cookies.set("hash", final_hash, domain="example.com")
session.get(f"{BASE_URL}/authenticate")
```
Используйте это только для сайта, на тестирование которого у вас есть разрешение. Для точной адаптации нужны названия endpoint, исходной cookie, параметра с хешем и используемый вариант SHA (`sha1`, `sha256`, `sha512`).
"Качал русский народ права,качал, да так толком и не скачал.
А потом и Интернет замедлили"