SQL入门篇

您所在的位置:网站首页 sql注入的常见类型 SQL入门篇

SQL入门篇

2023-04-14 19:24| 来源: 网络整理| 查看: 265

SQL注入入门

从零开始学习SQL注入。以下内容从nep冬令营SQL注入讲解视频以及对应课件中整理。

数据库基础基础操作mysql基础操作

登录数据库:

1mysql -uroot -p

查看库名:

1mysql> show databases

创建库、删除库、使用库

1mysql> create database mrkaixin 1mysql> drop database mrkaixin 1mysql> use mrkaixin 1234mysql> create table user(-> `id` int(11)-> `name` varchar(255)-> ); mysql表的一些基本操作(增删查改)Insert :1insert into mrkaixin values('1','nepnep'); Delete1delete from mrkaixin where xxxx; Update1update mrkaixin set name = 'x' where id = 3; Select1select * from mrkaixin;

备注:*表示输出全部字段。

mysql的常用的变量(函数)123451. Database() //查看当前的用户名2. User() //用户3. Version() //mysql版本4. @@basedir //安装路径 mysql中的常用的符号逻辑运算符1231. & and2. || or3. ^ xor

mysql中常用的函数

字符串截取函数1234Substr(database(),1,1)SubtringMid(database(),1,1)Left(database(),1) 编码函数123Ascii()Hex()Char() //ascii()的逆函数 文件函数1Load_file() //读取文件内容 SQL注入SQL注入起手式闭合

常见的注释符

12341. #(%23)2. --+3. ;%004. `

思考:

如果在CTF中,把常用的注释符,以及单引号都按了,那么又该怎么闭合呢?

这里我们通过使用在"\"来将$username后面的单引号转义。然后我们想办法在$password部分注释掉后面的单引号。

123select * from data where username = '\'and password = ' or 1=1 ;%00'//第二个单引号被\转义了。第一个和第三个单引号之间的值为username的值//or后面是输入的password的值,;%00可以用来闭合后面的单引号。 SQL注入的常见姿势联合查询注入联合查询的基本要求:

1、查询列数必须一致

2、查询语句的查询的各列类型、顺序最好一致

联合查询的步骤

1、闭合

2、判断字段数

注意:order by操作

Order by : 如果后面接的是整形的话,根据第几个字段进行排序。

简单介绍一下SQL union操作符

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

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

SQL UNION语法:

123SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法

123SELECT column_name(s) FROM table_name1UNION ALLSELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

image-20210501122431780

判断结果输出位置

这里我们可以看到,如果是1的话,如果数据库中是存在id = 1 ,那么就会返回两行数据,但是由于limit 0,1 。Mysql总会返回第一条数据。所以自然是返回原来查询的,所以这里我们id = -1 或者其他不存在的列,那么第一行就一定是我们自己控制的了。

image-20210504121547474

爆库、爆表、爆列

讲爆X之前,我们先来认识一下information_schema这一个数据库这个库中我们先来看看这两个表

TABLE表 :提供了关于数据库中的表的信息(包括视图)COLUMNS表:提供了表中的列信息。

爆破库名

1union select 1,2,database()

爆表名

12union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()union select 1,2, group_concat(table_name) from information_schema.columns where table_schema=database()

爆Column名

1union select 1,2, group_concat(column_name) from information_schema.columns where table_schema=database()

表名列名都有了之后,我们便可以通过,自由构造语句来获取获取每一个表中的信息了。

报错注入原理

在没法使用union联合查询时使用,前提是不能过滤一些关键函数。

报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。

路径写入其他格式,就会报错并且会返回我们写入的非法格式内容,我们可以利用这个得到我们想得到的内容

报错注入常用到的函数

Updatexml:更新xml文档的函数。 语法:updatexml(文档类型,xpath路径,更新的内容)

Extractvalue:对XML文档进行查询的函数 语法: extractvalue(文档类型,xpath路径)

image-20210509115330629

TIPS

报错注入有长度限制,不同的函数限制不一样。只能截32位。

如果超过32位,可以分开截,先截32,再截32 。

或者从后往前反着截。

盲注布尔盲注

image-20210509120057993

image-20210509120121018

只有2种回显,永真&永假。

永假:程序报错、查询为空

永真:查询正常,但不返回值

这种可以通过网页上的两种不同的回显的注入,称为布尔盲注。

时间盲注

BP抓包,根据页面响应的时间来判断结果。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3