278 lines
13 KiB
Python
Raw Normal View History

2025-02-02 20:43:16 +03:00
import werkzeug
2025-04-10 00:23:44 +03:00
from flask import Flask, render_template, request, url_for, session, redirect, g, abort, send_file, render_template_string
2025-01-25 22:18:21 +03:00
import sqlite3
2025-02-03 00:19:41 +03:00
from random import getrandbits
2025-02-14 13:19:23 +03:00
from func import *
import base64
2025-04-12 17:18:03 +03:00
#Вот сюда тебе и надо, начинающий мастер OSINT'а! Только не смотри другие флаги: кто посмотрит, тот ***** :>
2025-01-25 22:18:21 +03:00
2025-04-10 00:23:44 +03:00
2025-01-26 22:34:47 +03:00
connection = sqlite3.connect('database.db')
2025-01-25 22:18:21 +03:00
cursor = connection.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS Users (
id INTEGER PRIMARY KEY,
login TEXT NOT NULL,
password TEXT NOT NULL
)
''')
cursor.execute('SELECT * FROM Users where login = "admin"')
2025-01-26 22:34:47 +03:00
if not cursor.fetchone():
2025-01-25 22:18:21 +03:00
cursor.execute('INSERT INTO Users (login, password) VALUES (?, ?)', ('admin', '12345678'))
connection.commit()
2025-01-23 00:19:58 +03:00
app = Flask(__name__)
2025-01-25 22:18:21 +03:00
app.config['SECRET_KEY'] = 'ca4ac4ada05f91a5790d2132992bfaed86df15c4d08f2dfe'
2025-01-26 22:34:47 +03:00
DATABASE = 'database.db'
2025-04-12 17:18:03 +03:00
@app.route("/osint/found_me", methods=('GET', 'POST'))
def osintfound():
Y0u_Fin4ly_F0und_7his = 'C4TchFl4g{Pls_supp0rt_my_pr0j3ct}'
if request.method == 'POST':
user_flag = request.form['user_flag']
if user_flag == Y0u_Fin4ly_F0und_7his:
return render_template('found-me.html', flag=Y0u_Fin4ly_F0und_7his, success_flag='.')
return render_template('found-me.html', flag=Y0u_Fin4ly_F0und_7his, error='Ошибка: неверный флаг!')
return render_template('found-me.html')
2025-01-26 22:34:47 +03:00
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
return db
@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, '_database', None)
if db:
db.close()
2025-01-23 00:19:58 +03:00
@app.route("/")
def index():
return render_template('index.html')
2025-04-05 22:42:20 +03:00
@app.route("/web")
def web():
return render_template('web-main.html')
@app.route("/forensic")
def forensic():
return render_template('forensic-main.html')
@app.route("/osint")
def osint():
return render_template('osint-main.html')
2025-04-06 21:37:12 +03:00
@app.route("/web/sql-injection", methods=('GET', 'POST'))
2025-04-07 12:23:56 +03:00
def websql():
2025-01-25 22:18:21 +03:00
if request.method == 'POST':
login = request.form['login']
password = request.form['pass']
2025-01-26 22:34:47 +03:00
cursor = get_db().cursor()
2025-01-26 22:50:50 +03:00
cursor.execute(f'SELECT * FROM Users WHERE login == "{login}" AND password == "{password}"')
2025-01-26 22:34:47 +03:00
user = cursor.fetchone()
if not user:
2025-01-27 00:20:55 +03:00
return render_template('sql-injection.html', error='Ошибка: неверный логин или пароль')
2025-02-03 00:19:41 +03:00
session['sql_flag'] = f'C4TchFl4g{{{hex(getrandbits(45))[2:]}}}'
2025-02-02 20:43:16 +03:00
return redirect(url_for('success_login'), code=302)
2025-01-23 00:19:58 +03:00
return render_template('sql-injection.html')
2025-04-17 00:12:02 +03:00
@app.route("/web/success_login-sqltask", methods=('GET', 'POST'))
def success_login():
flag = session.get('sql_flag')
if request.method == 'POST':
user_flag = request.form['user_flag']
if user_flag == flag:
return render_template('success-sql.html', flag=flag, success_flag='.')
return render_template('success-sql.html', flag=flag, error='Ошибка: неверный флаг!')
if flag:
return render_template('success-sql.html', flag=flag)
abort(404)
idor_main_users = {}
@app.route("/web/idor", methods=('GET', 'POST'))
2025-04-07 12:23:56 +03:00
def webidor():
2025-04-17 00:12:02 +03:00
if request.method == 'POST':
if 'user_flag' in request.form.keys():
flag = session.get('idor_flag')
user_flag = request.form['user_flag']
if user_flag == flag and 'idor_id' in session.keys() and session['idor_id'] in idor_main_users.keys():
del idor_main_users[session['idor_id']]
return render_template('idor.html', flag=flag, success_flag='.')
return render_template('idor.html', flag=flag, error='Ошибка: неверный флаг!')
login = request.form['login']
mail = request.form['mail']
password = request.form['pass']
if not login:
return render_template('idor.html', error='Ошибка: не оставляйте себя без имени!')
if not password:
return render_template('idor.html', error='Ошибка: Пароль важен, заполните поле!')
session['idor_flag'] = f'C4TchFl4g{{{hex(getrandbits(45))[2:]}}}'
2025-04-17 16:11:32 +03:00
session['idor_id'] = id = getrandbits(8) + 16
2025-04-17 00:12:02 +03:00
idor_main_users[id] = {'login': login,'mail': mail}
return redirect(url_for('webidor_user', id=session['idor_id']), code=302)
2025-04-07 12:23:56 +03:00
return render_template('idor.html')
2025-04-17 00:12:02 +03:00
@app.route("/web/idor/user_id<int:id>", methods=('GET', 'POST'))
def webidor_user(id):
if 'idor_id' not in session.keys():
abort(404)
2025-04-17 18:11:43 +03:00
if id <= 15:
2025-04-17 16:11:32 +03:00
idor_users = {0: ('admin', 'superadmin@codrs.ru', 'Самый крутой админ EVER!!! Не согласен - не прав!'), 1: ('Y0ur_m0m', 'l0ser@codrs.ru', 'Ха-ха! Тупой юзер, ******, **** и *****'), 2: ('meg4_c4t', 'meowmeow@codrs.ru', 'Мяу-мяу, мяу-мяу... мяу-мяу, мяу-мяу'), 3: ('Pepeg4', 'pepeg@codrs.ru', 'Pepe love you too'), 4: ('ChestWithCat', 'chast@codrs.ru', 'Сундук из майнкрафта. На сундуке кот. Есть рыба, кота приручить?'), 5: ('legacy_user', 'legacy@coders-squad.com', 'А вот прошлый домен был лучше! Продались российским корпорациям!!!!!'), 6: ('m&ms', 'm&ms_lover@codrs.ru', 'Ставлю лайки за покупку m&ms, писать в ТГ'), 7: ('am0ng US', 'US_agent@gmail.com','Russishe Sweine!'), 8: ('anime_girl', 'megumin@codrs.ru', ''), 9: (session['idor_flag'], 'supercat@codrs.ru', 'О, смотри! Там флаг!!! Ты нашёл:3'), 10: ('b0ss_0f_this-GYM', 'b0ss@codrs.ru', 'И что же ты хотел увидеть в описании у Босса качалки?'), 11: ('CS2_Destroyer', 'player777@codrs.ru', 'Погнали в Напы выскочим, размотаем всех. Не играешь? Я в соло вытащу, а ты посмотришь'), 12: ('VerySweetBread', 'sweetbread@codrs.ru'), 13: ('pupok', 'pup_zemli@codrs.ru', 'Whait.. WHAT?!'), 14: ('secret_KGB_agent', 'b0rn_in_US4@codrs.su', 'Союз нерушимый республик свободных!'), 15: ('nikitata', '1ida_1over@codrs.ru', 'Раст победа?')}
2025-04-17 00:12:02 +03:00
return render_template('idor_user.html', user=idor_users[id])
if id not in idor_main_users.keys():
abort(404)
return render_template('idor-main-user.html', login=idor_main_users[id]['login'], mail=idor_main_users[id]['mail'])
@app.route("/web/path-traversal", methods=('GET', 'POST'))
2025-04-07 12:23:56 +03:00
def webpt():
flag_task3 = 'С4Tch_Fl4g{Y0u_Find_4_littl3_kitty}'
if request.method == 'POST':
user_flag = request.form['user_flag']
if user_flag == flag_task3:
return render_template('path-traversal.html', flag=flag_task3, success_flag='.')
return render_template('path-traversal.html', flag=flag_task3, error='Ошибка: неверный флаг!')
filename = request.args.get("file")
if not filename:
return render_template('path-traversal.html')
try:
return send_file(filename)
except FileNotFoundError:
abort(404)
2025-04-07 12:23:56 +03:00
2025-04-10 00:23:44 +03:00
@app.route("/web/ssti", methods=('GET', 'POST'))
2025-04-07 12:23:56 +03:00
def webssti():
2025-04-10 00:23:44 +03:00
id = session.get('ssti_id')
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 = {}
2025-04-07 12:23:56 +03:00
@app.route("/web/portswigger-guide")
def webpsguide():
return render_template('portswigger-guide.html')
2025-04-08 14:43:15 +03:00
@app.route("/forensic/metadata", methods=('GET', 'POST'))
2025-04-07 12:48:42 +03:00
def fmetadata():
flag_task1 = session.get('flag_task1')
2025-04-03 22:23:02 +03:00
if request.method == 'POST':
user_flag = request.form['user_flag']
if user_flag == flag_task1:
2025-04-05 22:42:20 +03:00
return render_template('task1-metadata.html', flag=flag_task1, success_flag='.')
return render_template('task1-metadata.html', flag=flag_task1, error='Ошибка: неверный флаг!')
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)
2025-01-23 00:19:58 +03:00
2025-04-07 23:38:07 +03:00
@app.route("/forensic/getimg")
2025-02-14 13:19:23 +03:00
def forensic_task1():
if 'task1_id' not in session.keys():
abort(404)
2025-02-14 13:19:23 +03:00
return send_file(f'/tmp/task1/{session['task1_id']}.jpg')
@app.route("/forensic/base-guide", methods=('GET', 'POST'))
2025-04-07 12:48:42 +03:00
def fbase():
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]
2025-04-09 21:43:43 +03:00
base64str = str(base64.b64encode(f"Ой-ой, похоже, что самое главное всё ещё зашифровано.. Сможешь расшифровать, ОП? {base32str}".encode()))[2:-1]
return render_template('base.html', base_task=base64str)
2025-04-07 12:48:42 +03:00
@app.route("/forensic/.docx_files", methods=('GET', 'POST'))
2025-04-07 12:48:42 +03:00
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='Ошибка: неверный флаг!')
2025-04-07 12:48:42 +03:00
return render_template('binwalk.html')
@app.route("/forensic/hex", methods=('GET', 'POST'))
2025-04-07 12:48:42 +03:00
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')
2025-04-07 12:48:42 +03:00
@app.route("/forensic/hash", methods=('GET', 'POST'))
2025-04-07 12:48:42 +03:00
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='Ошибка: неверный флаг!')
2025-04-07 12:48:42 +03:00
return render_template('hash.html')
2025-04-12 17:18:03 +03:00
2025-04-07 12:48:42 +03:00
2025-04-14 12:37:39 +03:00
@app.route("/osint/mapmaster", methods=('GET', 'POST'))
2025-04-07 12:48:42 +03:00
def osintgeoguessr():
2025-04-14 12:37:39 +03:00
flag_task6 = "C4TchFl4g{1905}"
if request.method == 'POST':
user_flag = request.form['user_flag']
if user_flag == flag_task6:
return render_template('mapmaster.html', flag=flag_task6, success_flag='.')
return render_template('mapmaster.html', flag=flag_task6, error='Ошибка: неверный флаг!')
return render_template('mapmaster.html')
2025-04-07 12:48:42 +03:00
2025-04-15 20:46:28 +03:00
@app.route("/osint/really_hard_task", methods=('GET', 'POST'))
2025-04-07 12:48:42 +03:00
def osintrht():
2025-04-17 18:11:43 +03:00
flag_task7 = "C4Tch_Fl4g{13ts_p14y_min3cr4ft_t0g3th3r}"
2025-04-15 16:48:54 +03:00
if request.method == 'POST':
user_flag = request.form['user_flag']
if user_flag == flag_task7:
return render_template('osint-hardtask.html', flag=flag_task7, success_flag='.')
return render_template('osint-hardtask.html', flag=flag_task7, error='Ошибка: неверный флаг!')
2025-04-07 12:48:42 +03:00
return render_template('osint-hardtask.html')
2025-04-17 00:12:02 +03:00
2025-01-25 22:18:21 +03:00
2025-04-12 16:01:41 +03:00
@app.errorhandler(werkzeug.exceptions.HTTPException)
def error_handler(e):
return f'<img src="https://http.cat/{e.code}.jpg">', e.code
2025-01-24 21:21:41 +03:00
2025-01-30 20:55:31 +03:00
app.run(host="0.0.0.0", debug=False)
2025-01-26 22:50:50 +03:00
connection.close()