小迪-day12(SQL注入简要概述)

news2024/9/22 1:28:34
web-漏洞小迪安全.png

1、相关sql函数、语句

1.1 count()

1.1.1 count(column_name)

​ count(column_name)是计算数据库表中指定列有多少行,

​ 例:

SELECT COUNT(column_name) FROM table_name

1.1.2 count(*)

可以计算表中有多少行(有多少条数据)表中记录数

1.2 sum()

返回数值列的总和(只能运用于数值列)

1.3 exists()

exists()用于判断查询字句是否有记录,如果有一条或多条记录,则返回True,没有记录则返回False

EXISTS 语法

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);

1.4 order by

ORDER BY 语句用于根据指定的  列  对结果集进行排序。

ORDER BY 语句默认按照升序对记录进行排序。

如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

order by 根据来进行排序,后面跟上 列名 asc(升序,默认)/desc(降序)

例如:

SELECT Company, OrderNumber FROM Orders ORDER BY Company

如果order by 后面的列数,大于表的列数,就会报错。

可以在order by 后面写数字,代表一个临时的列(详见标题2),如果数字数大于表的列数就会报错

例如:

image-20221108183335707

此时有1,2,3,4四个数字代表四个临时列,由于表只有三个列,所以报错

1.5 union

union 联合查询,将多条查询语句的结果集放在一个表中

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

SQL UNION 语法

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

**注释:**默认地,UNION 操作符选取不同的值(结果集中没有重复的)。

​ 如果允许重复的值,请使用 UNION ALL

SQL UNION ALL 语法

SELECT *column_name(s)* FROM *table1*
UNION ALL
SELECT *column_name(s)* FROM *table2*;

**注释:**UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

1.6 group_concat()

group_concat()函数可以将组中的字符串连接成为具有各种选项的单个字符串。

最简单用法,可以把多个结果用逗号分开,形成一个字符串

2、语句 select 1 from 是什么?

select 1 from ...   与 select anycol(目的表集合中的任意一行)from ...  
与 select * from ...  都可以用来查询数据是否有记录

select 1 from 中的1是一常量(可以为任意数值),查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表

测试场景:

kc表是一个数据表,假设表的行数为10行。

img

1:select 1 from kc 增加临时列,每行的列值是写在select后的数,这条sql语句中是1

2:select count(1) from kc 不管count(a)的a值如何变化,得出的值总是kc表的行数

3:select sum(1) from kc 计算临时列的和

在MySQL中用 1 测试了一下,发现结果如下:

1:测试结果,得出一个行数和kc表行数一样的临时列(暂且这么叫,我也不知道该叫什么),每行的列值是1;

2:得出一个数,该数是kc表的行数;

3:得出一个数,该数是kc表的行数;

然后我又用“2”测试,结果如下:

1:得出一个行数和kc表行数一样的临时列,每行的列值是2;

2:得出一个数,该数是kc表的行数;

3:得出一个数,该数是kc表的行数×2的数

然后我又用更大的数测试:

1:得出一个行数和kc表行数一样的临时列,每行的列值是我写在select后的数;

2:还是得出一个数,该数是kc表的行数;

3:得出一个数,该数是table表的行数×写在select后的数

结果图:

img

img
注意观察下面的两幅图的区别。

**img
**

**img

**

综上所述:

第一种的写法是增加临时列,每行的列值是写在select后的数;第二种是不管count(a)的a值如何变化,得出的值总是table表的行数;第三种是计算临时列的和

​ 当不需要知道结果是什么,只需要知道有没有结果的时候,可以使用select 1 作为子查询结果是否存在判断,这样可以提高性能。

3、SQL注入

1.1 前言

​ SQL注入漏洞将是重点部分,其中SQL注入又非常复杂,区分各种数据库类型,提交方法,数据类型等注入,我们需要按部就班的学习,才能学会相关SQL注入的核心。同样此类漏洞是WEB安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要的。

SQL注入-小迪安全.png

