带有更新子查询的Sqlite注入

时间:2012-08-23 14:36:32

标签: sql sqlite sql-injection

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

 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的网站上合法地进行此操作并用于学习目的。

1 个答案:

答案 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语句返回其他值的方法。

祝你好运!