【发布时间】:2015-09-09 10:46:24
【问题描述】:
我正在研究 SQL 注入,并在我的 PHP 代码中尝试了这个查询:
$condition = str_replace(["'","\\"],["\\'","\\\\"], @$_GET['q']);
$query = "SELECT * FROM dummy_table WHERE dummy_column = '$condition'";
DB 和表字符集设置为 UTF8。
我不能注射任何东西,有人可以帮我吗?
编辑:正如 GarethD 所指出的,这将首先逃脱 ' 而不是 \,允许注入,那么这个 str_replace 呢?
$condition = str_replace(["\\","'"],["\\\\","\\'"], @$_GET['q']);
【问题讨论】:
-
使用准备好的语句/参数化查询有什么问题?
-
正如我所写的,我正在研究 SQL 注入,所以准备好的语句对我来说毫无用处。我需要一个易受攻击的查询来训练自己。我在开发时总是使用 PDO 和/或准备好的语句。请停止向我推荐其他缓解技术,并帮助我了解如何绕过此示例。
-
@BobJarvis 这取决于 $_GET['q'] 值,但每次我使用单引号时,它都会被翻译为 \'。如果我不能使用'?这应该是一个非常基本的示例,但我找不到漏洞。
-
@PeeHaa 结果总是空的,我不能让 mysql 抛出错误,你能给我一个 $_GET['q'] 抛出 mysql 错误的值吗?错误报告已启用并报告所有(包括通知)
-
你说过“DB and tables charset is set to UTF8”,但是the character set of the database connection呢?还有,你确定服务器的SQL模式不包含
NO_BACKSLASH_ESCAPES?
标签: php mysql sql sql-injection