Compare commits
10
Commits
mobile
..
0302e4b964
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0302e4b964 | ||
|
|
649c621345 | ||
|
|
50946c114b | ||
|
|
16adc1d99e | ||
|
|
de78c5f8a0 | ||
|
|
d271d2ce4d | ||
|
|
e4c34ce8bd | ||
|
|
1ce1b57b4b | ||
|
|
4c349249eb | ||
|
|
b32579b957 |
No files matched your search
@@ -3,6 +3,7 @@ from flask import Flask, render_template, request, url_for, session, redirect, g
|
||||
import sqlite3
|
||||
from random import getrandbits
|
||||
from func import *
|
||||
import base64
|
||||
|
||||
connection = sqlite3.connect('database.db')
|
||||
cursor = connection.cursor()
|
||||
@@ -80,39 +81,70 @@ def webssti():
|
||||
def webpsguide():
|
||||
return render_template('portswigger-guide.html')
|
||||
|
||||
@app.route("/forensic/metadata")
|
||||
@app.route("/forensic/metadata", methods=('GET', 'POST'))
|
||||
def fmetadata():
|
||||
session['task1_id'] = id = hex(getrandbits(45))[2:]
|
||||
session['task1_flag'] = flag_task1 = f'C4TchFl4g{{{hex(getrandbits(45))[2:]}}}'
|
||||
task1_flag(flag_task1, id)
|
||||
flag_task1 = session.get('flag_task1')
|
||||
if request.method == 'POST':
|
||||
user_flag = request.form['user_flag']
|
||||
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, error='Ошибка: неверный флаг!')
|
||||
if flag_task1:
|
||||
return render_template('task1-metadata.html', flag=flag_task1)
|
||||
abort(404)
|
||||
return render_template('task1-metadata.html')
|
||||
|
||||
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)
|
||||
|
||||
@app.route("/forensic/getimg")
|
||||
def forensic_task1():
|
||||
if 'task1_id' not in session.keys():
|
||||
abort(404)
|
||||
return send_file(f'/tmp/task1/{session['task1_id']}.jpg')
|
||||
|
||||
@app.route("/forensic/base-guide")
|
||||
@app.route("/forensic/base-guide", methods=('GET', 'POST'))
|
||||
def fbase():
|
||||
return render_template('base.html')
|
||||
flag_task4 = session.get('flag_task4')
|
||||
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_task4'] = 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():
|
||||
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')
|
||||
|
||||
@app.route("/forensic/hex")
|
||||
@app.route("/forensic/hex", methods=('GET', 'POST'))
|
||||
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')
|
||||
|
||||
@app.route("/forensic/hash")
|
||||
@app.route("/forensic/hash", methods=('GET', 'POST'))
|
||||
def fhash():
|
||||
flag_task5 = "C4TchFl4g{superadmin}"
|
||||
if request.method == 'POST':
|
||||
user_flag = request.form['user_flag']
|
||||
if user_flag == flag_task5:
|
||||
return render_template('hash.html', flag=flag_task5, success_flag='.')
|
||||
return render_template('hash.html', flag=flag_task5, error='Ошибка: неверный флаг!')
|
||||
return render_template('hash.html')
|
||||
|
||||
@app.route("/osint/questions")
|
||||
|
||||
@@ -2,6 +2,8 @@ import os
|
||||
|
||||
def task1_flag(flag_task1, id):
|
||||
os.system('exiftool -all= static/imgs/task1.jpg')
|
||||
os.system('mkdir /tmp/task1')
|
||||
if not os.path.exists('/tmp/task1'):
|
||||
os.mkdir('/tmp/task1')
|
||||
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")
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
{ pkgs ? import <nixpkgs> {} }:
|
||||
with pkgs; mkShell rec {
|
||||
buildInputs = [
|
||||
(python3.withPackages (ps: with ps; [
|
||||
flask
|
||||
flask_assets
|
||||
libsass
|
||||
setuptools
|
||||
]))
|
||||
];
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 67 KiB |
+5
-9
@@ -297,10 +297,10 @@
|
||||
|
||||
.headerblock {
|
||||
width: clamp(60rem, 65% , 140rem);
|
||||
height: 10rem;
|
||||
height: clamp(10rem, 20%, 10rem);
|
||||
padding: 1rem;
|
||||
margin-left: 0;
|
||||
border-color: black;
|
||||
margin-left: 0rem;
|
||||
border-color: #000000;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
box-shadow: 1em 1em 0em 0px rgba(186, 65, 166, 0.7);
|
||||
@@ -311,6 +311,7 @@
|
||||
flex-direction: column;
|
||||
background-color: rgb(0 0 0 / 85%);
|
||||
box-sizing: border-box;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.headerblock:hover {
|
||||
@@ -518,14 +519,9 @@
|
||||
body {
|
||||
background-image: url(/static/imgs/bg.gif);
|
||||
width: 100vw;
|
||||
height: calc(100dvh - 2rem);
|
||||
height: 100vh;
|
||||
margin: 0;
|
||||
background-size: cover;
|
||||
padding-top: 2rem;
|
||||
}
|
||||
|
||||
body > .container {
|
||||
height: calc(100% - 12rem);
|
||||
}
|
||||
|
||||
a {
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
user1:$5$$a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3:19429:0:::::
|
||||
user2:$5$$b3a8e0e1f9ab1bfe3a36f231f676f78bb30a519d2b21e6c530c0eee8ebb4a5d0:19469:0:::::
|
||||
herobrine:$5$$35a9e381b1a27567549b5f8a6f783c167ebf809f1c4d6a9e367240484d8ce281:19523:0:::::
|
||||
nobody:*:19429:0:::::
|
||||
root:$5$$186cf774c97b60a1c106ef718d10970a6a06e06bef89553d9ae65d938a886eae:19111:0:::::
|
||||
superman:$5$$73cd1b16c4fb83061ad18a0b29b9643a68d4640075a466dc9e51682f84a847f5:19999:0:::::
|
||||
cat:$5$$77af778b51abd4a3c51c5ddd97204a9c3ae614ebccb75a606c3b6865aed6744e:19765:0:::::
|
||||
bin:*:19111:0:9999:7:::
|
||||
sys:*:19111:0:99999:7:::
|
||||
_kali:$5$$fc5669b52ce4e283ad1d5d182de88ff9faec6672bace84ac2ce4c083f54fe2bc:19111:0:::::
|
||||
Binary file not shown.
@@ -0,0 +1,33 @@
|
||||
{% 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">На просторах небезызвестной ветки /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 %}
|
||||
@@ -0,0 +1,40 @@
|
||||
{% 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" style="height: auto">
|
||||
<p class="simpletext">Блин, мой очень-очень важный доклад <abbr class="hltext" title="Смотри подсказку(кнопка снизу слева)">(Доклад.docx)</abbr> повредился или что-то типо того... Поможешь мне найти флаг в том, что осталось от моей работы?</p>
|
||||
<a href="{{ url_for('static', filename='Доклад.docx') }}" class="simpletext header" style="font-size: 1.6rem">Доклад.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 %}
|
||||
@@ -0,0 +1,31 @@
|
||||
{% 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">На своей рабочей машине я смог достать этот <abbr class="hltext" title="Смотри подсказку(кнопка снизу слева)">файл</abbr>.. Я где-то слышал, что в нём есть то, что поможет мне стать админом - пароль или что-то вроде.. но Вместо пароля там написан какой-то бред!</p>
|
||||
<a href="{{ url_for('static', filename='shadow') }}" class="simpletext header" style="font-size: 1.6rem">Shadow</a>
|
||||
</div>
|
||||
<div class="flag-input">
|
||||
<h3 class="header" style="text-align:left">Введите ответ:</h3>
|
||||
<form action="/forensic/hash" 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 %}
|
||||
@@ -0,0 +1,31 @@
|
||||
{% 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">Друг скинул мне картинку и ведёт себя как-то странно.. Постоянно говорит какими-то загадками( Помоги мне посмотреть, что не так с изображением. Может что-то есть <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 %}
|
||||
@@ -26,7 +26,7 @@
|
||||
<div class="task-done">
|
||||
<h1 class="header">Вы прошли задание!</h1>
|
||||
<img class="done" src="{{ url_for('static', filename='imgs/done_icon.png') }}">
|
||||
<a href="{{ url_for('index') }}" class="usable-context" style="text-align: canter; margin: 1rem; padding: 1rem;"> < НА ГЛАВНУЮ > </a>
|
||||
<a href="{{ url_for('web') }}" class="usable-context" style="text-align: canter; margin: 1rem; padding: 1rem;"> < Вернуться к заданиям > </a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div id="success"> <p>Вход произведён успешно!</p> </div>
|
||||
|
||||
@@ -1,22 +1,43 @@
|
||||
{% 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://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/index.html?highlight=metadata#metadata" class="hltext">Метаданные (Metadata)</a> - данные несущие информацию о других данных, например о каком-либо файле<br />
|
||||
<p class="simpletext" style="text-align: left"> Что там может быть? Примерно всё, что угодно, но обычно там пишется техническая информация о файле или методе, которым он был получен: дата последнего изменения, разрешение или размер, у фотографий можно найти модель камер и тд. Также метаданные можно перезаписывать или добавлять туда новые свойства. Для этого есть много утилит, однако в Kali базово предустановлена <a href="https://kali.tools/?p=5984" class="hltext">Exiftool</a>.<br />
|
||||
<p class="simpletext" style="text-align: left"> Посмотреть метаданные картинки, используя exiftool, можно следующим образом:<span class="context" style="font-size: 0.9rem">(пример команды ниже)</span></p>
|
||||
<pre><code class="codefont bash">exiftool [файл]</code></pre>
|
||||
<p class="simpletext" style="text-align: left">В консоли появятся метаданные, где, в нашем случае, будет спрятан флаг</p>
|
||||
<p class="simpletext" style="text-align: left">Если хочется внести что-то твоё в метаданные файла или перезаписать их, то можно использовать следующую команду:
|
||||
<pre><code class="codefont bash">exiftool -[Название тега, который будет изменён]='что-нибудь, что хочется оставить в метаданных' [файл]</code></pre><br />
|
||||
<span class="context" style="font-size: 0.9rem">(пример)</span>
|
||||
<pre><code class="codefont bash">exiftool -Comment='Я люблю котиков' cat_img.png</code></pre>
|
||||
<p class="simpletext" style="text-align: left">Если же возможности использовать Exiftool нет, то можно использовать on-line версии или другие утилиты</p>
|
||||
<span class="close-btn usable-context" onclick="hidePopup()">скрыть</span>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="capsule-window info1">
|
||||
<p class="simpletext">Перед тобой картинка. Проверь её метаданные, вдруг там что-то есть</p>
|
||||
<img src="{{ url_for('forensic_task1') }}">
|
||||
<div class="small capsule-window info1" style="height: auto">
|
||||
<p class="simpletext">Перед тобой очень забавная картинка. Попробуй проверить её <abbr class="hltext" title="Смотри подсказку(кнопка снизу слева)">метаданные</abbr>, вдруг там что-то есть</p>
|
||||
<img style="heigth: auto; width: 30rem" src="{{ url_for('forensic_task1') }}">
|
||||
</div>
|
||||
<div class="flag-input ">
|
||||
<div class="flag-input">
|
||||
<h3 class="header" style="text-align:left">Введите ответ:</h3>
|
||||
<form action="success_login" method="post" class="simpletext">
|
||||
<form action="/forensic/metadata" 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 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 />
|
||||
|
||||
<span class="close-btn usable-context" onclick="hidePopup()">скрыть</span>
|
||||
</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 %}
|
||||
@@ -2,7 +2,6 @@
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
|
||||
<script src="{{ url_for('static', filename='scripts/animation.js') }}"></script>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
{%- if request.path != url_for('index') %}
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/base16/ros-pine-moon.min.css">
|
||||
|
||||
Reference in new issue
Block a user