马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、布尔盲注
1、布尔盲简介
布尔盲注是一种SQL注入攻击技能,用于在无法直接获取数据库查询结果的情况下,通过页面的响应来判断注入语句的真假,从而获取数据库中的敏感信息
2、布尔盲注工作原理
布尔盲注的焦点在于使用SQL语句的布尔逻辑(真或假)来推断数据库中的信息。攻击者通过构造特定的SQL查询语句,观察应用程序的响应(通常是页面内容的变化、HTTP状态码的差别或响应时间的延迟等),来判断布尔条件的真假
3、常用函数
length():返回字符串的长度,用于确定数据库名、表名或字段名的长度
substr():提取特定长度的字符串,用于逐步推测数据库名、表名或字段名
ascii():将字符转换为ASCII码值,用于逐个字符地推测数据库名、表名或字段名
4、实战步骤
(1)判断注入点:
通过构造如id=1 and 1=1和id=1 and 1=2的语句,观察页面响应来确认注入点
(2)判断长度:
使用length()函数确定目标字符串的长度,比方id=1 and length(database())=8
(3)枚举字符:
使用substr()和ascii()函数逐个字符地推测目标字符串,比方id=1 and ascii(substr(database(),1,1))=100
5、布尔盲注实用场景
页面不会回显SQL语句的实行结果;
数据库报错被处置处罚,不会表现错误信息;
无法使用联合查询注入(UNION注入)或报错注入
6、实例
典范的布尔盲注攻击场景
假设后端的PHP代码如下:
- <?php
- $id = $_GET['id'];
- $query = "SELECT * FROM users WHERE id = '$id'";
- $result = mysqli_query($conn, $query);
- ?>
复制代码 然后我们构造这样的注入语句:
后端生成的SQL语句则为:
- SELECT * FROM users WHERE id = '1' and 1=1
复制代码 表明:
1=1 始终为真,因此这条SQL语句等价于:
- SELECT * FROM users WHERE id = '1'
复制代码 数据库会正常实行这条语句,页面会正常表现
那假如我们构造的SQL语句为:
则后端生成的SQL语句为:
- SELECT * FROM users WHERE id = '1' and 1=2
复制代码 表明:
1=2 始终为假,因此这条SQL语句等价于:
- SELECT * FROM users WHERE id = '1' and FALSE
复制代码 由于 1=2 为假,整个条件 id = '1' and 1=2 也为假,因此这条SQL语句不会返回任何结果;
假如页面逻辑依赖于查询结果的存在(比方,表现用户信息),页面可能会表现错误或异常
攻击者的逻辑判断
攻击者通过观察页面的响应来判断SQL语句的真假:
1、页面正常表现
假如页面正常表现,说明注入的条件为真(1=1);
这表明注入的SQL语句被成功实行,且条件为真
2、页面表现错误或异常
假如页面表现错误或异常,说明注入的条件为假(1=2)
这表明注入的SQL语句被成功实行,但条件为假,导致查询没有返回结果
布尔盲注的原理
布尔盲注的焦点在于使用布尔逻辑(真或假)来判断注入语句的真假。攻击者通过构造特定的注入语句,观察页面的响应来推断数据库中的信息
示例
假设攻击者想判断数据库中是否存在某个用户 admin,可以使用以下步骤:
1、构造注入语句
/?id=1' and (SELECT username FROM users WHERE username='admin')='admin' --+
后端生成的SQL语句:
/?id=1' and (SELECT username FROM users WHERE username='admin')='admin' --+
2、观察页面响应
假如页面正常表现,说明条件为真,数据库中存在用户 admin;
假如页面表现错误或异常,说明条件为假,数据库中不存在用户 admin
二、时间盲注
1、时间盲注简介
时间盲注(Time-Based Blind SQL Injection)是一种SQL注入攻击技能,用于在无法直接获取数据库查询结果的情况下,通过丈量数据库响应的时间来推断数据库中的信息。这种方法特别实用于那些不会直接返回错误信息或查询结果的场景
2、时间盲注工作原理
时间盲注的焦点在于使用SQL语句的实行时间来判断注入语句的真假。攻击者通过构造特定的SQL语句,使数据库在满足某些条件时延迟响应。假如页面响应时间显着增长,说明注入的条件为真;假如响应时间正常,说明注入的条件为假
3、常用函数
SLEEP():MySQL中的函数,用于使数据库延迟指定的时间(秒);
waitfor delay:SQL Server中的函数,用于使数据库延迟指定的时间;
pg_sleep():PostgreSQL中的函数,用于使数据库延迟指定的时间
4、实战步骤
(1)判断注入点
通过构造如id=1' and sleep(5)的语句,观察页面响应时间来确认注入点
假如页面响应延迟了5秒,说明存在注入点
(2)判断条件真假
比方
/?id=1' and (select 1 from users where username='admin')=1 and sleep(5)
假如页面响应延迟了5秒,说明条件为真;假如响应时间正常,说明条件为假
(3)枚举数据库信息
通过逐个字符地推测数据库名、表名或字段名,构造注入语句并观察响应时间。
比方,推测数据库名的第一个字符是否为'a':
/?id=1' AND ASCII(SUBSTRING((SELECT database()), 1, 1))=97 AND SLEEP(5)
假如页面响应延迟了5秒,说明第一个字符为'a';否则,继续推测其他字符。
示例
假设后端的PHP代码如下:
- <?php
- $id = $_GET['id'];
- $query = "SELECT * FROM users WHERE id = '$id'";
- $result = mysqli_query($conn, $query);
- ?>
复制代码 攻击者通过URL传递的参数是:
/?id=1' AND SLEEP(5) (巨细写没有影响)
后端生成的SQL语句将是:
- SELECT * FROM users WHERE id = '1' AND SLEEP(5)
复制代码 假如页面响应延迟了5秒,说明存在注入点。
总之
时间盲注是一种通过丈量数据库响应时间来推断数据库信息的SQL注入技能。攻击者通过构造特定的SQL语句,使数据库在满足某些条件时延迟响应,从而判断条件的真假。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |