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 *
2025-04-08 23:00:54 +03:00
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-16 19:33:47 +03:00
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 ' ] )
2025-04-16 19:33:47 +03:00
@app.route ( " /web/path-traversal " , methods = ( ' GET ' , ' POST ' ) )
2025-04-07 12:23:56 +03:00
def webpt ( ) :
2025-04-16 19:33:47 +03:00
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 ( ) :
2025-04-09 16:16:22 +03:00
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 = ' Ошибка: неверный флаг! ' )
2025-04-08 20:22:57 +03:00
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 ( ) :
2025-04-09 16:16:22 +03:00
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 ' )
2025-04-08 23:00:54 +03:00
@app.route ( " /forensic/base-guide " , methods = ( ' GET ' , ' POST ' ) )
2025-04-07 12:48:42 +03:00
def fbase ( ) :
2025-04-09 16:16:22 +03:00
flag_task4 = session . get ( ' flag_task4 ' )
2025-04-08 23:00:54 +03:00
if request . method == ' POST ' :
user_flag = request . form [ ' user_flag ' ]
2025-04-08 23:34:36 +03:00
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 :
2025-04-09 16:16:22 +03:00
session [ ' flag_task4 ' ] = flag_task4 = f ' C4TchFl4g {{ { hex ( getrandbits ( 45 ) ) [ 2 : ] } }} '
2025-04-08 23:34:36 +03:00
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 ]
2025-04-08 23:00:54 +03:00
return render_template ( ' base.html ' , base_task = base64str )
2025-04-07 12:48:42 +03:00
2025-04-08 21:18:10 +03:00
@app.route ( " /forensic/.docx_files " , methods = ( ' GET ' , ' POST ' ) )
2025-04-07 12:48:42 +03:00
def fbinwalk ( ) :
2025-04-08 23:34:36 +03:00
flag_task3 = ' C4TchFl4g {GT4_6_1eaks} '
2025-04-08 21:18:10 +03:00
if request . method == ' POST ' :
user_flag = request . form [ ' user_flag ' ]
2025-04-08 23:34:36 +03:00
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 ' )
2025-04-08 23:34:36 +03:00
@app.route ( " /forensic/hex " , methods = ( ' GET ' , ' POST ' ) )
2025-04-07 12:48:42 +03:00
def fhex ( ) :
2025-04-08 23:34:36 +03:00
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
2025-04-09 16:16:22 +03:00
@app.route ( " /forensic/hash " , methods = ( ' GET ' , ' POST ' ) )
2025-04-07 12:48:42 +03:00
def fhash ( ) :
2025-04-09 16:16:22 +03:00
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 ( )