2025-04-20 09:07:22 +03:00

48 lines
4.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% extends 'utils/_task.html' %}
{% block content %}
{% include 'utils/_websidenav.html' %}
<div id="popup" class="sql-guide capsule-window">
<p class="simpletext" style="text-align: left"><a class="hltext" href="https://portswigger.net/web-security/access-control/idor">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&lt;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>
<div class="container">
<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" 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 class="flag-input">
<h3 class="header" style="text-align:left">Введите ответ:</h3>
<form action="/web/idor" method="post" class="simpletext">
<input class="inpt" type="text" name="user_flag" style="width: 100%; height: 1.25rem; margin: 0">
<input type="submit" value="Submit" class="btn1" style="margin-top: 1.25rem">
</form>
</div>
</div>
{% if error %}
<div id="error"> <p>{{ error }}</p> </div>
{% elif success_flag %}
<div class="task-done">
<h1 class="header">Вы прошли задание!</h1>
<img class="done" src="{{ url_for('static', filename='imgs/done_icon.png') }}">
<a href="{{ url_for('web') }}" class="usable-context" style="text-align: canter; margin: 1rem; padding: 1rem;"> < Вернуться к заданиям > </a>
</div>
{% endif %}
{% endblock %}