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 という Web サイトで、学習目的で合法的に行っています。

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 に答える