URL-injektio - URL-injektio + Epäturvalliset tietoturvakontrollit
Keskitaso
Syvennä osaamistasi ja yritä ohittaa sovellukseen sisäänrakennettu turvamekanismi. Tämän jälkeen voit suorittaa klassisen URL-injektio hyökkäyksen ja ratkaista labran. Kyseinen labra perustuu oikean elämän sovellukseen, jossa kehittäjät käyttivät samanlaisia suojamekanismeja, tietämättä näiden olevan täysin murrettavissa.
Lue blogi täältä, jos jäät jumiin!
Sovelluksen lähdekoodit löytyvät alla.
import os
import hmac
import flask
import requests
from urllib.parse import urlparse
from flask import Flask, render_template, request, flash, abort, jsonify
from modules import database
from modules import variables
app = Flask(__name__)
db = database.Database()
@app.route("/internal-api/v1/reseptit", methods=['GET'])
def recipes_api():
ip_address = flask.request.remote_addr
if ip_address not in ('127.0.0.1', '::1', 'localhost'):
abort(404)
return jsonify({
'reseptit': [
{
'Salainen resepti': [
'Sokeria',
'Jauhoja',
'Hakatemia lippu %s' % os.environ['FLAG']
]
}
]
})
@app.route("/api/user/<user_mail>")
def user_api(user_mail):
ip_address = flask.request.remote_addr
if ip_address not in ('127.0.0.1', '::1', 'localhost'):
abort(404)
user_mail = request.view_args["user_mail"]
ret_user = db.get_user(user_mail)
if ret_user != None:
return jsonify({ 'Sposti vapaa': 'False' })
else:
return jsonify({ 'Sposti vapaa': 'True' })
@app.route("/varmista", methods=['POST'])
def varmista():
sposti = request.form.get("sposti")
allekirjoitus = request.headers.get('X-Signature')
if laskeAllekirjoitusJaVertaa(sposti, allekirjoitus):
resp = requests.get("http://127.0.0.1:5000/api/user/"+sposti)
return jsonify(resp.json())
else:
return jsonify({'Allekirjoitus':'Virheellinen'})
@app.route("/", methods=['GET'])
def index():
return render_template("index.html")
# Apufunktio joka laskee ja vertaa allekirjoituksen annettuun arvoon
def laskeAllekirjoitusJaVertaa(sposti, allekirjoitus):
try:
key = variables.secret
hmac_value = hmac.new(key=key.encode(), msg=sposti.encode(), digestmod="sha256")
calculated_signature = hmac_value.digest().hex()
if calculated_signature == allekirjoitus:
return True
return False
except Exception as e:
print(e)
return False
if __name__ == '__main__':
app.run(debug=False, host='0.0.0.0', port=5000)
Pysy menossa mukana!
Tilaa Hakatemian uutiskirje niin saat hyödyllistä tietoa eettisestä hakkeroinnista, kyberturvallisuudesta ja Hakatemiasta. Voit perua tilauksen koska tahansa. Tietojasi käsitellään Hakatemian tietosuojaselosteen mukaisesti.