​ SQL注入简单的说就是,通过添加一些sql语句在一些原有sql语句中可注入的地方,达到改写sql语句功能的目的,从而获取到数据库相关信息(高危)

1.2 MySQL注入

mysql注入-小迪.png

1.3 sqlilabs靶场搭建

下载文件放进phpstudy的www文件下,然后该配置文件,更改数据库用户名,密码,

然后进入靶场初始化数据库

实例:less-2

image-20221108184147135

查看源码:

image-20221108184248152

发现源码中$id变量接受后没有做任何限制,为恶意sql注入创造了条件。

查询数据库security可知,该数据库有4张表。

image-20221108184544871

查询users表:

image-20221108184651816

查询emails表:

image-20221108184723978

在数据库中执行如下语句:

select * from users where id=-1 union select 1,email_id,3 from emails limit 0,1;

可得:

image-20221108184916746

*** 如果执行如下语句:

 select 1,email_id,3 from emails union select * from users;

则表结构为:

image-20221108190740724
说明:如果使用union联合查询,产生表的列名为第一条select语句查询表的列名
解释:
(limit 只显示第一条)
此处令id = -1 目的是使前一条select语句查询不到结果,然后显示出后面的select语句

语句:select 1,email_id,3 from emails 
1:代表临时产生的一列,放在结果集的第一列,列中的值为1
email_id: 放在第二列
3:代表临时产生的一列,放在结果集的第一列,列中的值为3

将上述代码放在url中执行:可以将email查询到用户名中。

image-20221108191426881

image-20221108191320683

注: url中 %20 代表空格

1.4 测试题:

参数x有注入,以下那个注入测试正确? a,b,c

a. www.xiaodi8.com/news.php?y=1 and 1=1&x=2

b. www.xiaodi8.com/news.php?y=1&x=2 and 1=1

c. www .xiaodi8.com/news.php?y=1 and 1=1&x=2 and 1=1

d. www .xiaodi8.com/news.php?xx=1 and 1=1&xxx=2 and 1=1

**总结:**可控变量,带入数据库查询,变量未存在过滤或过滤不严谨。

1.5 判断是否存在注入点?

1、逻辑值
    and 1 = 1		页面正常
    and 1 = 2		页面异常
    则可能存在注入点
(在url中加入)


2order by
		通过order by 判断注入的字段数
	
	order by 1,2,3,4 如果123不报错,1234报错,说明该表中只有三列,存在sql注入
    
image-20221108192257428 image-20221108192154448

1.6 信息收集

sql获得相关信息
数据库版本:version()
数据库名字:database()
数据库用户:user()
操作系统:@@version_compile_os   		没有括号!
image-20221108192754857

直接在sql语句中写

1.7 MySQL 5.0+版本探测

在mysql5.0以后的版本

存在一个information_schema数据库、里面有 所有存储记录数据库名表名列名的数据库
相当于可以通过information_schema这个数据库获取到数据库下面的表名和列名。

1.7.1 获取相关信息

可以使用 . 来调用子类

information_schema.tables			#information_schema下面的所有表名
information_schema.columns			#information_schema下面所有的列名
table_name										#表名
column_name										#列名
table_schema									#数据库名

1、查询security数据库下的所有表

image-20221108194456608

2、查询users表下的所有列名

image-20221108195011327

1.8 墨者学院例题

image-20221109185634955

点进去发现里面有个公告

image-20221109185824251 image-20221109185845745

?id=1 疑似sql注入点

判断是否有sql注入:

?id=1 and 1=1	正常
?id=1 and 1=2 	异常
image-20221109190047798

说明存在sql注入

然后判断该表的字段数

?id=1 order by 1		...		?id=1 order by 4

当by后面的数字为5时,页面不正常,说明字段数为4

image-20221109190305924

然后判断回显的字段是哪几个?

image-20221109190440960
使用union联合查询,注意此时让id=-1 查询不到前面的数据,则会把后半段select语句显示出来
此处说明第二列和第三列会被显示

