44 lines
4.3 KiB
HTML
44 lines
4.3 KiB
HTML
{% 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/file-path-traversal">Path Traversal</a> - уязвимость, позволяющая пользователю получить доступ к файлам на хосте при помощи уязвимого параметра URL.</p>
|
||
<p class="simpletext" style="text-align: left">Как это работает? Для просмотра или скачивания файла на сайте есть условная кнопка, при нажатии на неё, в путь прибавляется параметр, аргумент которого - путь к файлу:<span class="context">(пример тега ниже)</span></p>
|
||
<pre><code class="codefont html"> <button class="big_btn" onclick="location.href='/cats/download_cat?file=static/imgs/cat.jpg'"></code></pre>
|
||
<p class="simpletext" style="text-align: left">Да, это просто самый обычный путь, который без проверок принимается сервером, на что в ответ, пользователь получает запрошенный файл:<span class="context">(пример кода ниже)</span></p>
|
||
<pre><code class="codefont python"> filename = request.args.get("file")
|
||
return send_file(filename)</code></pre>
|
||
<p class="simpletext" style="text-align: left">Получается можно вписать туда что-то своё? Именно! В задании от нас хотят флаг, который лежит в <span class="mono">.txt</span> файле. Получается мы можем изменить параметр заменой <span class="mono">cat.jpg -> flag.txt</span></p>
|
||
<p class="simpletext" style="text-align: left">Есть и более жестокая эксплуатация сей уязвимости: можно откатиться на директории назад, дойти до корня и взять важный системный файл. Как это сделать? <span class="mono">../</span> вернёт нас на директорию назад. Так можем попробовать снова изменить путь: <span class="mono">cat.jpg -> ../../app.py</span>, что вернёт нам соответствующий <a calss="hltext" hraf="https://g.codrs.ru/Chest/CTF-site-project/src/branch/master/app.py">python файл</a></p>
|
||
<span class="close-btn usable-context" onclick="hidePopup()">скрыть</span>
|
||
</div>
|
||
|
||
<div class="container">
|
||
<div class="small capsule-window info1" style="height: auto;">
|
||
<p class="simpletext"><abbr class="hltext" title="Смотри подсказку(кнопка снизу слева)">Посмотри</abbr> файл и помоги решить задачку, но будь внимателен, стоит проверять, что происходит при нажатии на подозрительные кнопки. Флаг в соотвествующем .txt файле</p>
|
||
<button class="btn1" onclick="location.href='/web/path-traversal?file=static/imgs/cat.jpg'">
|
||
К изображению
|
||
</button>
|
||
</div>
|
||
|
||
<div class="flag-input">
|
||
<h3 class="header" style="text-align:left">Введите ответ:</h3>
|
||
<form action="/web/path-traversal" 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 %} |