我正在尝试运行以下查询:
query = """SELECT id, password_hash, salt FROM users
WHERE username = '{0}' LIMIT 1""".format(username)
使用此“用户名”
' OR username IN ((SELECT
(UPDATE users SET password_hash="hash") FROM users)) --
但是我收到了这个错误:
OperationalError: near "UPDATE": syntax error
我做错了什么?
这不是因为准备好的陈述或任何东西,因为该查询起作用:
' OR username IN ((SELECT username FROM users)) --
我在一个名为stripe-ctf.com的网站上合法地进行此操作并用于学习目的。
答案 0 :(得分:2)
要运行多个语句,通常使用';'分隔它们,例如
SELECT id, password_hash, salt FROM users WHERE username = 'bob'; UPDATE users SET password_hash='hash' WHERE username='bob';
但是,你无法注入这个; secretvault.py第88行的调用cursor.execute(query)
将不允许您执行多个语句(请参阅the documentation: execute()将只执行单个SQL语句。)
你正走在正确的道路上......我不会给出答案,但我鼓励你研究一下SQLite SELECT文档。尝试研究“强制”SELECT语句返回其他值的方法。
祝你好运!