信息搜集:

image-20221109190650848

version() 查询mysql版本号,5.0+说明此处可以使用数据库 information_schema.tables/columns

database() 查询此数据库名称

image-20221109190909704

user() 查询数据库用户名

@@version_compile_os 查询操作系统名称

image-20221109191151942

查询该数据库下的所有表,

table_name 代表	表   table_schema代表数据库,
information_schema.tables	存储了所有表信息(5.0+)

查询该表下的所有字段(列)

image-20221109191553480

column_name 代表列名
information_schema.columns	存储了所有列信息(5.0+)

group_concat(列名) 把所有结果拼接

1.9 链接

1.9.1sqlilabs靶场相关解答

https://www.yuque.com/office/yuque/0/2022/pdf/2476579/1647239035090-84752d34-43a3-4d21-953e-612760a5e4d7.pdf?from=https%3A%2F%2Fwww.yuque.com%2Fweiker%2Fxiaodi%2Fgeg7au

e=“zoom:25%;” />

查询该数据库下的所有表,

table_name 代表	表   table_schema代表数据库,
information_schema.tables	存储了所有表信息(5.0+)

查询该表下的所有字段(列)

[外链图片转存中…(img-If0PYi1y-1670312423010)]

column_name 代表列名
information_schema.columns	存储了所有列信息(5.0+)

group_concat(列名) 把所有结果拼接

1.9 链接

1.9.1sqlilabs靶场相关解答

https://www.yuque.com/office/yuque/0/2022/pdf/2476579/1647239035090-84752d34-43a3-4d21-953e-612760a5e4d7.pdf?from=https%3A%2F%2Fwww.yuque.com%2Fweiker%2Fxiaodi%2Fgeg7au

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

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

相关文章

基于 docker 搭建 grafana+prometheus 监控资源之mysql+docker+alertmanager配置(二)(超详细版)

先去看第一篇(基础部署篇),看完后,才能接上本篇。 基于 docker 搭建 grafanaprometheus 监控资源之mysqldockeralertmanager配置(二)环境信息服务基本信息一、安装Mysqld_exporter1.1 标准启动1.2 docker-c…

1554_AURIX_TC275_时钟监控功能以及时钟紧急行为

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这部分还是前面CCU寄存器的一些延续,寄存器支持模块的禁用、禁用状态的查询以及是否支持休眠的控制。 1. 时钟监控是时钟进行安全设计需要考虑的一个手段,支持两种锁…

历史性突破,200层以上存储芯片率先量产,领先国外芯片巨头

近日,中企芯片技术迎来历史性突破,200层以上存储芯片率先量产,领先国外存储芯片巨头,或将成为全球行业领导者。后起之秀,鱼跃龙门 众所周知,存储芯片的生产,不仅需要高端技术,还需要…

MySQL之MVCC

多版本并发控制MVCC,也就是Copy on Write思想。MVCC除了支持读和读并行,还支持读和写并行、写和读并行,但为了保持数据一致性,写和写是无法并行的。 ​ 如下图,在事务1写的时候会copy一个记录的副本,其他事…

编译器做了这么多,你知道吗?

编译器做了什么 从最直观的角度来讲,编译器就是将高级语言翻译成机器语言的一个工具。比如我们用C/C语言写的一个程序可以使用编译器将其翻译成机器可以执行的指令及数据。我们前面也提到了,使用机器指令或汇编语言编写程序是十分费事及乏味的事情&…

LabVIEW编程LabVIEW开发ITECH IT6000D系列电源例程与相关资料

LabVIEW编程LabVIEW开发ITECH IT6000D系列电源例程与相关资料 ​IT6000D系列大功率可编程直流电源可支持多种规格的输出能力,以满足高电流、低电压或高电压、低电流等多种测试需求。同时,相同型号的整机间可并联工作,以实现更强大的输出能力…

settings.py配置文件(详解)

