Compare commits
No commits in common. "a1eb5e8c274cefda79007ec3b70bea6eba8f2819" and "0302e4b964a52f6b4aff727f1e05967aa68446fa" have entirely different histories.
a1eb5e8c27
...
0302e4b964
35
app.py
35
app.py
@ -1,11 +1,10 @@
|
|||||||
import werkzeug
|
import werkzeug
|
||||||
from flask import Flask, render_template, request, url_for, session, redirect, g, abort, send_file, render_template_string
|
from flask import Flask, render_template, request, url_for, session, redirect, g, abort, send_file
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from random import getrandbits
|
from random import getrandbits
|
||||||
from func import *
|
from func import *
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
|
|
||||||
connection = sqlite3.connect('database.db')
|
connection = sqlite3.connect('database.db')
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
cursor.execute('''
|
cursor.execute('''
|
||||||
@ -74,35 +73,9 @@ def webidor():
|
|||||||
def webpt():
|
def webpt():
|
||||||
return render_template('path-traversal.html')
|
return render_template('path-traversal.html')
|
||||||
|
|
||||||
@app.route("/web/ssti", methods=('GET', 'POST'))
|
@app.route("/web/ssti")
|
||||||
def webssti():
|
def webssti():
|
||||||
id = session.get('ssti_id')
|
return render_template('ssti.html')
|
||||||
flag = session.get('flag_ssti')
|
|
||||||
if id not in comments.keys():
|
|
||||||
session['ssti_id'] = id = hex(getrandbits(45))[2:]
|
|
||||||
comments[id] = []
|
|
||||||
session['flag_ssti'] = flag = f'C4TchFl4g{{{hex(getrandbits(45))[2:]}}}'
|
|
||||||
|
|
||||||
if request.method == 'POST':
|
|
||||||
if 'user_flag' in request.form.keys():
|
|
||||||
user_flag = request.form['user_flag']
|
|
||||||
if user_flag == flag:
|
|
||||||
return render_template('ssti.html', flag=flag, success_flag='.')
|
|
||||||
return render_template('ssti.html', flag=flag, error='Ошибка: неверный флаг!')
|
|
||||||
|
|
||||||
username = request.form['username']
|
|
||||||
comment = request.form['user_comment']
|
|
||||||
comments[id].append((username, comment))
|
|
||||||
def render(x):
|
|
||||||
try:
|
|
||||||
return render_template_string(x, flag=flag)
|
|
||||||
except:
|
|
||||||
return x
|
|
||||||
return render_template('ssti.html', render_template_string=render, comments=comments[id], flag=flag)
|
|
||||||
|
|
||||||
|
|
||||||
comments = {}
|
|
||||||
|
|
||||||
|
|
||||||
@app.route("/web/portswigger-guide")
|
@app.route("/web/portswigger-guide")
|
||||||
def webpsguide():
|
def webpsguide():
|
||||||
@ -140,7 +113,7 @@ def fbase():
|
|||||||
if not flag_task4:
|
if not flag_task4:
|
||||||
session['flag_task4'] = flag_task4 = f'C4TchFl4g{{{hex(getrandbits(45))[2:]}}}'
|
session['flag_task4'] = flag_task4 = f'C4TchFl4g{{{hex(getrandbits(45))[2:]}}}'
|
||||||
base32str = str(base64.b32encode(flag_task4.encode()))[2:-1]
|
base32str = str(base64.b32encode(flag_task4.encode()))[2:-1]
|
||||||
base64str = str(base64.b64encode(f"Ой-ой, похоже, что самое главное всё ещё зашифровано.. Сможешь расшифровать, ОП? {base32str}".encode()))[2:-1]
|
base64str = str(base64.b64encode(f"Ой-ой, похоже, что самое главное всё ещё зашифровано( {base32str}".encode()))[2:-1]
|
||||||
return render_template('base.html', base_task=base64str)
|
return render_template('base.html', base_task=base64str)
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,13 +168,6 @@
|
|||||||
align-content: flex-start;
|
align-content: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
.comments {
|
|
||||||
background-color: rgb(35, 33, 54);
|
|
||||||
height: 60%;
|
|
||||||
width: 80%;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navgoodlinks {
|
.navgoodlinks {
|
||||||
display:flex;
|
display:flex;
|
||||||
justify-content: start;
|
justify-content: start;
|
||||||
|
@ -3,20 +3,6 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div id="popup" class="sql-guide capsule-window">
|
<div id="popup" class="sql-guide capsule-window">
|
||||||
<p class="simpletext" style="text-align: left">Любой файл можно представить в виде <a href="https://course.ugractf.ru/stegano/files.html" class="hltext">Hex-данных</a>.</p>
|
|
||||||
<p class="simpletext" style="text-align: left">Для записи байтов в hex формате используется 16-ричный вид (по 2 цифры), т.е от 0 до F. В Hex'е файла можно наблюдать: важные сигнатуры, указывающие на тип файла и просто байты информации.</p>
|
|
||||||
<p class="simpletext" style="text-align: left">Эти данные можно редактировать в Hex-редакторах, например, <a href="https://course.ugractf.ru/stegano/files.html" class="hltext">xxd</a>. Открыть файл и посмотреть его Hex с помощью xxd можно так:<span class="context" style="font-size: 0.9rem">(пример команды ниже)</span></p>
|
|
||||||
<pre><code class="codefont bash">xxd [файл]</code></pre>
|
|
||||||
<p class="simpletext" style="text-align: left">Не обязательно вносить какие-либо изменения, можно просто внимательно посмотреть их представление в формате ASCII <span class="context" style="font-size: 0.9rem">(Обычно слева - данные в бинарном виде, посередине - столбик с 16-ричными данными (Hex), а справа их представление в понятном нам языке, в виде символов ASCII).</span></p>
|
|
||||||
<pre><code class="codefont bash">
|
|
||||||
│00000000│ 50 4b 03 04 14 00 06 00 ┊ 08 00 00 00 21 00 32 91 │PK•••⋄•⋄┊•⋄⋄⋄!⋄2×│
|
|
||||||
│00000010│ 6f 57 66 01 00 00 a5 05 ┊ 00 00 13 00 08 02 5b 43 │oWf•⋄⋄ו┊⋄⋄•⋄••[C│
|
|
||||||
│00000020│ 6f 6e 74 65 6e 74 5f 54 ┊ 79 70 65 73 5d 2e 78 6d │ontent_T┊ypes].xm│
|
|
||||||
│00000030│ 6c 20 a2 04 02 28 a0 00 ┊ 02 00 00 00 00 00 00 00 │l ו•(×⋄┊•⋄⋄⋄⋄⋄⋄⋄│</code></pre>
|
|
||||||
<p class="simpletext" style="text-align: left">Вышеприведённый пример - начало любого .docx файла и в самом начале у него идут 2 байта отвечающие за его структуру <a href="{{ url_for('fbinwalk') }}" class="hltext" title="Задание на эту тему">архива</a> - PK или же 50 4b. Если их повредить, т.е изменить в редакторе 50 4b -> 00 00, то файл просто перестанет открываться.</p>
|
|
||||||
<p class="simpletext" style="text-align: left">Однако в случае нашего задания нужно просто посмотреть на строки без пустых или бесполезных байтов. С этим может помочь утилита <a href="https://ioflood.com/blog/strings-linux-command/" class="hltext">strings</a>:<span class="context" style="font-size: 0.9rem">(пример команды ниже)</span></p>
|
|
||||||
<pre><code class="codefont bash">strings [файл]</code></pre>
|
|
||||||
<p class="simpletext" style="text-align: left">Именно она и выведет нам флаг быстрее всех.</p>
|
|
||||||
<span class="close-btn usable-context" onclick="hidePopup()">скрыть</span>
|
<span class="close-btn usable-context" onclick="hidePopup()">скрыть</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
{% extends 'utils/_task.html' %}
|
|
||||||
{% include 'utils/_forensicsidenav.html' %}
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<div id="popup" class="sql-guide capsule-window">
|
|
||||||
<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">Приветствую тебя, о сетевой путник! Прошу, оставь упоминание о себе здесь!</p>
|
|
||||||
<form action="/web/ssti" method="post" class="simpletext">
|
|
||||||
<div class="small-container" ><p>Имя:<input class="inpt" type="text" name="username" style="width: 100%; height: 1.25rem; margin: 0"></p></div>
|
|
||||||
<div class="small-container" ><p>Комментарий:<input class="inpt" type="text" name="user_comment" style="width: 100%; height: 1.25rem; margin: 0"></p></div>
|
|
||||||
<input type="submit" value="Submit" class="btn1" style="margin-top: 1.25rem">
|
|
||||||
</form>
|
|
||||||
<div class="comments">
|
|
||||||
{% for (username, comment) in comments -%}
|
|
||||||
<p class="header" style="text-align: left">{{ username }}</p>
|
|
||||||
<p class="mono">{{ render_template_string(comment) }}</p>
|
|
||||||
{% endfor -%}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flag-input">
|
|
||||||
<h3 class="header" style="text-align:left">Введите ответ:</h3>
|
|
||||||
<form action="/web/ssti" 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('forensic') }}" class="usable-context" style="text-align: canter; margin: 1rem; padding: 1rem;"> < Вернуться к заданиям > </a>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endblock %}
|
|
Loading…
x
Reference in New Issue
Block a user