secret-table-2 - AlpacaHack

TL;DR

ソースから

ログイン処理の SQL は以下のように組み立てられている。

query = f"SELECT * FROM users WHERE username='{username}' AND password='{password}';"

入力をそのまま埋め込んでいるので、usernamepassword に SQL を仕込めばなんでもできる。あとは画面側が fetchone() を使って、1行目・1カラム目を Hello, {user[0]}! の形で返してくる前提で組み立てればよい。

細かく

1. スキーマを引き抜く(テーブル名・カラム名の特定)

フラグが入っているテーブル名・カラム名はハッシュ化されていてソースからは見えないので、まず SQLite のシステムテーブル sqlite_master から CREATE TABLE 文を引っ張ってくる。

ここで気をつけるのは以下。

Payload (password に入れる)