我们不断收到 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/