From 10ae797fa5b02d440ae2aae45cc40b60ea383ecc Mon Sep 17 00:00:00 2001 From: John Hammond Date: Wed, 17 Aug 2016 10:58:30 -0400 Subject: [PATCH] Added a login template and put together a base for the server code. --- README.md | 11 +- ctf_skeleton/server_base.py | 287 ++++++++++++++++++++++++++++ server_base.py | 287 ++++++++++++++++++++++++++++ setup.sh | 0 static/css/master.css | 109 +++++++++++ static/fonts/Share Tech.ttf | Bin 0 -> 29536 bytes static/fonts/big_noodle_titling.ttf | Bin 0 -> 26828 bytes static/fonts/bignoodle_titling.zip | Bin 0 -> 32911 bytes static/login.html | 30 +++ 9 files changed, 723 insertions(+), 1 deletion(-) create mode 100644 ctf_skeleton/server_base.py create mode 100644 server_base.py mode change 100644 => 100755 setup.sh create mode 100644 static/css/master.css create mode 100644 static/fonts/Share Tech.ttf create mode 100644 static/fonts/big_noodle_titling.ttf create mode 100644 static/fonts/bignoodle_titling.zip create mode 100644 static/login.html diff --git a/README.md b/README.md index 747c07a..e50af04 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,10 @@ File & Directory Information This directory holds some code from a recent CTF platform I tried to build on my own. I am using elements from it, so I just snagged to code to be able to cherry-pick off of it and change what I need to get this project rolling. __Do not consider it a part of this project; it is _not_. It is just included as a convenience for me while the BearShop project is still be developed.__ +* [`static/`](static/) + + This folder is required by [Flask] and it is where all "static" files live, like things for [CSS] or images or fonts or [HTML] templates. + * [`schema.sql`](schema.sql) This is the [SQL] schema file that is used to create the database for the webpage. It should create and define tables for things like users, the products on sale, and anything else that may be deemed necessary. @@ -25,10 +29,15 @@ File & Directory Information This is the [`bash`][bash] script that I planned on using to initially create the server. It sets up the database, creates private keys to be used, and modifies a "base" rendition of the server [Python] script to add all of the configuration variables that can be set _in the_ [`setup.sh`](setup.sh) script. +* [`server_base.py`](server_base.py) + + This is actual source code of the web application. __! Remember, it is _not_ what you will actually run to deploy the server; the [`setup.sh`](setup.sh) script will take it and configure it, to create a new, functional `server.py` which is what you will run when you deploy.__ [Python]: https://www.python.org/ [Flask]: http://flask.pocoo.org/ [SQL]: https://en.wikipedia.org/wiki/SQL -[bash]: https://en.wikipedia.org/wiki/Bash_(Unix_shell) \ No newline at end of file +[bash]: https://en.wikipedia.org/wiki/Bash_(Unix_shell) +[CSS]: https://www.w3.org/Style/CSS/Overview.en.html +[HTML]: https://en.wikipedia.org/wiki/HTML \ No newline at end of file diff --git a/ctf_skeleton/server_base.py b/ctf_skeleton/server_base.py new file mode 100644 index 0000000..da05d28 --- /dev/null +++ b/ctf_skeleton/server_base.py @@ -0,0 +1,287 @@ +#!/usr/bin/env python + +from flask import Flask +from flask import render_template, request, session, g, url_for, flash, get_flashed_messages, redirect +import sqlite3 +import json +import sys, os +from colorama import * +import sys +from threading import Thread +from time import sleep + +from uuid import uuid4 + + +from passlib.hash import sha256_crypt +from contextlib import closing + + +debug = True + +init( autoreset = True ) + +if (debug): + + def success( string ): + print Fore.GREEN + Style.BRIGHT + "[+] " + string + + def error( string ): + sys.stderr.write( Fore.RED + Style.BRIGHT + "[-] " + string + "\n" ) + + def warning( string ): + print Fore.YELLOW + "[!] " + string + +else: + def success( string ): pass + def error( string ): pass + def warning( string ): pass + +# =========================================================================== + +DATABASE = '$DATABASE' +CERTIFICATE = '$CERTIFICATE_FILE' +PRIVATE_KEY = '$PRIVATEKEY_FILE' + +SECRET_KEY = 'this_key_needs_to_be_used_for_session_variables' + +if DATABASE == '$DATABASE': + error("This server has not yet been configured with a database file!") + exit(-1) + +if CERTIFICATE == '$CERTIFICATE_FILE': + error("This server has not yet been configured with a certificate!") + exit(-1) + +if PRIVATE_KEY == '$PRIVATEKEY_FILE': + error("This server has not yet been configured with a private key!") + exit(-1) + +app = Flask( __name__ ) + +app.config.from_object(__name__) + +def init_db(): + with closing(connect_db()) as db: + with app.open_resource('schema.sql', mode='r') as f: + db.cursor().executescript(f.read()) + db.commit() + +def connect_db(): + return sqlite3.connect( app.config['DATABASE'] ) + +@app.before_request +def before_request(): + g.db = connect_db() + +@app.teardown_request +def teardown_request(exception): + db = getattr(g, 'db', None) + if db is not None: + db.close() + +# -------------------------------------------------------------------- + +@app.route("/") +def index(): + + if not ( session['logged_in'] ): + return redirect('login') + +@app.route("/login", methods=["GET", "POST"]) +def login(): + + error = "" + if request.method == "POST": + + cur = g.db.execute('select username, password from users') + # username, password_hash + users = dict(( row[0], row[1] ) for row in cur.fetchall()) + + if not request.form['username'] in users.iterkeys(): + error = 'This username is not in the database!' + else: + + if not ( sha256_crypt.verify( request.form['password'], users[request.form['username']] ) ): + error = "Incorrect password!" + else: + + session_login( request.form['username'] ) + + return redirect( "about" ) + + return render_template( 'login.html' ) + + +# @app.route("/register", methods=["GET", "POST"]) +# def register(): + +# cur = g.db.execute('select username from users') + +# usernames = [row[0] for row in cur.fetchall() ] + +# error = "" +# if request.method == "POST": + +# if unicode(request.form['username']) in usernames: +# error = 'This username is already in use!' +# elif (request.form['password'] == ""): +# error = "You must supply a password!" +# elif request.form['password'] != request.form['confirm']: +# error = 'Your passwords do not match!' +# else: + +# # I use this for command-line submission... +# identifier = str(uuid4()) + + +# cur = g.db.execute('insert into users (username, password, solved_challenges, score, last_submission, uuid) values ( ?, ?, ?, ?, ?, ? )', [ +# request.form['username'], +# sha256_crypt.encrypt( request.form['password']), +# "", # No challenges completed +# 0, # no score. +# 0, # no last submission time, +# identifier # and a completely unique idenitifier +# ] ) + +# g.db.commit() + + +# flash("Hello " + request.form['username'] + ", you have successfully registered!") +# session_login( request.form['username'] ) +# return redirect( "challenges" ) + +# return render( 'register.html', error = error ) + + +# @app.route("/scoreboard") +# def scoreboard(): + +# cur = g.db.execute('select username, score from users order by score desc, last_submission asc') +# response = cur.fetchall() + +# users = [ { "username": row[0], "score": row[1] } for row in response] + +# return render("scoreboard.html", users = users ) + +# @app.route("/logout") +# def logout(): + +# session_logout() +# return redirect("about") + +# @app.route("/") +# @app.route("/about") +# def about(): return render("about.html", app_about=configuration['app_about']) + +# @app.route("/challenges") +# def challenges_page(): + +# if not ( session['logged_in'] ): +# return render("login.html", error = "You must log in to be able to see the challenges!") +# try: +# cur = g.db.execute('select uuid from users where username =?', +# [ session['username'],] ) + +# uuid = cur.fetchone()[0] +# except Exception as e: +# print error(e.message) +# uuid = '' + +# return render("challenges.html", challenges = configuration['services'], url=request.url_root, session_value = uuid ) + +# @app.route("/check_answer", methods=["GET", "POST"]) +# def check_answer(): + +# global correct_answers + +# if request.method == "POST": +# if request.form['answer'] in session['solved_challenges']: + +# return json.dumps({'correct': -1}); + +# if ( request.form['answer'] in correct_answers.keys() ): + +# flag = request.form['answer'] + +# new_score = int(session['score']) + correct_answers[flag] +# cur = g.db.execute("update users set score = (?), last_submission = (SELECT strftime('%s')) where username = (?)", [ +# new_score, +# session['username'] +# ] ); + +# session['solved_challenges'].append( request.form['answer'] ) +# session['score'] = new_score +# g.db.commit(); + +# return json.dumps({'correct': 1, 'new_score': new_score}); +# else: +# return json.dumps({'correct': 0}); + +# @app.route("/submit", methods=[ "POST" ]) +# def submit(): + +# global correct_answers + +# if request.method == "POST": + +# if ( request.form['flag'] in correct_answers.keys() ): + +# flag = request.form['flag'] + +# cur = g.db.execute('select score, solved_challenges from users where uuid = (?)', +# [ request.form['uuid'], ]) + + +# current_score, solved_challenges = cur.fetchone() + +# solved_challenges = solved_challenges.split() + +# if ( flag in solved_challenges ): +# return 'You already submitted this flag!\n' + +# print solved_challenges + +# new_score = current_score + correct_answers[flag] +# solved_challenges.append( flag + " " ) +# cur = g.db.execute("update users set score = (?), last_submission = (SELECT strftime('%s')), solved_challenges = (?) where uuid = (?)", [ +# new_score, +# ' '.join(solved_challenges), +# request.form['uuid'] +# ] ); + +# # session['solved_challenges'].append( request.form['flag'] ) +# session['score'] = new_score +# g.db.commit(); + +# # return json.dumps({'correct': 1, 'new_score': new_score}); +# return 'Correct!\n'; +# else: +# # return json.dumps({'correct': 0}); +# return 'Incorrect!\n'; + +def session_login( username ): + + flash("You were successfully logged in!") + + # cur = g.db.execute('select solved_challenges, score from users where username = (?)', + # [username]) + + # solved_challenges, score = cur.fetchone() + + session['logged_in'] = True + # session['username'] = username + # session['score'] = score + # session['solved_challenges'] = [] + +def session_logout(): + + flash("You have been successfully logged out.") + + session['logged_in'] = False + # session.pop('username') + # session.pop('score') + +if ( __name__ == "__main__" ): + context = (CERTIFICATE, PRIVATE_KEY) + app.run( host="0.0.0.0", debug=False, ssl_context=context, port = 444 ) \ No newline at end of file diff --git a/server_base.py b/server_base.py new file mode 100644 index 0000000..da05d28 --- /dev/null +++ b/server_base.py @@ -0,0 +1,287 @@ +#!/usr/bin/env python + +from flask import Flask +from flask import render_template, request, session, g, url_for, flash, get_flashed_messages, redirect +import sqlite3 +import json +import sys, os +from colorama import * +import sys +from threading import Thread +from time import sleep + +from uuid import uuid4 + + +from passlib.hash import sha256_crypt +from contextlib import closing + + +debug = True + +init( autoreset = True ) + +if (debug): + + def success( string ): + print Fore.GREEN + Style.BRIGHT + "[+] " + string + + def error( string ): + sys.stderr.write( Fore.RED + Style.BRIGHT + "[-] " + string + "\n" ) + + def warning( string ): + print Fore.YELLOW + "[!] " + string + +else: + def success( string ): pass + def error( string ): pass + def warning( string ): pass + +# =========================================================================== + +DATABASE = '$DATABASE' +CERTIFICATE = '$CERTIFICATE_FILE' +PRIVATE_KEY = '$PRIVATEKEY_FILE' + +SECRET_KEY = 'this_key_needs_to_be_used_for_session_variables' + +if DATABASE == '$DATABASE': + error("This server has not yet been configured with a database file!") + exit(-1) + +if CERTIFICATE == '$CERTIFICATE_FILE': + error("This server has not yet been configured with a certificate!") + exit(-1) + +if PRIVATE_KEY == '$PRIVATEKEY_FILE': + error("This server has not yet been configured with a private key!") + exit(-1) + +app = Flask( __name__ ) + +app.config.from_object(__name__) + +def init_db(): + with closing(connect_db()) as db: + with app.open_resource('schema.sql', mode='r') as f: + db.cursor().executescript(f.read()) + db.commit() + +def connect_db(): + return sqlite3.connect( app.config['DATABASE'] ) + +@app.before_request +def before_request(): + g.db = connect_db() + +@app.teardown_request +def teardown_request(exception): + db = getattr(g, 'db', None) + if db is not None: + db.close() + +# -------------------------------------------------------------------- + +@app.route("/") +def index(): + + if not ( session['logged_in'] ): + return redirect('login') + +@app.route("/login", methods=["GET", "POST"]) +def login(): + + error = "" + if request.method == "POST": + + cur = g.db.execute('select username, password from users') + # username, password_hash + users = dict(( row[0], row[1] ) for row in cur.fetchall()) + + if not request.form['username'] in users.iterkeys(): + error = 'This username is not in the database!' + else: + + if not ( sha256_crypt.verify( request.form['password'], users[request.form['username']] ) ): + error = "Incorrect password!" + else: + + session_login( request.form['username'] ) + + return redirect( "about" ) + + return render_template( 'login.html' ) + + +# @app.route("/register", methods=["GET", "POST"]) +# def register(): + +# cur = g.db.execute('select username from users') + +# usernames = [row[0] for row in cur.fetchall() ] + +# error = "" +# if request.method == "POST": + +# if unicode(request.form['username']) in usernames: +# error = 'This username is already in use!' +# elif (request.form['password'] == ""): +# error = "You must supply a password!" +# elif request.form['password'] != request.form['confirm']: +# error = 'Your passwords do not match!' +# else: + +# # I use this for command-line submission... +# identifier = str(uuid4()) + + +# cur = g.db.execute('insert into users (username, password, solved_challenges, score, last_submission, uuid) values ( ?, ?, ?, ?, ?, ? )', [ +# request.form['username'], +# sha256_crypt.encrypt( request.form['password']), +# "", # No challenges completed +# 0, # no score. +# 0, # no last submission time, +# identifier # and a completely unique idenitifier +# ] ) + +# g.db.commit() + + +# flash("Hello " + request.form['username'] + ", you have successfully registered!") +# session_login( request.form['username'] ) +# return redirect( "challenges" ) + +# return render( 'register.html', error = error ) + + +# @app.route("/scoreboard") +# def scoreboard(): + +# cur = g.db.execute('select username, score from users order by score desc, last_submission asc') +# response = cur.fetchall() + +# users = [ { "username": row[0], "score": row[1] } for row in response] + +# return render("scoreboard.html", users = users ) + +# @app.route("/logout") +# def logout(): + +# session_logout() +# return redirect("about") + +# @app.route("/") +# @app.route("/about") +# def about(): return render("about.html", app_about=configuration['app_about']) + +# @app.route("/challenges") +# def challenges_page(): + +# if not ( session['logged_in'] ): +# return render("login.html", error = "You must log in to be able to see the challenges!") +# try: +# cur = g.db.execute('select uuid from users where username =?', +# [ session['username'],] ) + +# uuid = cur.fetchone()[0] +# except Exception as e: +# print error(e.message) +# uuid = '' + +# return render("challenges.html", challenges = configuration['services'], url=request.url_root, session_value = uuid ) + +# @app.route("/check_answer", methods=["GET", "POST"]) +# def check_answer(): + +# global correct_answers + +# if request.method == "POST": +# if request.form['answer'] in session['solved_challenges']: + +# return json.dumps({'correct': -1}); + +# if ( request.form['answer'] in correct_answers.keys() ): + +# flag = request.form['answer'] + +# new_score = int(session['score']) + correct_answers[flag] +# cur = g.db.execute("update users set score = (?), last_submission = (SELECT strftime('%s')) where username = (?)", [ +# new_score, +# session['username'] +# ] ); + +# session['solved_challenges'].append( request.form['answer'] ) +# session['score'] = new_score +# g.db.commit(); + +# return json.dumps({'correct': 1, 'new_score': new_score}); +# else: +# return json.dumps({'correct': 0}); + +# @app.route("/submit", methods=[ "POST" ]) +# def submit(): + +# global correct_answers + +# if request.method == "POST": + +# if ( request.form['flag'] in correct_answers.keys() ): + +# flag = request.form['flag'] + +# cur = g.db.execute('select score, solved_challenges from users where uuid = (?)', +# [ request.form['uuid'], ]) + + +# current_score, solved_challenges = cur.fetchone() + +# solved_challenges = solved_challenges.split() + +# if ( flag in solved_challenges ): +# return 'You already submitted this flag!\n' + +# print solved_challenges + +# new_score = current_score + correct_answers[flag] +# solved_challenges.append( flag + " " ) +# cur = g.db.execute("update users set score = (?), last_submission = (SELECT strftime('%s')), solved_challenges = (?) where uuid = (?)", [ +# new_score, +# ' '.join(solved_challenges), +# request.form['uuid'] +# ] ); + +# # session['solved_challenges'].append( request.form['flag'] ) +# session['score'] = new_score +# g.db.commit(); + +# # return json.dumps({'correct': 1, 'new_score': new_score}); +# return 'Correct!\n'; +# else: +# # return json.dumps({'correct': 0}); +# return 'Incorrect!\n'; + +def session_login( username ): + + flash("You were successfully logged in!") + + # cur = g.db.execute('select solved_challenges, score from users where username = (?)', + # [username]) + + # solved_challenges, score = cur.fetchone() + + session['logged_in'] = True + # session['username'] = username + # session['score'] = score + # session['solved_challenges'] = [] + +def session_logout(): + + flash("You have been successfully logged out.") + + session['logged_in'] = False + # session.pop('username') + # session.pop('score') + +if ( __name__ == "__main__" ): + context = (CERTIFICATE, PRIVATE_KEY) + app.run( host="0.0.0.0", debug=False, ssl_context=context, port = 444 ) \ No newline at end of file diff --git a/setup.sh b/setup.sh old mode 100644 new mode 100755 diff --git a/static/css/master.css b/static/css/master.css new file mode 100644 index 0000000..2920d0b --- /dev/null +++ b/static/css/master.css @@ -0,0 +1,109 @@ +html{ + height: 100%; + width: 100%; +} + + +@font-face { + font-family: 'Share Tech'; + src: url('../fonts/Share Tech.ttf'); +} + +body{ + font-family: 'Share Tech'; + + margin: 0px 0px; + padding: 0px 0px; + background-color: gray; + + /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#0043af+0,0056ce+46,ffb76b+52,ffa73d+57,ff7c00+88,ff7f04+100 */ +background: #0043af; /* Old browsers */ +background: -moz-linear-gradient(top, #0043af 0%, #0056ce 46%, #ffb76b 52%, #ffa73d 57%, #ff7c00 88%, #ff7f04 100%); /* FF3.6-15 */ +background: -webkit-linear-gradient(top, #0043af 0%,#0056ce 46%,#ffb76b 52%,#ffa73d 57%,#ff7c00 88%,#ff7f04 100%); /* Chrome10-25,Safari5.1-6 */ +background: linear-gradient(to bottom, #0043af 0%,#0056ce 46%,#ffb76b 52%,#ffa73d 57%,#ff7c00 88%,#ff7f04 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ +filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#0043af', endColorstr='#ff7f04',GradientType=0 ); /* IE6-9 */ +} + + +#login_box_background{ + max-width: 600px; + max-height: 400px; + + padding: 2%; + + position: absolute; + top:0; + bottom: 0; + left: 0; + right: 0; + + margin: auto; + background-color: white; + opacity: .1; + +} + +#login_box{ + /*font-family: 'Share Tech';*/ + /*background-color: white;*/ + color: white; + font-size: larger; + /*margin-top: 30%;*/ + border-top: 1px solid black; + border-bottom: 1px solid black; + max-width: 600px; + max-height: 400px; + + padding: 2%; + + position: absolute; + top:0; + bottom: 0; + left: 0; + right: 0; + + margin: auto; + + /*width: 100%;*/ + + /*padding: 10%;*/ +} +input{ + display: block; + margin:auto; + width: 90%; + height: 40px; + font-size: x-large; + padding: 5px; +} +h1{ + + border-bottom: 1px solid white; +} +#login{ + + text-transform: uppercase; + text-align: center; + width: 95%; + height: 60px; + background-color: red; + border: none; + display: block; + font-family: 'Share Tech'; + font-size: xx-large; + color: white; + /*vertical-align: middle;*/ + margin: 10px; +} +#register{ + text-transform: uppercase; + text-align: center; + width: 95%; + line-height: 60px; + background-color: blue; + display: block; + font-size: xx-large; + margin: 10px; + /*font-weight: bold;*/ + /*vertical-align: middle;*/ +} diff --git a/static/fonts/Share Tech.ttf b/static/fonts/Share Tech.ttf new file mode 100644 index 0000000000000000000000000000000000000000..787ba839aaf259b220c4360211ca6a71536cccdd GIT binary patch literal 29536 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 literal 0 HcmV?d00001 diff --git a/static/fonts/bignoodle_titling.zip b/static/fonts/bignoodle_titling.zip new file mode 100644 index 0000000000000000000000000000000000000000..78cd6e07e7901f702d3e7a69093d9f27d57fd1c6 GIT binary patch literal 32911 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 literal 0 HcmV?d00001 diff --git a/static/login.html b/static/login.html new file mode 100644 index 0000000..bdcf046 --- /dev/null +++ b/static/login.html @@ -0,0 +1,30 @@ + + + + + + Login -- USCGA BearShop + + + + +
+
+ +

Welcome the USCGA BearShop!

+

+ Please login below with your EDU e-mail and your BearShop password. +

+ +
+ + + +
+ + + REGISTER +
+ + + \ No newline at end of file