1

我正在尝试运行以下查询:

 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 的网站上合法地这样做并用于学习目的。

4

1 回答 1

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)不允许您执行多个语句(请参阅文档execute() 只会执行单个 SQL 语句。

不过,您走在正确的道路上……我不会给出答案,但我鼓励您查看 SQLite SELECT文档。尝试研究“强制” SELECT 语句返回附加值的方法。

祝你好运!

于 2012-08-27T18:11:07.140 回答