mysql - benchmark() 之类的 MySQL 函数有可能在 SQL 注入(inject)中使用吗?

标签 mysql sql-injection

我们不断收到 sql 注入(inject),并对服务器造成沉重负载。sql 注入(inject)语句使用 benchmark() 函数。
benchmark() 之类的 MySQL 函数有可能在 SQL 注入(inject)中使用吗?

最佳答案

BENCHMARK这样的耗时函数和 SLEEP用于利用 SQL 注入(inject),攻击者无法直接看到注入(inject)的结果,因此称为 SQL 盲注。

与基于 bool 的技术类似,注入(inject)耗时函数BENCHMARK/SLEEP,并根据指定条件影响服务器的响应:

… IF(EXISTS (SELECT 1 FROM mysql.users WHERE username='root' AND SUBSTR(password, 3, 1)='x'), SLEEP(5), 1) …

如果root密码的第三个字符是x,则注入(inject)的IF将调用SLEEP(5),从而延长服务器的响应时间五秒。

因此,如果响应时间比平均响应时间长 5 秒,攻击者就可以断定 root 密码的第三个位置有一个 x。通过这种方式,攻击者可以逐个字符地重建 root 的密码。

关于mysql - benchmark() 之类的 MySQL 函数有可能在 SQL 注入(inject)中使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23486770/

相关文章:

php - 这段代码中的 "mysql_real_escape_string"应该放在哪里?

php - 交叉引用同一个表中的2个字段

mysql - 在MYSQL中排除选择查询中的特定列

php - 测试 Web 应用程序中的安全漏洞 : Best practices?

postgresql - SQL注入(inject)和Postgres "CREATE SCHEMA"

MySQL - 如果在事务期间插入失败,是否总是会引发异常或警告?

mysql - 截断了不正确的 DOUBLE 值 : '-'

sql - 我在我的数据库中发现了很多奇怪的字符串,有人试图进入我的网站?

mysql - 通过 SQLmap 进行 SQL 注入(inject) - UNION ALL 注入(inject)如何工作?

ruby-on-rails - Rails 清理方法添加双引号