文章目录settings.py配置文件1. settings.py文件介绍1) BASE_DIR2) SECRET_KEY3) DEBUG4) ALLOWED_HOSTS5) INSTALLED_APPS6) MIDDLEWARE7) ROOT_URLCONF8) TEMPLATES9) WSGI_APPLICATION10) DATABASES11) AUTH_PASSWORD_VALIDATORS12) LANGUAGE_CODE和TIME_ZONE13) USE_118N和…

Cy7 Tyramide,Tyramide-Cy7,花青素Cy7 酪酰胺,Cy7酪胺

●外观以及性质: Cy7酪胺含有明亮的Cy7,可以使用标准的Cy7滤波片组轻松检测到。酪胺信号放大(TSA)是一种特别通用且功能强大的酶扩增技术,具有更高的检测灵敏度。西安凯新生物科技有限公司​为了实现大IHC检测&#xf…

排序算法总结

排序算法 排序算法可以分为内部排序和外部排序 内部排序是数据记录在内存中进行排序 外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并…

Qt-OpenCV学习笔记--人脸识别

前言 本人从事机械设计12年,业余时间自学编程。 2022年4月6日,开始学习C#, 2022年9月7日,开始学习c和Qt, 2022年10月28日,开始学习OpenCV, 今天终于搞定了传说中的 人脸识别 ,在…

spirngcloud的基本介绍与服务注册

1. 应用系统架构的演变 单应用架构 -> 应用服务器和数据库服务器分离 -> 应用服务器集群 -> 数据库压力变大,数据库读写分离 -> 引入缓存机制缓解数据库的压力 -> 数据库的水平/垂直拆分(数据库分库分表) -> 应用的拆分(微服务&…

[附源码]计算机毕业设计绿色生活交流社区网站Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

GitLab搭建

以docker方式运行gitlab docker run --detach \--hostname gitlab.mczaiyun.top \--publish 8443:443 --publish 8090:80 --publish 8022:22 \--name gitlab \--restart always \--volume /root/gitlab/config:/etc/gitlab \--volume /root/gitlab/logs:/var/log/gitlab \--vo…

Elasticsearch入门(二)基本操作(索引、文档、映射)

数据格式 Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比ES 里的 Index 可以看做一个库,而 Types 相当于表&#x…

【在Vue脚手架项目中使用qs框架】

目录 1. 安装qs框架 2. 在main.js中添加配置 1. 安装qs框架 在前端项目中,可以使用qs框架,实现“将对象转换为FormData格式的数据”。 首先,安装此框架: 如果没有权限进入C盘找到cmd的执行软件,用管理员启动&…

练习题(12-06)

目录 1.最小数 2.数天数 3.非常特殊的数 4.最大值路径 5.拆分质数 6.文件拷贝 7.除去重复单词 8.变成回文字符串 1.最小数 题目描述 请找到一个大于2022的最小数,这个最小的数转换成二进制后,最低的6个二进制全为0. 思路:枚举即…

[附源码]Python计算机毕业设计Django物业管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Java开发:反射机制

一、Java Reflection Reflection(反射)是java被视为动态语言的关键(Java是静态语言,因为有了反射所以又被成为“准动态语言”) 二、重点:一个类只有一个Class对象 三、反射的优缺点 优点:可…

【JAVA问题解决方案】02.Freemarker导出Excel超出上限分表解决方案

陈老老老板🦸👨‍💻本文专栏:Java问题解决方案(都是一些常见的问题解决方案)👨‍💻本文简述:本文讲一下有关Freemarker导出Excel分表的解决方案,超级详细。&a…

Tomcat7+ 弱口令 后台getshell漏洞

Tomcat7 弱口令 && 后台getshell漏洞 🍉 shell 此环境来自vulhub工程: https://github.com/vulhub/vulhub 以下测试环境为ubuntu 20.04 🍉目录Tomcat7 弱口令 && 后台getshell漏洞环境准备弱密码登录war文件上传蚁剑连接…