数据库的常见概念
1. 数据(Data): 在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据。
2. 数据库(Database):数据库是按照数据结构来组织、存储和管理数据的"仓库"。
3. 数据库管理系统(DBMS):数据库管理系统(database management system)是一种操纵和管理数据库的软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
4. 结构化查询语言(SQL):结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
数据库存储数据的特点
- 数据存放到表中,然后表再放到库中
- 一个库中可以有多张表,每张表具有唯一的表名用来标识自己
- 表中有一个或多个列,列又称为"字段",相当于java中"属性"
- 表中的每一行数据,相当于java中"对象"。
数据库基础语句
命令行查询
我们先打开MySQL: 先进入你MySQL的目录,然后输入mysql -h localhost -u root -p,回车提示输入密码,成功后连接MySQL数据库。
查看有哪些数据库:show databases; (注意每次执行数据库命令时要加";",你也可以设置成其他符号,这里不再叙述)
进入指定数据库 : use 数据库名;
查看数据库中有哪些表: show tables;
SQL语句查询
- SCHEMATA:存储数据库名的表
- Tables:存储数据库以及数据库中的表名
- Columns:存储数据库、表、以及表中的字段。
我们来实验按DVWA来实验一下:
select * from information_schema.schemata; //爆出数据库
select table_name from information_schema.tables where table_schema='dvwa'; //爆出指定数据库 dvwa 的所有表名
select column_name from information_schema.columns where table_schema='dvwa' and table_name='users';// 爆出 dvwa 指定表,users 的所有字段名
select user,password from dvwa.users; //爆出数据库 users 内容
select version(),@@version,@@global.version,database();//查主机名称,数据库路径,操作系统版本
select user(),current_user(),system_user(),session_user();//查询数据库用户信息
user() 系统用户和登录主机名
current_user() 当前登录用户和登录主机名
system_user() 数据库系统用户账户名称和登录主机名
session_user() 当前会话用户名和登录主机名
数据库语法
数据库语法太多了,我们这里就简单介绍一点了。
Where语句用法
select 查询列表(字段、常量、表达式、函数) from 表名 where (列、运算符、值)
下面的运算符可以在Where子句中使用
操作符 | 描述 |
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
注意:在一些版本里的SQL中,操作符<>可以写成!=。
联合语句查询——Union
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:查询1 UNION (查询2 UNION 查询3)
ORDER BY n //判断当前查询结果的列数,配合 union 实用。
ORDER BY n+1; 让 n 一直增加直到出现错误页面。
Union 联合查询 union select …
select * from dvwa.guestbook order by 3;
select * from dvwa.guestbook order by 4;//order by 4报错,说明结果为3列
select * from dvwa.guestbook where name= 'test' union select 1,2,3;
select * from dvwa.guestbook where name= 'test' and 1=2 union select 1,2,3;
concat ,concat_ws ,group_concat 函数
在实际注入中,巧妙借助 concat,concat_ws,group_concat 函数,可以将注入结果更好的显示在页面中。
concat(str1,str2...)——没有分隔符串联多列结果。
concat_ws(separator,str1,str2,...)——含有分隔符地串联多列结
果
上述两个函数功能而非常类似,只是在分隔符上的区别.
应用场景:查询结果只有一行,一列或多列数据。
Concat()和 concat_ws()函数的对比,两者均可以将一行多列的数据连接为一列,区别 concat()连接没有连接符号。Concat_ws()可以定义连接符,用分隔符将结果连接起来。//0x3a是十六进制":"的意思。
测试结果一目了然concat函数可以把多列合成一列,concat_ws可以在其基础上用:分割。
group_concat(str1,str2,...)——用逗号,串联多行结果为一行,每行结果用逗号串联。
应用场景:查询结果有一行或多行,一列或多列数据。
Group_concat()可以将多行多列查询结果,显示在一行一列,并且多行结果之间用逗号","分隔。
通过对比可以发现,group_concat()可以将多行数据用逗号隔开成为一行。
具体注入方式,在以前的博客中提到过很多,接下来会重新学习并记录下来。