{% 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://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html?highlight=sql%20inje#what-is-sql-injection">SQL-инъекция</a> - уязвимость системы, позволяющая пользователю ввести вредоносный код в SQL-запрос.<br />
        <p class="simpletext" style="text-align: left">Как именно это работает? Все дело в том, что данные, которые ввёл пользователь, вставляются в запрос напрямую <span class="context" style="font-size: 0.9rem">(пример кода с сервера ниже)</span></p>
        <pre><code class="codefont python">#Как же это работает на сервере?(не стоит так делать, иначе ваш код будет иметь ту же уязвимость)
login = request.form['login']  # Получаем данные из окна с логином, которые пользователь ввёл в форму
password = request.form['pass']  # Так же получаем данные из окна с паролем
cursor = get_db().cursor()  # Получение доступа к базе данных
cursor.execute(f'SELECT * FROM Users WHERE login == "{login}" AND password == "{password}"')  # Вставляем в запрос данные от пользователя</code></pre>
        <p class="simpletext" style="text-align: left">Так в место того, чтобы вводить свои данные, можно ввести определённые команды <span class="context" style="font-size: 0.9rem">(как правило - вредоносные)</span>
            Вводим в соответствующее поле предполагаемый логин админа - <span class="mono">admin</span>, а часть кода с проверкой пароля, которая идёт после проверки логина, просто закомментируем знаками <span class="mono">";--</span> или <span class="mono">"#</span>.
            Если мы введём <span class="mono">admin";--</span> в поле логин, то наш запрос на сервер отправится вот так:</p>
        <pre><code class="codefont python">cursor.execute(f'SELECT * FROM Users WHERE login == "admin";--" AND password == "{password}"')</code></pre>
        <p class="simpletext">Соответственно вся часть после знака комментария просто не учитывается. Вы успешно вошли под логином <span class="mono">admin</span>.</p>
        <span class="close-btn usable-context" onclick="hidePopup()">скрыть</span>
    </div>
<div class="container">
    <div class="capsule-window sqlInpt" >
            <form action="sql-injection" method="post" class="simpletext">
                <p class="simpletext">Попробуй войти от имени админа,<br />
                    используя уязвимость<abbr class="hltext" title="Смотри подсказку(кнопка снизу слева)">SQL-инъекции</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> <input type="password" name="pass" class="inpt"/></div>
                <input type="submit" value="Submit" class="btn1" />
            </form>
    </div>
</div>
    {% if error %}
        <div id="error"> <p>{{ error }}</p> </div>
    {% elif success %}
        <div id="success"> <p>{{ success }}</p> </div>
    {% endif %}

{% endblock %}
