Compare commits
No commits in common. "649c621345766cd775cfea74b25563f0624e652e" and "4c349249eb8e4ed1715b77d5effd738b7d784220" have entirely different histories.
649c621345
...
4c349249eb
45
app.py
45
app.py
@ -3,7 +3,6 @@ from flask import Flask, render_template, request, url_for, session, redirect, g
|
|||||||
import sqlite3
|
import sqlite3
|
||||||
from random import getrandbits
|
from random import getrandbits
|
||||||
from func import *
|
from func import *
|
||||||
import base64
|
|
||||||
|
|
||||||
connection = sqlite3.connect('database.db')
|
connection = sqlite3.connect('database.db')
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
@ -83,57 +82,33 @@ def webpsguide():
|
|||||||
|
|
||||||
@app.route("/forensic/metadata", methods=('GET', 'POST'))
|
@app.route("/forensic/metadata", methods=('GET', 'POST'))
|
||||||
def fmetadata():
|
def fmetadata():
|
||||||
flag_task1 = session['flag_task1']
|
session['task1_id'] = id = hex(getrandbits(45))[2:]
|
||||||
|
session['flag_task1'] = flag_task1 = f'C4TchFl4g{{{hex(getrandbits(45))[2:]}}}'
|
||||||
|
task1_flag(flag_task1, id)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
user_flag = request.form['user_flag']
|
user_flag = request.form['user_flag']
|
||||||
if user_flag == flag_task1:
|
if user_flag == flag_task1:
|
||||||
return render_template('task1-metadata.html', flag=flag_task1, success_flag='.')
|
return render_template('task1-metadata.html', flag=flag_task1, success_flag='.')
|
||||||
return render_template('task1-metadata.html', flag=flag_task1, error='Ошибка: неверный флаг!')
|
return render_template('task1-metadata.html', flag=flag_task1, error='Ошибка: неверный флаг!')
|
||||||
|
if flag_task1:
|
||||||
if not flag_task1:
|
|
||||||
session['task1_id'] = id = hex(getrandbits(45))[2:]
|
|
||||||
session['flag_task1'] = flag_task1 = f'C4TchFl4g{{{hex(getrandbits(45))[2:]}}}'
|
|
||||||
task1_flag(flag_task1, id)
|
|
||||||
return render_template('task1-metadata.html', flag=flag_task1)
|
return render_template('task1-metadata.html', flag=flag_task1)
|
||||||
|
abort(404)
|
||||||
|
return render_template('task1-metadata.html')
|
||||||
|
|
||||||
@app.route("/forensic/getimg")
|
@app.route("/forensic/getimg")
|
||||||
def forensic_task1():
|
def forensic_task1():
|
||||||
return send_file(f'/tmp/task1/{session['task1_id']}.jpg')
|
return send_file(f'/tmp/task1/{session['task1_id']}.jpg')
|
||||||
|
|
||||||
@app.route("/forensic/base-guide", methods=('GET', 'POST'))
|
@app.route("/forensic/base-guide")
|
||||||
def fbase():
|
def fbase():
|
||||||
flag_task4 = session['flag_task4']
|
return render_template('base.html')
|
||||||
if request.method == 'POST':
|
|
||||||
user_flag = request.form['user_flag']
|
|
||||||
if user_flag == flag_task4:
|
|
||||||
return render_template('base.html', flag=flag_task4, success_flag='.')
|
|
||||||
return render_template('base.html', flag=flag_task4, error='Ошибка: неверный флаг!')
|
|
||||||
if not flag_task4:
|
|
||||||
session['flag_task2'] = flag_task4 = f'C4TchFl4g{{{hex(getrandbits(45))[2:]}}}'
|
|
||||||
base32str = str(base64.b32encode(flag_task4.encode()))[2:-1]
|
|
||||||
base64str = str(base64.b64encode(f"Ой-ой, похоже, что самое главное всё ещё зашифровано( {base32str}".encode()))[2:-1]
|
|
||||||
return render_template('base.html', base_task=base64str)
|
|
||||||
|
|
||||||
|
@app.route("/forensic/.docx_files")
|
||||||
@app.route("/forensic/.docx_files", methods=('GET', 'POST'))
|
|
||||||
def fbinwalk():
|
def fbinwalk():
|
||||||
flag_task3 = 'C4TchFl4g{GT4_6_1eaks}'
|
|
||||||
if request.method == 'POST':
|
|
||||||
user_flag = request.form['user_flag']
|
|
||||||
if user_flag == flag_task3:
|
|
||||||
return render_template('binwalk.html', flag=flag_task3, success_flag='.')
|
|
||||||
return render_template('binwalk.html', flag=flag_task3, error='Ошибка: неверный флаг!')
|
|
||||||
return render_template('binwalk.html')
|
return render_template('binwalk.html')
|
||||||
|
|
||||||
@app.route("/forensic/hex", methods=('GET', 'POST'))
|
@app.route("/forensic/hex")
|
||||||
def fhex():
|
def fhex():
|
||||||
flag_task2 = "C4TchFl4g{I_hir3d_7his_c4r_t0_st4r3_4t_Y0u}"
|
|
||||||
if request.method == 'POST':
|
|
||||||
user_flag = request.form['user_flag']
|
|
||||||
if user_flag == flag_task2:
|
|
||||||
return render_template('hex.html', flag=flag_task2, success_flag='.')
|
|
||||||
return render_template('hex.html', flag=flag_task2, error='Ошибка: неверный флаг!')
|
|
||||||
return render_template('hex.html')
|
|
||||||
return render_template('hex.html')
|
return render_template('hex.html')
|
||||||
|
|
||||||
@app.route("/forensic/hash")
|
@app.route("/forensic/hash")
|
||||||
|
3
func.py
3
func.py
@ -2,7 +2,6 @@ import os
|
|||||||
|
|
||||||
def task1_flag(flag_task1, id):
|
def task1_flag(flag_task1, id):
|
||||||
os.system('exiftool -all= static/imgs/task1.jpg')
|
os.system('exiftool -all= static/imgs/task1.jpg')
|
||||||
if not os.path.exists('/tmp/task1'):
|
os.system('mkdir /tmp/task1')
|
||||||
os.mkdir('/tmp/task1')
|
|
||||||
os.system(f'cp static/imgs/task1.jpg /tmp/task1/{id}.jpg')
|
os.system(f'cp static/imgs/task1.jpg /tmp/task1/{id}.jpg')
|
||||||
os.system(f"exiftool -Comment='{flag_task1}' /tmp/task1/{id}.jpg")
|
os.system(f"exiftool -Comment='{flag_task1}' /tmp/task1/{id}.jpg")
|
Binary file not shown.
Before Width: | Height: | Size: 67 KiB |
@ -1,33 +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">
|
|
||||||
<p class="simpletext">На просторах небезызвестной ветки /b форума Двач я нашёл это.. Оно определённо точно напоминает мне <abbr class="hltext" title="Смотри подсказку(кнопка снизу слева)">какую-то кодировку</abbr>.. или их там сразу две? Поможешь разгадать эту загадку?</p>
|
|
||||||
<pre><code style="width: 35rem" class="codefont bash">{{ base_task }}</code></pre>
|
|
||||||
</div>
|
|
||||||
<div class="flag-input">
|
|
||||||
<h3 class="header" style="text-align:left">Введите ответ:</h3>
|
|
||||||
<form action="/forensic/base-guide" 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 %}
|
|
@ -1,40 +0,0 @@
|
|||||||
{% extends 'utils/_task.html' %}
|
|
||||||
{% include 'utils/_forensicsidenav.html' %}
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<div id="popup" class="sql-guide capsule-window">
|
|
||||||
<p class="simpletext" style="text-align: left"><a href="https://encyclopedia.kaspersky.ru/glossary/docx/" class="hltext">.docx</a> файлы это примерно одно и то же, что простой .zip архив. Внутри него отдельными файлами хранятся шрифты, содержание, разметка и приложения, в общем - всё, что использовалось в документе.</p>
|
|
||||||
<p class="simpletext" style="text-align: left">Таким образом, если файл не открывается, то можно попробовать вытащить его содержимое, используя предустановленную в Kali утилиту <a href="https://kali.tools/?p=6771" class="hltext">Binwalk</a>. (Ну или посмотреть на повреждённые сигнатуры.. Но об этом в таске про <a href="{{ url_for('fhex') }}" class="hltext">Hex</a>)</p>
|
|
||||||
<p class="simpletext" style="text-align: left">Как использовать утилиту binwalk? Для начала стоит просто просмотреть файл на наличие в нём чего-либо:<span class="context" style="font-size: 0.9rem">(пример команды ниже)</span></p>
|
|
||||||
<pre><code class="codefont bash">binwalk [файл]</code></pre>
|
|
||||||
<p class="simpletext" style="text-align: left">Если в выданных данных вы замечаете что-то, что не пустое, то можно попробовать извлечь всё содежимое, добавив соответсвующий флаг в команду:</p>
|
|
||||||
<pre><code class="codefont bash">binwalk -e [файл]</code></pre>
|
|
||||||
<p class="simpletext" style="text-align: left"> Конкретно в этом таске в извлечённых данных будут картинки, а на одной из них - флаг-ответ.</p>
|
|
||||||
<span class="close-btn usable-context" onclick="hidePopup()">скрыть</span>
|
|
||||||
</div>
|
|
||||||
<div class="container">
|
|
||||||
<div class="small capsule-window info1">
|
|
||||||
<p class="simpletext">Блин, мой очень-очень важный доклад <abbr class="hltext" title="Смотри подсказку(кнопка снизу слева)">(Доклад.docx)</abbr> повредился или что-то типо того... Поможешь мне найти флаг в том, что осталось от моей работы?</p>
|
|
||||||
<a href="{{ url_for('static', filename='Доклад.docx') }}" class="simpletext header">Доклад.docx</a>
|
|
||||||
</div>
|
|
||||||
<div class="flag-input">
|
|
||||||
<h3 class="header" style="text-align:left">Введите ответ:</h3>
|
|
||||||
<form action="/forensic/.docx_files" 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 %}
|
|
@ -1,31 +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">
|
|
||||||
<p class="simpletext">Друг скинул мне картинку и ведёт себя как-то странно.. Постоянно говорит какими-то загадками( Помоги мне посмотреть, что не так с изображением. Может что-то есть <abbr class="hltext" title="Смотри подсказку(кнопка снизу слева)">внутри</abbr>?</p>
|
|
||||||
<img style="heigth: auto; width: 23rem" src="{{ url_for('static', filename='imgs/hextask.jpg') }}">
|
|
||||||
</div>
|
|
||||||
<div class="flag-input">
|
|
||||||
<h3 class="header" style="text-align:left">Введите ответ:</h3>
|
|
||||||
<form action="/forensic/hex" 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