feat(web): idor help
This commit is contained in:
parent
9b0220bdf6
commit
b256ffa363
6
app.py
6
app.py
@ -111,7 +111,7 @@ def webidor():
|
||||
return render_template('idor.html', error='Ошибка: Пароль важен, заполните поле!')
|
||||
|
||||
session['idor_flag'] = f'C4TchFl4g{{{hex(getrandbits(45))[2:]}}}'
|
||||
session['idor_id'] = id = getrandbits(8)
|
||||
session['idor_id'] = id = getrandbits(8) + 16
|
||||
idor_main_users[id] = {'login': login,'mail': mail}
|
||||
return redirect(url_for('webidor_user', id=session['idor_id']), code=302)
|
||||
return render_template('idor.html')
|
||||
@ -121,8 +121,8 @@ def webidor():
|
||||
def webidor_user(id):
|
||||
if 'idor_id' not in session.keys():
|
||||
abort(404)
|
||||
if id <= 32:
|
||||
idor_users = {0: ('admin', 'popa'), 1: ('an', 'fffff'), 2: ('adm', 'qweqewqeqweqwe'), 3: ('admin', session['idor_flag']), 4: ('admin', ''), 5: ('admin', ''), 6: ('admin', ''), 7: ('admin', ''), 8: ('admin', ''), 9: ('admin', ''), 10: ('admin', ''), 11: ('admin', ''), 12: ('admin', ''), 13: ('admin', ''), 14: ('admin', ''), 15: ('admin', '')}
|
||||
if id <= 16:
|
||||
idor_users = {0: ('admin', 'superadmin@codrs.ru', 'Самый крутой админ EVER!!! Не согласен - не прав!'), 1: ('Y0ur_m0m', 'l0ser@codrs.ru', 'Ха-ха! Тупой юзер, ******, **** и *****'), 2: ('meg4_c4t', 'meowmeow@codrs.ru', 'Мяу-мяу, мяу-мяу... мяу-мяу, мяу-мяу'), 3: ('Pepeg4', 'pepeg@codrs.ru', 'Pepe love you too'), 4: ('ChestWithCat', 'chast@codrs.ru', 'Сундук из майнкрафта. На сундуке кот. Есть рыба, кота приручить?'), 5: ('legacy_user', 'legacy@coders-squad.com', 'А вот прошлый домен был лучше! Продались российским корпорациям!!!!!'), 6: ('m&ms', 'm&ms_lover@codrs.ru', 'Ставлю лайки за покупку m&ms, писать в ТГ'), 7: ('am0ng US', 'US_agent@gmail.com','Russishe Sweine!'), 8: ('anime_girl', 'megumin@codrs.ru', ''), 9: (session['idor_flag'], 'supercat@codrs.ru', 'О, смотри! Там флаг!!! Ты нашёл:3'), 10: ('b0ss_0f_this-GYM', 'b0ss@codrs.ru', 'И что же ты хотел увидеть в описании у Босса качалки?'), 11: ('CS2_Destroyer', 'player777@codrs.ru', 'Погнали в Напы выскочим, размотаем всех. Не играешь? Я в соло вытащу, а ты посмотришь'), 12: ('VerySweetBread', 'sweetbread@codrs.ru'), 13: ('pupok', 'pup_zemli@codrs.ru', 'Whait.. WHAT?!'), 14: ('secret_KGB_agent', 'b0rn_in_US4@codrs.su', 'Союз нерушимый республик свободных!'), 15: ('nikitata', '1ida_1over@codrs.ru', 'Раст победа?')}
|
||||
return render_template('idor_user.html', user=idor_users[id])
|
||||
if id not in idor_main_users.keys():
|
||||
abort(404)
|
||||
|
@ -8,6 +8,8 @@
|
||||
<h2 class="header" style="text-align:left">Ваш Профиль:</h2>
|
||||
<p class="simpletext" style="text-align:left">Логин: <span class="context">{{ login }}</span></p>
|
||||
<p class="simpletext" style="text-align:left">Почта: <span class="context">{{ mail }}</span></p>
|
||||
<p class="simpletext" style="text-align:left">О Вас: <br />
|
||||
<span class="mono">Здесь пока совсем ничего нет</span></p>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'utils/_websidenav.html' %}
|
||||
|
@ -1,9 +1,18 @@
|
||||
{% extends 'utils/_task.html' %}
|
||||
|
||||
{% block content %}
|
||||
{% include 'utils/_forensicsidenav.html' %}
|
||||
{% include 'utils/_websidenav.html' %}
|
||||
|
||||
<div id="popup" class="sql-guide capsule-window">
|
||||
<p class="simpletext" style="text-align: left"><a class="hltext" hraf="">IDOR(Insecure direct object references)</a> - уязвимость, позволяющая пользователю получить доступ к объекту (к которому он доступ иметь не должен) напрямую, без проверок, например по ID</p>
|
||||
<p class="simpletext" style="text-align: left">Как именно это работает? На сервере просто отсутствую проверки, которые не дают пользователю реализовать доступ к определённым объектам. На сервере это может выглядеть так: <span class="context">(привер кода ниже)</span></p>
|
||||
<pre><code class="codefont python">@app.route("/web/idor/user_id< int:id >")
|
||||
def user(id):
|
||||
return render_template(f'user_id{id}.html')</code></pre>
|
||||
<p class="simpletext" style="text-align: left">Грубо говоря, мы можем ввести ID в путь и получить приватную страницу пользователя<span class="context">(конкретно тут она не выглядит сильно приватной, но всё же)</span>, ID которого ввели</p>
|
||||
<p class="simpletext" style="text-align: left">Для решения этого задания стоит посмотреть на путь, и заметить, что там есть id : <span class = mono>ctf.codrs.ru/web/idor/user_id184</span>. Можно попробовать поменять ID и обнаружить, что нас переносит на странички других пользователей.<span class="context">ID, на которых есть странички - Ваш ID и числа от 0 до 15</span></p>
|
||||
<p class="simpletext" style="text-align: left">Походив поп рофилям пользователей можно увидеть, что у одного из них <span class="context">(ID 9)</span> Имя пользователя - флаг.</p>
|
||||
<p class="simpletext" style="text-align: left">Далее стоит вернуться на главную, используя стрелочку назад в самом браузере, и ввести флаг в соответствующее поле. Будьте вниметельны! После каждого нажатия кнопки <span class="mono">Войти</span> флаг перегенерируется.</p>
|
||||
<span class="close-btn usable-context" onclick="hidePopup()">скрыть</span>
|
||||
</div>
|
||||
|
||||
@ -11,13 +20,12 @@
|
||||
<div class="small capsule-window info1" style="height: auto;">
|
||||
<form action="/web/idor" method="post" class="simpletext">
|
||||
<p class="simpletext">Блин, я потерял страничку пользователя с почтой <abbr class="hltext" title="Смотри подсказку(кнопка снизу слева)">supercat@codrs.ru</abbr>. Можешь поискать? Для начала войди на сайт.</p>
|
||||
<div class="small-container" ><p>Логин: <p class="hidden">.</p> </p> <input type="text" name="login" class="inpt" /></div>
|
||||
<div class="small-container" ><p>Почта: <p class="hidden">.</p> </p> <input type="text" name="mail" class="inpt" /></div>
|
||||
<div class="small-container"><p>Пароль:</p> <input type="password" name="pass" class="inpt"/></div>
|
||||
<div class="small-container" style="justify-content: center;" ><p>Логин: <p class="hidden">.</p> </p> <input type="text" name="login" class="inpt" /></div>
|
||||
<div class="small-container" style="justify-content: center;"><p>Почта: <p class="hidden">.</p> </p> <input type="text" name="mail" class="inpt" /></div>
|
||||
<div class="small-container" style="justify-content: center;"><p>Пароль:</p> <input type="password" name="pass" class="inpt"/></div>
|
||||
<input type="submit" value="Войти" class="btn1">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flag-input">
|
||||
<h3 class="header" style="text-align:left">Введите ответ:</h3>
|
||||
|
@ -8,6 +8,8 @@
|
||||
<h2 class="header" style="text-align:left">Ваш Профиль:</h2>
|
||||
<p class="simpletext" style="text-align:left">Логин: <span class="context">{{ user[0] }}</span></p>
|
||||
<p class="simpletext" style="text-align:left">Почта: <span class="context">{{ user[1] }}</span></p>
|
||||
<p class="simpletext" style="text-align:left">Описание: <br />
|
||||
<span class="mono">{{ user[2] }}</span></p>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'utils/_websidenav.html' %}
|
||||
|
@ -1,7 +1,7 @@
|
||||
{% extends 'utils/_task.html' %}
|
||||
|
||||
{% block content %}
|
||||
{% include 'utils/_forensicsidenav.html' %}
|
||||
{% include 'utils/_websidenav.html' %}
|
||||
|
||||
<div id="popup" class="sql-guide capsule-window">
|
||||
<span class="close-btn usable-context" onclick="hidePopup()">скрыть</span>
|
||||
|
Loading…
x
Reference in New Issue
Block a user