קוד השרת שנרצה לפרוץ:
import hashlib
import secrets
from flask import Flask, request, jsonify
import urllib.parse
app = Flask(__name__)
SECRET = secrets.token_hex(4).encode('latin-1')
@app.route("/")
def hello():
parts = request.query_string.split(b'&')
for p in parts:
name, val = p.split(b'=')
if name == b'data':
data = urllib.parse.unquote_to_bytes(val)
elif name == b'sig':
sig = val
expected_sig = hashlib.md5(SECRET + data).hexdigest().encode('latin-1')
if expected_sig == sig:
p = {w.split(b'=')[0]: w.split(b'=')[1] for w in data.split(b'&')}
if int(p[b'uid']) == 1:
return "Welcome Master. The secret key is: {}\n".format(SECRET)
else:
return "Welcome User\n"
print('expected sig = {}'.format(expected_sig))
print('got sig = {}'.format(sig))
print('got data = {}'.format(data))
return "INTRUDER ALERT\n"
@app.route("/tip")
def tip():
data = b'uid=0'
return jsonify({
'data': data,
'sig': hashlib.md5(SECRET + data).hexdigest(),
})
if __name__ == '__main__':
app.run()
כדי להריץ יש לשמור את הקוד לקובץ בשם server.py, להתקין flask באמצעות:
pip install flask
ואז להריץ משורת הפקודה:
python server.py
המשימה שלכם: לגלות מהו המפתח הסודי של השרת.
ניתן ורצוי להיעזר במאמר כאן:
https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks