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 16:11:32 +03:00
if id <= 16 :
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-15 20:46:28 +03:00
flag_task7 = "C4TchFl4g {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 ()