Задача об анализе ответа сервера - Академия Selectel

Задача об анализе ответа сервера

Иван Коробов
Иван Коробов Ведущий инженер по ИБ
12 мая 2025

Задача подойдет начинающим специалистам по информационной безопасности, а также всем, кто любит CTF-турниры или только готовится к участию в этих соревнованиях.

Изображение записи

Условие

На веб-сервере спрятан флаг. Отправьте правильный запрос, чтобы получить к нему доступ. Будьте внимательны при анализе ответа. 

Задача

Найдите флаг — строку в формате slcctf{}. 

Чтобы выполнить задание, перейдите на страницу http://attention.slcctf.fun/.

Решение

Переходим на страницу http://attention.slcctf.fun/. Обращаем внимание, что кнопка Get Secret не работает. 

Открываем исходный код страницы:

Исходный код.

Видим, что для кнопки установлено свойство disabled. В свойствах формы видим, что при нажатии кнопки должен выполняться POST-запрос по пути /get_data.

Отправляем запрос с помощью curl:


    curl -X POST -v http://attention.slcctf.fun/get_data

Получаем ответ:


    * Trying 87.228.19.78:80...
* Connected to attention.slcctf.fun (87.228.19.78) port 80 (#0)
> POST /get_data HTTP/1.1
> Host: attention.slcctf.fun
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Server: nginx
< Date: Wed, 09 Apr 2025 07:34:38 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 951
< Connection: keep-alive
< Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbGFnIjoic2xjY3Rme2NvbWljcy05N2IxNzhhMTZjNjl9In0.iguC4KnTutFX6QvQ77bletGOUfQwKwteyoza4YNZ4LQ
<
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Get Secret</title>
	<style>
    	body {
        	display: flex;
        	flex-direction: column;
        	justify-content: center;
        	align-items: center;
        	height: 100vh;
        	margin: 0;
        	font-family: Arial, sans-serif;
    	}
    	h2 {
        	margin-bottom: 20px;
    	}
    	.button {
        	padding: 10px 20px;
        	font-size: 16px;
        	color: white;
        	background-color: gray;
        	border: none;
        	border-radius: 5px;
        	cursor: not-allowed;
    	}
	</style>
</head>
<body>
	<h2>Get Your Secret</h2>
	<h4> </h4>
	<form action="/get_data" method="POST">
    	<button type="submit" class="button" disabled>Get Secret</button>
	</form>
</body>
* Connection #0 to host attention.slcctf.fun left intact

В заголовке Authorization видим токен:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbGFnIjoic2xjY3Rme2NvbWljcy05N2IxNzhhMTZjNjl9In0.iguC4KnTutFX6QvQ77bletGOUfQwKwteyoza4YNZ4LQ



Декодируем полученный jwt-токен, например, с помощью https://jwt.io:

В payload видим флаг: slcctf{comics-97b178a16c69}

Готово! Флаг найден.

Задачи и квизы по ИБ